@@ -200,33 +200,30 @@ describe('Copilot Chat API Route', () => {
200200 messages : [ ] ,
201201 } )
202202
203- // Verify sim agent was called
204- expect ( global . fetch ) . toHaveBeenCalledWith (
205- 'http://localhost:8000/api/chat-completion-streaming' ,
203+ // Verify sim agent was called and includes prefetchResults
204+ expect ( global . fetch ) . toHaveBeenCalled ( )
205+ const fetchArgs = ( global . fetch as any ) . mock . calls [ 0 ]
206+ expect ( fetchArgs [ 0 ] ) . toBe ( 'http://localhost:8000/api/chat-completion-streaming' )
207+ const payload = JSON . parse ( fetchArgs [ 1 ] . body )
208+ expect ( payload ) . toEqual (
206209 expect . objectContaining ( {
207- method : 'POST' ,
208- headers : {
209- 'Content-Type' : 'application/json' ,
210- 'x-api-key' : 'test-sim-agent-key' ,
211- } ,
212- body : JSON . stringify ( {
213- messages : [
214- {
215- role : 'user' ,
216- content : 'Hello' ,
217- } ,
218- ] ,
219- workflowId : 'workflow-123' ,
220- userId : 'user-123' ,
221- stream : true ,
222- streamToolCalls : true ,
223- mode : 'agent' ,
224- provider : 'openai' ,
225- depth : 0 ,
226- origin : 'http://localhost:3000' ,
227- } ) ,
210+ messages : [
211+ {
212+ role : 'user' ,
213+ content : 'Hello' ,
214+ } ,
215+ ] ,
216+ workflowId : 'workflow-123' ,
217+ userId : 'user-123' ,
218+ stream : true ,
219+ streamToolCalls : true ,
220+ mode : 'agent' ,
221+ provider : 'openai' ,
222+ depth : 0 ,
223+ origin : 'http://localhost:3000' ,
228224 } )
229225 )
226+ expect ( payload . prefetchResults ) . toBeDefined ( )
230227 } )
231228
232229 it ( 'should load existing chat and include conversation history' , async ( ) => {
@@ -270,27 +267,28 @@ describe('Copilot Chat API Route', () => {
270267
271268 expect ( response . status ) . toBe ( 200 )
272269
273- // Verify conversation history was included
274- expect ( global . fetch ) . toHaveBeenCalledWith (
275- 'http://localhost:8000/api/chat-completion-streaming' ,
270+ // Verify conversation history was included and prefetchResults present
271+ const fetchArgs = ( global . fetch as any ) . mock . calls [ 0 ]
272+ expect ( fetchArgs [ 0 ] ) . toBe ( 'http://localhost:8000/api/chat-completion-streaming' )
273+ const payload = JSON . parse ( fetchArgs [ 1 ] . body )
274+ expect ( payload . messages ) . toEqual ( [
275+ { role : 'user' , content : 'Previous message' } ,
276+ { role : 'assistant' , content : 'Previous response' } ,
277+ { role : 'user' , content : 'New message' } ,
278+ ] )
279+ expect ( payload ) . toEqual (
276280 expect . objectContaining ( {
277- body : JSON . stringify ( {
278- messages : [
279- { role : 'user' , content : 'Previous message' } ,
280- { role : 'assistant' , content : 'Previous response' } ,
281- { role : 'user' , content : 'New message' } ,
282- ] ,
283- workflowId : 'workflow-123' ,
284- userId : 'user-123' ,
285- stream : true ,
286- streamToolCalls : true ,
287- mode : 'agent' ,
288- provider : 'openai' ,
289- depth : 0 ,
290- origin : 'http://localhost:3000' ,
291- } ) ,
281+ workflowId : 'workflow-123' ,
282+ userId : 'user-123' ,
283+ stream : true ,
284+ streamToolCalls : true ,
285+ mode : 'agent' ,
286+ provider : 'openai' ,
287+ depth : 0 ,
288+ origin : 'http://localhost:3000' ,
292289 } )
293290 )
291+ expect ( payload . prefetchResults ) . toBeDefined ( )
294292 } )
295293
296294 it ( 'should include implicit feedback in messages' , async ( ) => {
@@ -327,26 +325,27 @@ describe('Copilot Chat API Route', () => {
327325 const { POST } = await import ( '@/app/api/copilot/chat/route' )
328326 await POST ( req )
329327
330- // Verify implicit feedback was included as system message
331- expect ( global . fetch ) . toHaveBeenCalledWith (
332- 'http://localhost:8000/api/chat-completion-streaming' ,
328+ // Verify implicit feedback was included as system message and prefetchResults present
329+ const fetchArgs = ( global . fetch as any ) . mock . calls [ 0 ]
330+ expect ( fetchArgs [ 0 ] ) . toBe ( 'http://localhost:8000/api/chat-completion-streaming' )
331+ const payload = JSON . parse ( fetchArgs [ 1 ] . body )
332+ expect ( payload . messages ) . toEqual ( [
333+ { role : 'system' , content : 'User seems confused about the workflow' } ,
334+ { role : 'user' , content : 'Hello' } ,
335+ ] )
336+ expect ( payload ) . toEqual (
333337 expect . objectContaining ( {
334- body : JSON . stringify ( {
335- messages : [
336- { role : 'system' , content : 'User seems confused about the workflow' } ,
337- { role : 'user' , content : 'Hello' } ,
338- ] ,
339- workflowId : 'workflow-123' ,
340- userId : 'user-123' ,
341- stream : true ,
342- streamToolCalls : true ,
343- mode : 'agent' ,
344- provider : 'openai' ,
345- depth : 0 ,
346- origin : 'http://localhost:3000' ,
347- } ) ,
338+ workflowId : 'workflow-123' ,
339+ userId : 'user-123' ,
340+ stream : true ,
341+ streamToolCalls : true ,
342+ mode : 'agent' ,
343+ provider : 'openai' ,
344+ depth : 0 ,
345+ origin : 'http://localhost:3000' ,
348346 } )
349347 )
348+ expect ( payload . prefetchResults ) . toBeDefined ( )
350349 } )
351350
352351 it ( 'should handle sim agent API errors' , async ( ) => {
@@ -427,22 +426,23 @@ describe('Copilot Chat API Route', () => {
427426 const { POST } = await import ( '@/app/api/copilot/chat/route' )
428427 await POST ( req )
429428
430- expect ( global . fetch ) . toHaveBeenCalledWith (
431- 'http://localhost:8000/api/chat-completion-streaming' ,
429+ const fetchArgs = ( global . fetch as any ) . mock . calls [ 0 ]
430+ expect ( fetchArgs [ 0 ] ) . toBe ( 'http://localhost:8000/api/chat-completion-streaming' )
431+ const payload = JSON . parse ( fetchArgs [ 1 ] . body )
432+ expect ( payload ) . toEqual (
432433 expect . objectContaining ( {
433- body : JSON . stringify ( {
434- messages : [ { role : 'user' , content : 'What is this workflow?' } ] ,
435- workflowId : 'workflow-123' ,
436- userId : 'user-123' ,
437- stream : true ,
438- streamToolCalls : true ,
439- mode : 'ask' ,
440- provider : 'openai' ,
441- depth : 0 ,
442- origin : 'http://localhost:3000' ,
443- } ) ,
434+ messages : [ { role : 'user' , content : 'What is this workflow?' } ] ,
435+ workflowId : 'workflow-123' ,
436+ userId : 'user-123' ,
437+ stream : true ,
438+ streamToolCalls : true ,
439+ mode : 'ask' ,
440+ provider : 'openai' ,
441+ depth : 0 ,
442+ origin : 'http://localhost:3000' ,
444443 } )
445444 )
445+ expect ( payload . prefetchResults ) . toBeDefined ( )
446446 } )
447447 } )
448448
@@ -479,67 +479,19 @@ describe('Copilot Chat API Route', () => {
479479 const authMocks = mockAuth ( )
480480 authMocks . setAuthenticated ( )
481481
482- // Mock database response (what comes from DB)
483- const mockDbChats = [
482+ // Mock returned chats
483+ const chats = [
484484 {
485485 id : 'chat-1' ,
486- title : 'First Chat' ,
486+ title : 'Chat 1 ' ,
487487 model : 'claude-3-haiku-20240307' ,
488- messages : [
489- { role : 'user' , content : 'Message 1' } ,
490- { role : 'assistant' , content : 'Response 1' } ,
491- { role : 'user' , content : 'Message 2' } ,
492- { role : 'assistant' , content : 'Response 2' } ,
493- ] ,
494- createdAt : new Date ( '2024-01-01' ) ,
495- updatedAt : new Date ( '2024-01-02' ) ,
496- } ,
497- {
498- id : 'chat-2' ,
499- title : 'Second Chat' ,
500- model : 'claude-3-haiku-20240307' ,
501- messages : [
502- { role : 'user' , content : 'Message 1' } ,
503- { role : 'assistant' , content : 'Response 1' } ,
504- ] ,
505- createdAt : new Date ( '2024-01-03' ) ,
506- updatedAt : new Date ( '2024-01-04' ) ,
488+ messages : [ { role : 'user' , content : 'Hello' } ] ,
489+ createdAt : new Date ( ) ,
490+ updatedAt : new Date ( ) ,
507491 } ,
508492 ]
509493
510- // Expected transformed response (what the route returns)
511- const expectedChats = [
512- {
513- id : 'chat-1' ,
514- title : 'First Chat' ,
515- model : 'claude-3-haiku-20240307' ,
516- messages : [
517- { role : 'user' , content : 'Message 1' } ,
518- { role : 'assistant' , content : 'Response 1' } ,
519- { role : 'user' , content : 'Message 2' } ,
520- { role : 'assistant' , content : 'Response 2' } ,
521- ] ,
522- messageCount : 4 ,
523- previewYaml : null ,
524- createdAt : new Date ( '2024-01-01' ) ,
525- updatedAt : new Date ( '2024-01-02' ) ,
526- } ,
527- {
528- id : 'chat-2' ,
529- title : 'Second Chat' ,
530- model : 'claude-3-haiku-20240307' ,
531- messages : [
532- { role : 'user' , content : 'Message 1' } ,
533- { role : 'assistant' , content : 'Response 1' } ,
534- ] ,
535- messageCount : 2 ,
536- previewYaml : null ,
537- createdAt : new Date ( '2024-01-03' ) ,
538- updatedAt : new Date ( '2024-01-04' ) ,
539- } ,
540- ]
541-
542- mockOrderBy . mockResolvedValue ( mockDbChats )
494+ mockOrderBy . mockResolvedValue ( chats )
543495
544496 const req = new NextRequest ( 'http://localhost:3000/api/copilot/chat?workflowId=workflow-123' )
545497
@@ -548,52 +500,24 @@ describe('Copilot Chat API Route', () => {
548500
549501 expect ( response . status ) . toBe ( 200 )
550502 const responseData = await response . json ( )
551- expect ( responseData ) . toEqual ( {
552- success : true ,
553- chats : [
554- {
555- id : 'chat-1' ,
556- title : 'First Chat' ,
557- model : 'claude-3-haiku-20240307' ,
558- messages : [
559- { role : 'user' , content : 'Message 1' } ,
560- { role : 'assistant' , content : 'Response 1' } ,
561- { role : 'user' , content : 'Message 2' } ,
562- { role : 'assistant' , content : 'Response 2' } ,
563- ] ,
564- messageCount : 4 ,
565- previewYaml : null ,
566- createdAt : '2024-01-01T00:00:00.000Z' ,
567- updatedAt : '2024-01-02T00:00:00.000Z' ,
568- } ,
569- {
570- id : 'chat-2' ,
571- title : 'Second Chat' ,
572- model : 'claude-3-haiku-20240307' ,
573- messages : [
574- { role : 'user' , content : 'Message 1' } ,
575- { role : 'assistant' , content : 'Response 1' } ,
576- ] ,
577- messageCount : 2 ,
578- previewYaml : null ,
579- createdAt : '2024-01-03T00:00:00.000Z' ,
580- updatedAt : '2024-01-04T00:00:00.000Z' ,
581- } ,
582- ] ,
583- } )
584-
585- // Verify database query was made correctly
586- expect ( mockSelect ) . toHaveBeenCalled ( )
587- expect ( mockWhere ) . toHaveBeenCalled ( )
588- expect ( mockOrderBy ) . toHaveBeenCalled ( )
503+ expect ( responseData . success ) . toBe ( true )
504+ expect ( Array . isArray ( responseData . chats ) ) . toBe ( true )
505+ expect ( responseData . chats . length ) . toBe ( 1 )
506+ expect ( responseData . chats [ 0 ] ) . toEqual (
507+ expect . objectContaining ( {
508+ id : 'chat-1' ,
509+ title : 'Chat 1' ,
510+ model : 'claude-3-haiku-20240307' ,
511+ messageCount : 1 ,
512+ } )
513+ )
589514 } )
590515
591516 it ( 'should handle database errors when fetching chats' , async ( ) => {
592517 const authMocks = mockAuth ( )
593518 authMocks . setAuthenticated ( )
594519
595- // Mock database error
596- mockOrderBy . mockRejectedValue ( new Error ( 'Database query failed' ) )
520+ mockOrderBy . mockRejectedValue ( new Error ( 'Database error' ) )
597521
598522 const req = new NextRequest ( 'http://localhost:3000/api/copilot/chat?workflowId=workflow-123' )
599523
@@ -618,10 +542,9 @@ describe('Copilot Chat API Route', () => {
618542
619543 expect ( response . status ) . toBe ( 200 )
620544 const responseData = await response . json ( )
621- expect ( responseData ) . toEqual ( {
622- success : true ,
623- chats : [ ] ,
624- } )
545+ expect ( responseData . success ) . toBe ( true )
546+ expect ( Array . isArray ( responseData . chats ) ) . toBe ( true )
547+ expect ( responseData . chats . length ) . toBe ( 0 )
625548 } )
626549 } )
627550} )
0 commit comments