@@ -269,17 +269,40 @@ describe("thread-ownership plugin", () => {
269269 expect ( infoMessage ) . toContain ( "cancelled send" ) ;
270270 } ) ;
271271
272- it ( "fails open when the forwarder conflict JSON exceeds the bounded read limit" , async ( ) => {
272+ it ( "cancels when the forwarder conflict JSON exceeds the bounded read limit" , async ( ) => {
273273 vi . mocked ( globalThis . fetch ) . mockResolvedValue (
274274 new Response ( JSON . stringify ( { owner : "x" . repeat ( 70 * 1024 ) } ) , { status : 409 } ) ,
275275 ) ;
276276
277277 const result = await sendSlackThreadMessage ( ) ;
278278
279- expect ( result ) . toBeUndefined ( ) ;
280- const warningMessage = requireFirstLogMessage ( api . logger . warn , "ownership check warning log" ) ;
281- expect ( warningMessage ) . toContain ( "ownership check failed" ) ;
279+ expect ( result ) . toEqual ( { cancel : true } ) ;
280+ const warningMessage = requireFirstLogMessage (
281+ api . logger . warn ,
282+ "ownership conflict warning log" ,
283+ ) ;
284+ expect ( warningMessage ) . toContain ( "conflict body unreadable" ) ;
282285 expect ( warningMessage ) . toContain ( "JSON response exceeds 65536 bytes" ) ;
286+ const infoMessage = requireFirstLogMessage ( api . logger . info , "ownership cancel info log" ) ;
287+ expect ( infoMessage ) . toContain ( "cancelled send" ) ;
288+ expect ( infoMessage ) . toContain ( "owned by unknown" ) ;
289+ } ) ;
290+
291+ it ( "cancels when the forwarder conflict JSON is malformed" , async ( ) => {
292+ vi . mocked ( globalThis . fetch ) . mockResolvedValue ( new Response ( "{" , { status : 409 } ) ) ;
293+
294+ const result = await sendSlackThreadMessage ( ) ;
295+
296+ expect ( result ) . toEqual ( { cancel : true } ) ;
297+ const warningMessage = requireFirstLogMessage (
298+ api . logger . warn ,
299+ "ownership conflict warning log" ,
300+ ) ;
301+ expect ( warningMessage ) . toContain ( "conflict body unreadable" ) ;
302+ expect ( warningMessage ) . toContain ( "malformed JSON response" ) ;
303+ const infoMessage = requireFirstLogMessage ( api . logger . info , "ownership cancel info log" ) ;
304+ expect ( infoMessage ) . toContain ( "cancelled send" ) ;
305+ expect ( infoMessage ) . toContain ( "owned by unknown" ) ;
283306 } ) ;
284307
285308 it ( "fails open on network error" , async ( ) => {
0 commit comments