@@ -300,6 +300,29 @@ describe('NewThreadPage ACP draft session bootstrap', () => {
300300 expect ( sessionStore . createSession ) . not . toHaveBeenCalled ( )
301301 } )
302302
303+ it ( 'keeps draft input when ACP draft send fails' , async ( ) => {
304+ const consoleErrorSpy = vi . spyOn ( console , 'error' ) . mockImplementation ( ( ) => { } )
305+ try {
306+ const { wrapper, sessionStore } = await setup ( )
307+ const file = { name : 'a.pdf' , path : '/tmp/a.pdf' , mimeType : 'application/pdf' }
308+ ; ( wrapper . vm as any ) . message = 'hello from draft'
309+ ; ( wrapper . vm as any ) . attachedFiles = [ file ]
310+ sessionStore . sendMessage . mockRejectedValueOnce ( new Error ( 'send failed' ) )
311+
312+ await ( wrapper . vm as any ) . onSubmit ( )
313+ await flushPromises ( )
314+
315+ expect ( sessionStore . sendMessage ) . toHaveBeenCalledWith ( 'draft-1' , {
316+ text : 'hello from draft' ,
317+ files : [ file ]
318+ } )
319+ expect ( ( wrapper . vm as any ) . message ) . toBe ( 'hello from draft' )
320+ expect ( ( wrapper . vm as any ) . attachedFiles ) . toEqual ( [ file ] )
321+ } finally {
322+ consoleErrorSpy . mockRestore ( )
323+ }
324+ } )
325+
303326 it ( 'passes draft generation settings when creating a deepchat session' , async ( ) => {
304327 const { wrapper, sessionStore, agentStore, modelStore, draftStore } = await setup ( )
305328
@@ -343,6 +366,42 @@ describe('NewThreadPage ACP draft session bootstrap', () => {
343366 )
344367 } )
345368
369+ it ( 'keeps draft input when deepchat session creation fails' , async ( ) => {
370+ const consoleErrorSpy = vi . spyOn ( console , 'error' ) . mockImplementation ( ( ) => { } )
371+ try {
372+ const { wrapper, sessionStore, agentStore, modelStore, draftStore } = await setup ( )
373+ const file = { name : 'a.pdf' , path : '/tmp/a.pdf' , mimeType : 'application/pdf' }
374+
375+ agentStore . selectedAgentId = 'deepchat'
376+ await flushPromises ( )
377+ modelStore . enabledModels = [
378+ {
379+ providerId : 'openai' ,
380+ models : [ { id : 'gpt-4' , name : 'GPT-4' } ]
381+ }
382+ ]
383+ draftStore . providerId = 'openai'
384+ draftStore . modelId = 'gpt-4'
385+ ; ( wrapper . vm as any ) . message = 'hello deepchat'
386+ ; ( wrapper . vm as any ) . attachedFiles = [ file ]
387+ sessionStore . createSession . mockRejectedValueOnce ( new Error ( 'create failed' ) )
388+
389+ await ( wrapper . vm as any ) . onSubmit ( )
390+ await flushPromises ( )
391+
392+ expect ( sessionStore . createSession ) . toHaveBeenCalledWith (
393+ expect . objectContaining ( {
394+ message : 'hello deepchat' ,
395+ files : [ file ]
396+ } )
397+ )
398+ expect ( ( wrapper . vm as any ) . message ) . toBe ( 'hello deepchat' )
399+ expect ( ( wrapper . vm as any ) . attachedFiles ) . toEqual ( [ file ] )
400+ } finally {
401+ consoleErrorSpy . mockRestore ( )
402+ }
403+ } )
404+
346405 it ( 'awaits full model initialization before creating a deepchat session' , async ( ) => {
347406 const { wrapper, sessionStore, agentStore, modelStore, draftStore } = await setup ( {
348407 modelStoreInitialized : false
0 commit comments