66
77use HttpSoft \Request \ServerRequest ;
88use HttpSoft \UploadedFile \UploadedFile ;
9+ use PHPUnit \Framework \TestCase ;
910use InvalidArgumentException ;
11+ use Psr \Http \Message \UriInterface ;
1012use StdClass ;
1113
1214use const UPLOAD_ERR_OK ;
1315
14- class ServerRequestTest extends RequestTest
16+ class ServerRequestTest extends TestCase
1517{
1618 /**
1719 * @var ServerRequest
1820 */
19- private ServerRequest $ serverRequest ;
21+ private ServerRequest $ request ;
2022
2123 public function setUp (): void
2224 {
23- $ this ->serverRequest = new ServerRequest ();
24- parent ::setUp ();
25+ $ this ->request = new ServerRequest ();
2526 }
2627
2728 public function testGetDefault (): void
2829 {
29- self ::assertEquals ([], $ this ->serverRequest ->getAttributes ());
30- self ::assertEquals ([], $ this ->serverRequest ->getServerParams ());
31- self ::assertEquals ([], $ this ->serverRequest ->getCookieParams ());
32- self ::assertEquals ([], $ this ->serverRequest ->getQueryParams ());
33- self ::assertEquals ([], $ this ->serverRequest ->getUploadedFiles ());
34- self ::assertNull ($ this ->serverRequest ->getParsedBody ());
30+ self ::assertEquals ('/ ' , $ this ->request ->getRequestTarget ());
31+ self ::assertEquals (ServerRequest::METHOD_GET , $ this ->request ->getMethod ());
32+ self ::assertInstanceOf (UriInterface::class, $ this ->request ->getUri ());
33+ self ::assertEquals ([], $ this ->request ->getAttributes ());
34+ self ::assertEquals ([], $ this ->request ->getServerParams ());
35+ self ::assertEquals ([], $ this ->request ->getCookieParams ());
36+ self ::assertEquals ([], $ this ->request ->getQueryParams ());
37+ self ::assertEquals ([], $ this ->request ->getUploadedFiles ());
38+ self ::assertNull ($ this ->request ->getParsedBody ());
39+ }
40+
41+ public function testWithRequestTarget (): void
42+ {
43+ $ request = $ this ->request ->withRequestTarget ('* ' );
44+ self ::assertNotEquals ($ this ->request , $ request );
45+ self ::assertEquals ('* ' , $ request ->getRequestTarget ());
46+ }
47+
48+ public function testWithRequestTargetHasNotBeenChangedNotClone (): void
49+ {
50+ $ request = $ this ->request ->withRequestTarget (null );
51+ self ::assertEquals ($ this ->request , $ request );
52+ self ::assertEquals ('/ ' , $ request ->getRequestTarget ());
53+ }
54+
55+ /**
56+ * @return array
57+ */
58+ public function invalidRequestTargetProvider (): array
59+ {
60+ return [['/ * ' ], ['Request Target ' ], ["Request \nTarget " ], ["Request \tTarget " ], ["Request \rTarget " ]];
61+ }
62+
63+ /**
64+ * @dataProvider invalidRequestTargetProvider
65+ * @param mixed $requestTarget
66+ */
67+ public function testWithRequestTargetThrowExceptionInvalidRequestTarget ($ requestTarget ): void
68+ {
69+ $ this ->expectException (InvalidArgumentException::class);
70+ $ this ->request ->withRequestTarget ($ requestTarget );
71+ }
72+
73+ public function testWithMethod (): void
74+ {
75+ $ request = $ this ->request ->withMethod (ServerRequest::METHOD_POST );
76+ self ::assertNotEquals ($ this ->request , $ request );
77+ self ::assertEquals (ServerRequest::METHOD_POST , $ request ->getMethod ());
78+
79+ $ request = $ this ->request ->withMethod ($ method = 'PoSt ' );
80+ self ::assertNotEquals ($ this ->request , $ request );
81+ self ::assertEquals ($ method , $ request ->getMethod ());
82+ }
83+
84+ public function testWithMethodHasNotBeenChangedNotClone (): void
85+ {
86+ $ request = $ this ->request ->withMethod (ServerRequest::METHOD_GET );
87+ self ::assertEquals ($ this ->request , $ request );
88+ self ::assertEquals (ServerRequest::METHOD_GET , $ request ->getMethod ());
89+ }
90+
91+ /**
92+ * @return array
93+ */
94+ public function invalidMethodProvider (): array
95+ {
96+ return $ this ->getInvalidValues ([['Met\hod ' ], ['Met/hod ' ], ['Met<hod ' ], ['Met>hod ' ]]);
97+ }
98+
99+ /**
100+ * @dataProvider invalidMethodProvider
101+ * @param mixed $method
102+ */
103+ public function testWithMethodThrowExceptionForInvalidMethod ($ method ): void
104+ {
105+ $ this ->expectException (InvalidArgumentException::class);
106+ $ this ->request ->withMethod ($ method );
107+ }
108+
109+ public function testWithUri (): void
110+ {
111+ $ uri = $ this ->createMock (UriInterface::class);
112+ $ request = $ this ->request ->withUri ($ uri );
113+ self ::assertNotEquals ($ this ->request , $ request );
114+ self ::assertEquals ($ uri , $ request ->getUri ());
115+ }
116+
117+ public function testWithUriUpdateHostHeaderFromUri (): void
118+ {
119+ $ request = new ServerRequest ([], [], [], [], [], 'GET ' , 'http://example.com/path/to/action ' );
120+ self ::assertEquals (['Host ' => ['example.com ' ]], $ request ->getHeaders ());
121+ self ::assertEquals (['example.com ' ], $ request ->getHeader ('host ' ));
122+
123+ $ newUri = $ request ->getUri ()->withHost ('example.org ' );
124+
125+ $ newRequest = $ request ->withUri ($ newUri );
126+ self ::assertEquals (['Host ' => ['example.org ' ]], $ newRequest ->getHeaders ());
127+ self ::assertEquals (['example.org ' ], $ newRequest ->getHeader ('host ' ));
128+
129+ $ newRequestWithUriPort = $ request ->withUri ($ newUri ->withPort (8080 ));
130+ self ::assertEquals (['Host ' => ['example.org:8080 ' ]], $ newRequestWithUriPort ->getHeaders ());
131+ self ::assertEquals (['example.org:8080 ' ], $ newRequestWithUriPort ->getHeader ('host ' ));
132+
133+ $ newRequestWithUriStandardPort = $ request ->withUri ($ newUri ->withPort (80 ));
134+ self ::assertEquals (['Host ' => ['example.org ' ]], $ newRequestWithUriStandardPort ->getHeaders ());
135+ self ::assertEquals (['example.org ' ], $ newRequestWithUriStandardPort ->getHeader ('host ' ));
136+ }
137+
138+ /**
139+ * @return array
140+ */
141+ public function invalidUriProvider (): array
142+ {
143+ return $ this ->getInvalidValues ();
144+ }
145+
146+ /**
147+ * @dataProvider invalidUriProvider
148+ * @param mixed $uri
149+ */
150+ public function testUriPassingInConstructorThrowExceptionInvalidUri ($ uri ): void
151+ {
152+ $ this ->expectException (InvalidArgumentException::class);
153+ new ServerRequest ([], [], [], [], [], ServerRequest::METHOD_GET , $ uri );
35154 }
36155
37156 public function testWithAttributeAndGetAttributes (): void
38157 {
39- $ request = $ this ->serverRequest ->withAttribute ('name ' , 'value ' );
40- self ::assertNotEquals ($ this ->serverRequest , $ request );
158+ $ request = $ this ->request ->withAttribute ('name ' , 'value ' );
159+ self ::assertNotEquals ($ this ->request , $ request );
41160 self ::assertEquals ('value ' , $ request ->getAttribute ('name ' ));
42161 self ::assertEquals (['name ' => 'value ' ], $ request ->getAttributes ());
43162 }
44163
45164 public function testWithoutAttributeAndGetAttributes (): void
46165 {
47- $ firstRequest = $ this ->serverRequest ->withAttribute ('name ' , 'value ' );
48- self ::assertNotEquals ($ this ->serverRequest , $ firstRequest );
166+ $ firstRequest = $ this ->request ->withAttribute ('name ' , 'value ' );
167+ self ::assertNotEquals ($ this ->request , $ firstRequest );
49168 self ::assertEquals ('value ' , $ firstRequest ->getAttribute ('name ' ));
50169 $ secondRequest = $ firstRequest ->withoutAttribute ('name ' );
51170 self ::assertNotEquals ($ firstRequest , $ secondRequest );
@@ -55,18 +174,18 @@ public function testWithoutAttributeAndGetAttributes(): void
55174
56175 public function testGetAttributePassedDefaultValue (): void
57176 {
58- self ::assertNull ($ this ->serverRequest ->getAttribute ('name ' ));
59- self ::assertEquals ([], $ this ->serverRequest ->getAttribute ('name ' , []));
60- self ::assertEquals (123 , $ this ->serverRequest ->getAttribute ('name ' , 123 ));
177+ self ::assertNull ($ this ->request ->getAttribute ('name ' ));
178+ self ::assertEquals ([], $ this ->request ->getAttribute ('name ' , []));
179+ self ::assertEquals (123 , $ this ->request ->getAttribute ('name ' , 123 ));
61180 }
62181
63182 public function testWithCookieParams (): void
64183 {
65184 $ cookieParams = [
66185 'cookie_name ' => 'adf8ck8eb43218g8fa5f8259b6425371 ' ,
67186 ];
68- $ request = $ this ->serverRequest ->withCookieParams ($ cookieParams );
69- self ::assertNotEquals ($ this ->serverRequest , $ request );
187+ $ request = $ this ->request ->withCookieParams ($ cookieParams );
188+ self ::assertNotEquals ($ this ->request , $ request );
70189 self ::assertEquals ($ cookieParams , $ request ->getCookieParams ());
71190 }
72191
@@ -76,8 +195,8 @@ public function testWithQueryParams(): void
76195 'key1 ' => 'value1 ' ,
77196 'key2 ' => 'value2 ' ,
78197 ];
79- $ request = $ this ->serverRequest ->withQueryParams ($ queryParams );
80- self ::assertNotEquals ($ this ->serverRequest , $ request );
198+ $ request = $ this ->request ->withQueryParams ($ queryParams );
199+ self ::assertNotEquals ($ this ->request , $ request );
81200 self ::assertEquals ($ queryParams , $ request ->getQueryParams ());
82201 }
83202
@@ -99,8 +218,8 @@ public function validParsedBodyProvider(): array
99218 */
100219 public function testWithParsedBodyPassedValidParsedBody ($ parsedBody ): void
101220 {
102- $ request = $ this ->serverRequest ->withParsedBody ($ parsedBody );
103- self ::assertNotEquals ($ this ->serverRequest , $ request );
221+ $ request = $ this ->request ->withParsedBody ($ parsedBody );
222+ self ::assertNotEquals ($ this ->request , $ request );
104223 self ::assertEquals ($ parsedBody , $ request ->getParsedBody ());
105224 }
106225
@@ -125,7 +244,7 @@ public function invalidParsedBodyProvider(): array
125244 public function testWithParsedBodyThrowExceptionForInvalidParsedBody ($ parsedBody ): void
126245 {
127246 $ this ->expectException (InvalidArgumentException::class);
128- $ this ->serverRequest ->withParsedBody ($ parsedBody );
247+ $ this ->request ->withParsedBody ($ parsedBody );
129248 }
130249
131250 public function testWithUploadedFiles (): void
@@ -135,8 +254,8 @@ public function testWithUploadedFiles(): void
135254 new UploadedFile ('image.png ' , 67890 , UPLOAD_ERR_OK ),
136255 ];
137256
138- $ request = $ this ->serverRequest ->withUploadedFiles ($ uploadedFiles );
139- self ::assertNotEquals ($ this ->serverRequest , $ request );
257+ $ request = $ this ->request ->withUploadedFiles ($ uploadedFiles );
258+ self ::assertNotEquals ($ this ->request , $ request );
140259 self ::assertEquals ($ uploadedFiles , $ request ->getUploadedFiles ());
141260 }
142261
@@ -164,6 +283,30 @@ public function invalidUploadedFilesProvider(): array
164283 public function testWithUploadedFilesThrowExceptionForInvalidUploadedFiles ($ uploadedFiles ): void
165284 {
166285 $ this ->expectException (InvalidArgumentException::class);
167- $ this ->serverRequest ->withUploadedFiles ($ uploadedFiles );
286+ $ this ->request ->withUploadedFiles ($ uploadedFiles );
287+ }
288+
289+ /**
290+ * @param array $values
291+ * @return array
292+ */
293+ private function getInvalidValues (array $ values = []): array
294+ {
295+ $ common = [
296+ 'null ' => [null ],
297+ 'true ' => [true ],
298+ 'false ' => [false ],
299+ 'int ' => [1 ],
300+ 'float ' => [1.1 ],
301+ 'empty-array ' => [[]],
302+ 'object ' => [new StdClass ()],
303+ 'callable ' => [fn () => null ],
304+ ];
305+
306+ if ($ values ) {
307+ return array_merge ($ common , $ values );
308+ }
309+
310+ return $ common ;
168311 }
169312}
0 commit comments