1111
1212namespace Symfony \AI \Chat \Tests ;
1313
14- use PHPUnit \Framework \MockObject \MockObject ;
1514use PHPUnit \Framework \TestCase ;
16- use Symfony \AI \Agent \AgentInterface ;
15+ use Symfony \AI \Agent \MockAgent ;
16+ use Symfony \AI \Agent \MockResponse ;
1717use Symfony \AI \Chat \Chat ;
1818use Symfony \AI \Chat \InMemory \Store as InMemoryStore ;
1919use Symfony \AI \Platform \Message \AssistantMessage ;
2020use Symfony \AI \Platform \Message \Message ;
2121use Symfony \AI \Platform \Message \MessageBag ;
22- use Symfony \AI \Platform \Result \TextResult ;
2322
2423final class ChatTest extends TestCase
2524{
26- private AgentInterface & MockObject $ agent ;
25+ private MockAgent $ agent ;
2726 private InMemoryStore $ store ;
2827 private Chat $ chat ;
2928
3029 protected function setUp (): void
3130 {
32- $ this ->agent = $ this -> createMock (AgentInterface::class );
31+ $ this ->agent = new MockAgent ( );
3332 $ this ->store = new InMemoryStore ();
3433 $ this ->chat = new Chat ($ this ->agent , $ this ->store );
3534 }
@@ -41,29 +40,30 @@ public function testItInitiatesChatByClearingAndSavingMessages()
4140 $ this ->chat ->initiate ($ messages );
4241
4342 $ this ->assertCount (0 , $ this ->store ->load ());
43+
44+ $ this ->agent ->assertNotCalled ();
4445 }
4546
4647 public function testItSubmitsUserMessageAndReturnsAssistantMessage ()
4748 {
48- $ userMessage = Message::ofUser ('Hello, how are you? ' );
49+ $ userMessage = Message::ofUser ($ userPrompt = 'Hello, how are you? ' );
4950 $ assistantContent = 'I am doing well, thank you! ' ;
51+ $ assistantSources = ['https://example.com ' ];
5052
51- $ textResult = new TextResult ($ assistantContent );
52-
53- $ this ->agent ->expects ($ this ->once ())
54- ->method ('call ' )
55- ->with ($ this ->callback (static function (MessageBag $ messages ) use ($ userMessage ) {
56- $ messagesArray = $ messages ->getMessages ();
53+ $ response = new MockResponse ($ assistantContent );
54+ $ response ->getMetadata ()->add ('sources ' , $ assistantSources );
5755
58- return end ($ messagesArray ) === $ userMessage ;
59- }))
60- ->willReturn ($ textResult );
56+ $ this ->agent ->addResponse ($ userPrompt , $ response );
6157
6258 $ result = $ this ->chat ->submit ($ userMessage );
6359
6460 $ this ->assertInstanceOf (AssistantMessage::class, $ result );
6561 $ this ->assertSame ($ assistantContent , $ result ->getContent ());
62+ $ this ->assertSame ($ assistantSources , $ result ->getMetadata ()->get ('sources ' , []));
6663 $ this ->assertCount (2 , $ this ->store ->load ());
64+
65+ $ this ->agent ->assertCallCount (1 );
66+ $ this ->agent ->assertCalledWith ($ userPrompt );
6767 }
6868
6969 public function testItAppendsMessagesToExistingConversation ()
@@ -75,42 +75,37 @@ public function testItAppendsMessagesToExistingConversation()
7575 $ existingMessages ->add ($ existingUserMessage );
7676 $ existingMessages ->add ($ existingAssistantMessage );
7777
78- $ newUserMessage = Message::ofUser ('Can you help with programming? ' );
79- $ newAssistantContent = 'Yes, I can help with programming! ' ;
78+ $ this ->store ->save ($ existingMessages );
8079
81- $ textResult = new TextResult ($ newAssistantContent );
80+ $ newUserMessage = Message::ofUser ($ newUserPrompt = 'Can you help with programming? ' );
81+ $ newAssistantContent = 'Yes, I can help with programming! ' ;
8282
83- $ this ->agent ->expects ($ this ->once ())
84- ->method ('call ' )
85- ->willReturn ($ textResult );
83+ $ this ->agent ->addResponse ($ newUserPrompt , $ newAssistantContent );
8684
8785 $ result = $ this ->chat ->submit ($ newUserMessage );
8886
8987 $ this ->assertInstanceOf (AssistantMessage::class, $ result );
9088 $ this ->assertSame ($ newAssistantContent , $ result ->getContent ());
91- $ this ->assertCount (2 , $ this ->store ->load ());
89+ $ this ->assertCount (4 , $ this ->store ->load ());
90+
91+ $ this ->agent ->assertCallCount (1 );
92+ $ this ->agent ->assertCalledWith ($ newUserPrompt );
9293 }
9394
9495 public function testItHandlesEmptyMessageStore ()
9596 {
96- $ userMessage = Message::ofUser ('First message ' );
97+ $ userMessage = Message::ofUser ($ userPrompt = 'First message ' );
9798 $ assistantContent = 'First response ' ;
9899
99- $ textResult = new TextResult ($ assistantContent );
100-
101- $ this ->agent ->expects ($ this ->once ())
102- ->method ('call ' )
103- ->with ($ this ->callback (static function (MessageBag $ messages ) {
104- $ messagesArray = $ messages ->getMessages ();
105-
106- return 1 === \count ($ messagesArray );
107- }))
108- ->willReturn ($ textResult );
100+ $ this ->agent ->addResponse ($ userPrompt , $ assistantContent );
109101
110102 $ result = $ this ->chat ->submit ($ userMessage );
111103
112104 $ this ->assertInstanceOf (AssistantMessage::class, $ result );
113105 $ this ->assertSame ($ assistantContent , $ result ->getContent ());
114106 $ this ->assertCount (2 , $ this ->store ->load ());
107+
108+ $ this ->agent ->assertCallCount (1 );
109+ $ this ->agent ->assertCalledWith ($ userPrompt );
115110 }
116111}
0 commit comments