@@ -499,6 +499,54 @@ async def read_trigger_impl(trigger: UiPathResumeTrigger) -> dict[str, Any]:
499499 # Delegate should have been executed only once (no auto-resume)
500500 assert runtime_impl .execution_count == 1
501501
502+ @pytest .mark .asyncio
503+ async def test_resumable_skips_inbox_triggers_on_auto_resume_check (self ) -> None :
504+ """Inbox triggers should be skipped when checking for auto-resume after suspension.
505+
506+ Inbox triggers are async-external (payload delivered via Integration
507+ Services), so calling read_trigger on them at suspend time would hit a
508+ 404 and fault the run. They should behave like API triggers here.
509+ """
510+
511+ runtime_impl = MultiTriggerMockRuntime ()
512+ storage = StatefulStorageMock ()
513+ trigger_manager = make_trigger_manager_mock ()
514+
515+ def create_inbox_trigger (data : dict [str , Any ]) -> UiPathResumeTrigger :
516+ return UiPathResumeTrigger (
517+ interrupt_id = "" , # Will be set by resumable runtime
518+ trigger_type = UiPathResumeTriggerType .INBOX ,
519+ payload = data ,
520+ )
521+
522+ trigger_manager .create_trigger = AsyncMock (side_effect = create_inbox_trigger ) # type: ignore
523+
524+ # Track whether read_trigger is ever called — it must NOT be, otherwise
525+ # the filter is broken and we'd hit the payload endpoint prematurely.
526+ trigger_manager .read_trigger = AsyncMock (
527+ side_effect = AssertionError (
528+ "read_trigger must not be called for Inbox triggers pre-resume"
529+ )
530+ ) # type: ignore
531+
532+ resumable = UiPathResumableRuntime (
533+ delegate = runtime_impl ,
534+ storage = storage ,
535+ trigger_manager = trigger_manager ,
536+ runtime_id = "runtime-1" ,
537+ )
538+
539+ result = await resumable .execute ({})
540+
541+ assert result .status == UiPathRuntimeStatus .SUSPENDED
542+ assert result .triggers is not None
543+ assert len (result .triggers ) == 2
544+ assert all (
545+ t .trigger_type == UiPathResumeTriggerType .INBOX for t in result .triggers
546+ )
547+ trigger_manager .read_trigger .assert_not_called ()
548+ assert runtime_impl .execution_count == 1
549+
502550 @pytest .mark .asyncio
503551 async def test_resumable_auto_resumes_task_triggers_but_not_api_triggers (
504552 self ,
0 commit comments