44
55namespace Phpro \AgentRules \Tests \Result ;
66
7- use PHPUnit \Framework \Attributes \CoversClass ;
8- use PHPUnit \Framework \Attributes \Test ;
97use PHPUnit \Framework \TestCase ;
10- use Phpro \AgentRules \Result \CompleteResult ;
8+ use Phpro \AgentRules \Result \ResultInterface ;
119use Phpro \AgentRules \Source \Source ;
1210
13- #[CoversClass(CompleteResult::class)]
14- final class CompleteResultTest extends TestCase
11+ abstract class AbstractResultTestCase extends TestCase
1512{
16- #[Test]
17- public function it_returns_complete_status (): void
18- {
19- $ result = new CompleteResult ('Task completed ' );
20-
21- static ::assertSame ('complete ' , $ result ->getStatus ());
22- }
23-
24- #[Test]
25- public function it_includes_message_in_json_serialization (): void
26- {
27- $ result = new CompleteResult ('Task completed successfully ' );
13+ abstract protected function createResult (): ResultInterface ;
2814
29- $ serialized = $ result ->jsonSerialize ();
30-
31- static ::assertSame ('complete ' , $ serialized ['status ' ]);
32- static ::assertSame ('Task completed successfully ' , $ serialized ['message ' ]);
33- }
15+ abstract protected function expectedStatus (): string ;
3416
35- #[Test]
36- public function it_returns_empty_source_map (): void
17+ public function test_it_returns_empty_source_map (): void
3718 {
38- $ result = new CompleteResult ( ' Task completed ' );
19+ $ result = $ this -> createResult ( );
3920
4021 $ sources = $ result ->sources ()->sources ();
4122
4223 static ::assertCount (0 , $ sources );
4324 }
4425
45- #[Test]
46- public function it_can_add_sources_to_result (): void
26+ public function test_it_can_add_sources_to_result (): void
4727 {
48- $ result = new CompleteResult ( ' Task completed ' );
28+ $ result = $ this -> createResult ( );
4929 $ source = new Source ('Documentation ' , 'https://docs.example.com ' , 'See the docs for more info ' );
5030
5131 $ result ->sources ()->add ($ source );
@@ -57,10 +37,9 @@ public function it_can_add_sources_to_result(): void
5737 static ::assertSame ('See the docs for more info ' , $ sources [0 ]->content );
5838 }
5939
60- #[Test]
61- public function it_includes_sources_in_json_serialization (): void
40+ public function test_it_includes_sources_in_json_serialization (): void
6241 {
63- $ result = new CompleteResult ( ' Task completed ' );
42+ $ result = $ this -> createResult ( );
6443 $ result ->sources ()->add (
6544 new Source ('Docs ' , 'https://docs.example.com ' , 'See docs ' ),
6645 new Source ('Help ' , 'https://help.example.com ' , 'Need help ' )
@@ -76,4 +55,27 @@ public function it_includes_sources_in_json_serialization(): void
7655 static ::assertSame ('See docs ' , $ data ['sources ' ][0 ]['content ' ]);
7756 static ::assertSame ('Help ' , $ data ['sources ' ][1 ]['name ' ]);
7857 }
58+
59+ public function test_it_can_add_multiple_sources_at_once (): void
60+ {
61+ $ result = $ this ->createResult ();
62+
63+ $ returnValue = $ result ->addSources (
64+ new Source ('API ' , 'https://api.example.com ' , 'API docs ' ),
65+ new Source ('Guide ' , 'https://guide.example.com ' , 'User guide ' ),
66+ new Source ('FAQ ' , 'https://faq.example.com ' , 'Frequently asked ' )
67+ );
68+
69+ static ::assertSame ($ result , $ returnValue );
70+ static ::assertCount (3 , $ result ->sources ()->sources ());
71+ }
72+
73+ public function test_it_includes_status_in_json_serialization (): void
74+ {
75+ $ result = $ this ->createResult ();
76+
77+ $ serialized = $ result ->jsonSerialize ();
78+
79+ static ::assertSame ($ this ->expectedStatus (), $ serialized ['status ' ]);
80+ }
7981}
0 commit comments