Skip to content

Commit d875bb0

Browse files
committed
minor #747 [Agent][Chat] Add more unit tests (OskarStark)
This PR was squashed before being merged into the main branch. Discussion ---------- [Agent][Chat] Add more unit tests | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | Docs? | no | Issues | -- | License | MIT Commits ------- 7da8feb [Agent][Chat] Add more unit tests
2 parents 793470b + 7da8feb commit d875bb0

File tree

5 files changed

+676
-0
lines changed

5 files changed

+676
-0
lines changed

src/agent/tests/InputTest.php

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\AI\Agent\Tests;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\AI\Agent\Input;
16+
use Symfony\AI\Platform\Message\Message;
17+
use Symfony\AI\Platform\Message\MessageBag;
18+
19+
final class InputTest extends TestCase
20+
{
21+
public function testConstructorSetsProperties()
22+
{
23+
$messageBag = new MessageBag();
24+
$options = ['temperature' => 0.7, 'max_tokens' => 100];
25+
26+
$input = new Input('gpt-4', $messageBag, $options);
27+
28+
$this->assertSame('gpt-4', $input->getModel());
29+
$this->assertSame($messageBag, $input->getMessageBag());
30+
$this->assertSame($options, $input->getOptions());
31+
}
32+
33+
public function testConstructorWithDefaultOptions()
34+
{
35+
$messageBag = new MessageBag();
36+
37+
$input = new Input('claude-3', $messageBag);
38+
39+
$this->assertSame('claude-3', $input->getModel());
40+
$this->assertSame($messageBag, $input->getMessageBag());
41+
$this->assertSame([], $input->getOptions());
42+
}
43+
44+
public function testGetModel()
45+
{
46+
$messageBag = new MessageBag();
47+
$input = new Input('test-model', $messageBag);
48+
49+
$this->assertSame('test-model', $input->getModel());
50+
}
51+
52+
public function testSetModel()
53+
{
54+
$messageBag = new MessageBag();
55+
$input = new Input('original-model', $messageBag);
56+
57+
$input->setModel('new-model');
58+
59+
$this->assertSame('new-model', $input->getModel());
60+
}
61+
62+
public function testGetMessageBag()
63+
{
64+
$messageBag = new MessageBag();
65+
$messageBag->add(Message::ofUser('Hello'));
66+
67+
$input = new Input('model', $messageBag);
68+
69+
$result = $input->getMessageBag();
70+
71+
$this->assertSame($messageBag, $result);
72+
$this->assertCount(1, $result);
73+
}
74+
75+
public function testSetMessageBag()
76+
{
77+
$originalMessageBag = new MessageBag();
78+
$input = new Input('model', $originalMessageBag);
79+
80+
$newMessageBag = new MessageBag();
81+
$newMessageBag->add(Message::ofUser('New message'));
82+
83+
$input->setMessageBag($newMessageBag);
84+
85+
$result = $input->getMessageBag();
86+
$this->assertSame($newMessageBag, $result);
87+
$this->assertCount(1, $result);
88+
}
89+
90+
public function testGetOptions()
91+
{
92+
$messageBag = new MessageBag();
93+
$options = ['foo' => 'bar', 'baz' => 42];
94+
95+
$input = new Input('model', $messageBag, $options);
96+
97+
$this->assertSame($options, $input->getOptions());
98+
}
99+
100+
public function testSetOptions()
101+
{
102+
$messageBag = new MessageBag();
103+
$input = new Input('model', $messageBag, ['old' => 'option']);
104+
105+
$newOptions = ['new' => 'options', 'count' => 3];
106+
$input->setOptions($newOptions);
107+
108+
$this->assertSame($newOptions, $input->getOptions());
109+
}
110+
111+
public function testSetOptionsReplacesAllOptions()
112+
{
113+
$messageBag = new MessageBag();
114+
$input = new Input('model', $messageBag, ['a' => 1, 'b' => 2]);
115+
116+
$input->setOptions(['c' => 3]);
117+
118+
$options = $input->getOptions();
119+
$this->assertArrayHasKey('c', $options);
120+
$this->assertArrayNotHasKey('a', $options);
121+
$this->assertArrayNotHasKey('b', $options);
122+
}
123+
}

