77use Laminas \Diactoros \ServerRequestFactory ;
88use Psr \Http \Message \ServerRequestInterface as PsrRequest ;
99use Tempest \Container \Container ;
10+ use Tempest \Http \ContentType ;
1011use Tempest \Http \GenericRequest ;
1112use Tempest \Http \Mappers \RequestToPsrRequestMapper ;
1213use Tempest \Http \Method ;
2021
2122final class HttpRouterTester
2223{
24+ private(set) ?ContentType $ contentType = null ;
25+
2326 public function __construct (
2427 private Container $ container ,
2528 ) {}
2629
30+ /**
31+ * Specifies the "Accept" header for subsequent requests.
32+ */
33+ public function as (ContentType $ contentType ): self
34+ {
35+ $ this ->contentType = $ contentType ;
36+
37+ return $ this ;
38+ }
39+
2740 public function get (string $ uri , array $ query = [], array $ headers = []): TestResponseHelper
2841 {
29- return $ this ->sendRequest (
30- new GenericRequest (
31- method: Method::GET ,
32- uri: Uri \merge_query ($ uri , ...$ query ),
33- body: [],
34- headers: $ headers ,
35- ),
36- );
42+ return $ this ->sendRequest (new GenericRequest (
43+ method: Method::GET ,
44+ uri: Uri \merge_query ($ uri , ...$ query ),
45+ body: [],
46+ headers: $ this ->createHeaders ($ headers ),
47+ ));
3748 }
3849
3950 public function head (string $ uri , array $ query = [], array $ headers = []): TestResponseHelper
@@ -43,93 +54,79 @@ public function head(string $uri, array $query = [], array $headers = []): TestR
4354 method: Method::HEAD ,
4455 uri: Uri \merge_query ($ uri , ...$ query ),
4556 body: [],
46- headers: $ headers ,
57+ headers: $ this -> createHeaders ( $ headers) ,
4758 ),
4859 );
4960 }
5061
5162 public function post (string $ uri , array $ body = [], array $ query = [], array $ headers = []): TestResponseHelper
5263 {
53- return $ this ->sendRequest (
54- new GenericRequest (
55- method: Method::POST ,
56- uri: Uri \merge_query ($ uri , ...$ query ),
57- body: $ body ,
58- headers: $ headers ,
59- ),
60- );
64+ return $ this ->sendRequest (new GenericRequest (
65+ method: Method::POST ,
66+ uri: Uri \merge_query ($ uri , ...$ query ),
67+ body: $ body ,
68+ headers: $ this ->createHeaders ($ headers ),
69+ ));
6170 }
6271
6372 public function put (string $ uri , array $ body = [], array $ query = [], array $ headers = []): TestResponseHelper
6473 {
65- return $ this ->sendRequest (
66- new GenericRequest (
67- method: Method::PUT ,
68- uri: Uri \merge_query ($ uri , ...$ query ),
69- body: $ body ,
70- headers: $ headers ,
71- ),
72- );
74+ return $ this ->sendRequest (new GenericRequest (
75+ method: Method::PUT ,
76+ uri: Uri \merge_query ($ uri , ...$ query ),
77+ body: $ body ,
78+ headers: $ this ->createHeaders ($ headers ),
79+ ));
7380 }
7481
7582 public function delete (string $ uri , array $ body = [], array $ query = [], array $ headers = []): TestResponseHelper
7683 {
77- return $ this ->sendRequest (
78- new GenericRequest (
79- method: Method::DELETE ,
80- uri: Uri \merge_query ($ uri , ...$ query ),
81- body: $ body ,
82- headers: $ headers ,
83- ),
84- );
84+ return $ this ->sendRequest (new GenericRequest (
85+ method: Method::DELETE ,
86+ uri: Uri \merge_query ($ uri , ...$ query ),
87+ body: $ body ,
88+ headers: $ this ->createHeaders ($ headers ),
89+ ));
8590 }
8691
8792 public function connect (string $ uri , array $ query = [], array $ headers = []): TestResponseHelper
8893 {
89- return $ this ->sendRequest (
90- new GenericRequest (
91- method: Method::CONNECT ,
92- uri: Uri \merge_query ($ uri , ...$ query ),
93- body: [],
94- headers: $ headers ,
95- ),
96- );
94+ return $ this ->sendRequest (new GenericRequest (
95+ method: Method::CONNECT ,
96+ uri: Uri \merge_query ($ uri , ...$ query ),
97+ body: [],
98+ headers: $ this ->createHeaders ($ headers ),
99+ ));
97100 }
98101
99102 public function options (string $ uri , array $ query = [], array $ headers = []): TestResponseHelper
100103 {
101- return $ this ->sendRequest (
102- new GenericRequest (
103- method: Method::OPTIONS ,
104- uri: Uri \merge_query ($ uri , ...$ query ),
105- body: [],
106- headers: $ headers ,
107- ),
108- );
104+ return $ this ->sendRequest (new GenericRequest (
105+ method: Method::OPTIONS ,
106+ uri: Uri \merge_query ($ uri , ...$ query ),
107+ body: [],
108+ headers: $ this ->createHeaders ($ headers ),
109+ ));
109110 }
110111
111112 public function trace (string $ uri , array $ query = [], array $ headers = []): TestResponseHelper
112113 {
113- return $ this ->sendRequest (
114- new GenericRequest (
115- method: Method::TRACE ,
116- uri: Uri \merge_query ($ uri , ...$ query ),
117- body: [],
118- headers: $ headers ,
119- ),
120- );
114+ return $ this ->sendRequest (new GenericRequest (
115+ method: Method::TRACE ,
116+ uri: Uri \merge_query ($ uri , ...$ query ),
117+ body: [],
118+ headers: $ this ->createHeaders ($ headers ),
119+ ));
121120 }
122121
123122 public function patch (string $ uri , array $ body = [], array $ query = [], array $ headers = []): TestResponseHelper
124123 {
125- return $ this ->sendRequest (
126- new GenericRequest (
127- method: Method::PATCH ,
128- uri: Uri \merge_query ($ uri , ...$ query ),
129- body: $ body ,
130- headers: $ headers ,
131- ),
132- );
124+ return $ this ->sendRequest (new GenericRequest (
125+ method: Method::PATCH ,
126+ uri: Uri \merge_query ($ uri , ...$ query ),
127+ body: $ body ,
128+ headers: $ this ->createHeaders ($ headers ),
129+ ));
133130 }
134131
135132 public function sendRequest (Request $ request ): TestResponseHelper
@@ -178,4 +175,18 @@ public function makePsrRequest(
178175
179176 return ServerRequestFactory::fromGlobals ()->withUploadedFiles ($ files );
180177 }
178+
179+ private function createHeaders (array $ headers = []): array
180+ {
181+ $ key = array_find_key (
182+ array: $ headers ,
183+ callback: fn (mixed $ _ , string $ headerKey ): bool => strcasecmp ($ headerKey , 'accept ' ) === 0 ,
184+ );
185+
186+ if ($ this ->contentType ) {
187+ $ headers [$ key ?? 'accept ' ] = $ this ->contentType ->value ;
188+ }
189+
190+ return $ headers ;
191+ }
181192}
0 commit comments