@@ -147,6 +147,40 @@ describe('Slack custom-bot webhook route', () => {
147147 expect ( res . status ) . toBe ( 200 )
148148 } )
149149
150+ it ( 'returns 200 when every target permanently lacks its deployed trigger block' , async ( ) => {
151+ mockDispatchResolvedWebhookTarget . mockResolvedValue ( {
152+ outcome : 'ignored' ,
153+ response : new Response ( 'Trigger block not found in deployment' , { status : 404 } ) ,
154+ reason : 'block-missing' ,
155+ } )
156+
157+ const res = await POST ( makeRequest ( ) , context )
158+
159+ expect ( mockDispatchResolvedWebhookTarget ) . toHaveBeenCalledTimes ( 1 )
160+ expect ( res . status ) . toBe ( 200 )
161+ } )
162+
163+ it ( 'returns a retryable failure when another target fails beside a missing block' , async ( ) => {
164+ mockFindWebhooksByRoutingKey . mockResolvedValue ( [ webhook ( 'wh1' ) , webhook ( 'wh2' ) ] )
165+ mockDispatchResolvedWebhookTarget
166+ . mockResolvedValueOnce ( {
167+ outcome : 'ignored' ,
168+ response : new Response ( 'Trigger block not found in deployment' , { status : 404 } ) ,
169+ reason : 'block-missing' ,
170+ } )
171+ . mockResolvedValueOnce ( {
172+ outcome : 'failed' ,
173+ response : new Response ( 'Queue failed' , { status : 500 } ) ,
174+ reason : 'queue-failed' ,
175+ } )
176+
177+ const res = await POST ( makeRequest ( ) , context )
178+
179+ expect ( mockDispatchResolvedWebhookTarget ) . toHaveBeenCalledTimes ( 2 )
180+ expect ( res . status ) . toBe ( 500 )
181+ await expect ( res . text ( ) ) . resolves . toBe ( 'Queue failed' )
182+ } )
183+
150184 it ( 'returns the dispatch failure when no target is acknowledged' , async ( ) => {
151185 mockDispatchResolvedWebhookTarget . mockResolvedValue ( {
152186 outcome : 'failed' ,
0 commit comments