src/agent/tests/OutputTest.php

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\AI\Agent\Tests;
13+
14+
use PHPUnit\Framework\TestCase;
15+
use Symfony\AI\Agent\Output;
16+
use Symfony\AI\Platform\Message\Message;
17+
use Symfony\AI\Platform\Message\MessageBag;
18+
use Symfony\AI\Platform\Result\TextResult;
19+
20+
final class OutputTest extends TestCase
21+
{
22+
public function testConstructorSetsProperties()
23+
{
24+
$messageBag = new MessageBag();
25+
$result = new TextResult('Test content');
26+
$options = ['temperature' => 0.5];
27+
28+
$output = new Output('gpt-4', $result, $messageBag, $options);
29+
30+
$this->assertSame('gpt-4', $output->getModel());
31+
$this->assertSame($result, $output->getResult());
32+
$this->assertSame($messageBag, $output->getMessageBag());
33+
$this->assertSame($options, $output->getOptions());
34+
}
35+
36+
public function testConstructorWithDefaultOptions()
37+
{
38+
$messageBag = new MessageBag();
39+
$result = new TextResult('Content');
40+
41+
$output = new Output('claude-3', $result, $messageBag);
42+
43+
$this->assertSame('claude-3', $output->getModel());
44+
$this->assertSame($result, $output->getResult());
45+
$this->assertSame($messageBag, $output->getMessageBag());
46+
$this->assertSame([], $output->getOptions());
47+
}
48+
49+
public function testGetModel()
50+
{
51+
$messageBag = new MessageBag();
52+
$result = new TextResult('Test');
53+
54+
$output = new Output('test-model', $result, $messageBag);
55+
56+
$this->assertSame('test-model', $output->getModel());
57+
}
58+
59+
public function testGetResult()
60+
{
61+
$messageBag = new MessageBag();
62+
$result = new TextResult('Expected content');
63+
64+
$output = new Output('model', $result, $messageBag);
65+
66+
$retrievedResult = $output->getResult();
67+
68+
$this->assertSame($result, $retrievedResult);
69+
$this->assertSame('Expected content', $retrievedResult->getContent());
70+
}
71+
72+
public function testSetResult()
73+
{
74+
$messageBag = new MessageBag();
75+
$originalResult = new TextResult('Original');
76+
$output = new Output('model', $originalResult, $messageBag);
77+
78+
$newResult = new TextResult('New content');
79+
$output->setResult($newResult);
80+
81+
$retrievedResult = $output->getResult();
82+
$this->assertSame($newResult, $retrievedResult);
83+
$this->assertSame('New content', $retrievedResult->getContent());
84+
}
85+
86+
public function testGetMessageBag()
87+
{
88+
$messageBag = new MessageBag();
89+
$messageBag->add(Message::ofUser('User message'));
90+
$messageBag->add(Message::ofAssistant('Assistant reply'));
91+
92+
$result = new TextResult('Content');
93+
$output = new Output('model', $result, $messageBag);
94+
95+
$retrievedMessageBag = $output->getMessageBag();
96+
97+
$this->assertSame($messageBag, $retrievedMessageBag);
98+
$this->assertCount(2, $retrievedMessageBag);
99+
}
100+
101+
public function testGetOptions()
102+
{
103+
$messageBag = new MessageBag();
104+
$result = new TextResult('Content');
105+
$options = ['max_tokens' => 500, 'temperature' => 0.8];
106+
107+
$output = new Output('model', $result, $messageBag, $options);
108+
109+
$this->assertSame($options, $output->getOptions());
110+
$this->assertSame(500, $output->getOptions()['max_tokens']);
111+
$this->assertSame(0.8, $output->getOptions()['temperature']);
112+
}
113+
114+
public function testModelIsReadOnly()
115+
{
116+
$messageBag = new MessageBag();
117+
$result = new TextResult('Content');
118+
119+
$output = new Output('original-model', $result, $messageBag);
120+
121+
$this->assertSame('original-model', $output->getModel());
122+
}
123+
124+
public function testMessageBagIsReadOnly()
125+
{
126+
$messageBag = new MessageBag();
127+
$messageBag->add(Message::ofUser('Test'));
128+
129+
$result = new TextResult('Content');
130+
$output = new Output('model', $result, $messageBag);
131+
132+
$retrievedBag = $output->getMessageBag();
133+
$this->assertSame($messageBag, $retrievedBag);
134+
}
135+
136+
public function testOptionsIsReadOnly()
137+
{
138+
$messageBag = new MessageBag();
139+
$result = new TextResult('Content');
140+
$options = ['key' => 'value'];
141+
142+
$output = new Output('model', $result, $messageBag, $options);
143+
144+
$this->assertSame($options, $output->getOptions());
145+
}
146+
}

0 commit comments

Comments
 (0)