Skip to content

Commit 4e91f53

Browse files
committed
Fix ServerRequestTest extends TestCase
1 parent 5a26423 commit 4e91f53

File tree

2 files changed

+172
-34
lines changed

2 files changed

+172
-34
lines changed

tests/RequestTest.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414

1515
class RequestTest extends TestCase
1616
{
17-
/**
18-
* @const string
19-
*/
20-
private const DEFAULT_REQUEST_TARGET = '/';
21-
2217
/**
2318
* @var Request
2419
*/
@@ -31,7 +26,7 @@ public function setUp(): void
3126

3227
public function testGetDefault(): void
3328
{
34-
self::assertEquals(self::DEFAULT_REQUEST_TARGET, $this->request->getRequestTarget());
29+
self::assertEquals('/', $this->request->getRequestTarget());
3530
self::assertEquals(Request::METHOD_GET, $this->request->getMethod());
3631
self::assertInstanceOf(UriInterface::class, $this->request->getUri());
3732
}
@@ -47,7 +42,7 @@ public function testWithRequestTargetHasNotBeenChangedNotClone(): void
4742
{
4843
$request = $this->request->withRequestTarget(null);
4944
self::assertEquals($this->request, $request);
50-
self::assertEquals(self::DEFAULT_REQUEST_TARGET, $request->getRequestTarget());
45+
self::assertEquals('/', $request->getRequestTarget());
5146
}
5247

5348
/**

tests/ServerRequestTest.php

Lines changed: 170 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,165 @@
66

77
use HttpSoft\Request\ServerRequest;
88
use HttpSoft\UploadedFile\UploadedFile;
9+
use PHPUnit\Framework\TestCase;
910
use InvalidArgumentException;
11+
use Psr\Http\Message\UriInterface;
1012
use StdClass;
1113

1214
use 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

Comments
 (0)