@@ -193,6 +193,68 @@ async def test_delete_trigger(self, storage: SqliteResumableStorage):
193193 assert len (triggers ) == 1
194194 assert triggers [0 ].interrupt_id == "interrupt2"
195195
196+ @pytest .mark .asyncio
197+ async def test_delete_triggers (self , storage : SqliteResumableStorage ):
198+ """Test deleting sibling triggers for the same interrupt."""
199+ api_trigger = UiPathResumeTrigger (
200+ interrupt_id = "interrupt1" ,
201+ trigger_type = UiPathResumeTriggerType .API ,
202+ trigger_name = UiPathResumeTriggerName .API ,
203+ payload = "api-payload" ,
204+ )
205+ timer_trigger = UiPathResumeTrigger (
206+ interrupt_id = "interrupt1" ,
207+ trigger_type = UiPathResumeTriggerType .TIMER ,
208+ trigger_name = UiPathResumeTriggerName .TIMER ,
209+ payload = "timer-payload" ,
210+ )
211+ unrelated_trigger = UiPathResumeTrigger (
212+ interrupt_id = "interrupt2" ,
213+ trigger_type = UiPathResumeTriggerType .TASK ,
214+ trigger_name = UiPathResumeTriggerName .TASK ,
215+ payload = "unrelated-payload" ,
216+ )
217+ other_runtime_trigger = UiPathResumeTrigger (
218+ interrupt_id = "interrupt1" ,
219+ trigger_type = UiPathResumeTriggerType .API ,
220+ trigger_name = UiPathResumeTriggerName .API ,
221+ payload = "other-runtime-payload" ,
222+ )
223+ await storage .save_triggers (
224+ "runtime1" , [api_trigger , timer_trigger , unrelated_trigger ]
225+ )
226+ await storage .save_triggers ("runtime2" , [other_runtime_trigger ])
227+
228+ await storage .delete_triggers ("runtime1" , [api_trigger , timer_trigger ])
229+
230+ triggers = await storage .get_triggers ("runtime1" )
231+ assert triggers is not None
232+ assert [trigger .interrupt_id for trigger in triggers ] == ["interrupt2" ]
233+ assert triggers [0 ].payload == "unrelated-payload"
234+
235+ other_triggers = await storage .get_triggers ("runtime2" )
236+ assert other_triggers is not None
237+ assert len (other_triggers ) == 1
238+ assert other_triggers [0 ].payload == "other-runtime-payload"
239+
240+ @pytest .mark .asyncio
241+ async def test_delete_triggers_empty_list (self , storage : SqliteResumableStorage ):
242+ """Test deleting an empty trigger list leaves storage unchanged."""
243+ trigger = UiPathResumeTrigger (
244+ interrupt_id = "interrupt1" ,
245+ trigger_type = UiPathResumeTriggerType .API ,
246+ trigger_name = UiPathResumeTriggerName .API ,
247+ payload = "payload1" ,
248+ )
249+ await storage .save_triggers ("runtime1" , [trigger ])
250+
251+ await storage .delete_triggers ("runtime1" , [])
252+
253+ triggers = await storage .get_triggers ("runtime1" )
254+ assert triggers is not None
255+ assert len (triggers ) == 1
256+ assert triggers [0 ].interrupt_id == "interrupt1"
257+
196258 @pytest .mark .asyncio
197259 async def test_get_nonexistent_triggers_returns_none (
198260 self , storage : SqliteResumableStorage
0 commit comments