diff --git a/src/Response.php b/src/Response.php index 4c6ee6f0..ca7049ad 100644 --- a/src/Response.php +++ b/src/Response.php @@ -153,8 +153,8 @@ private function assertStatusCodeIsInteger($statusCode): void private function assertStatusCodeRange(int $statusCode): void { - if ($statusCode < 100 || $statusCode >= 600) { - throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); + if ($statusCode < 100 || $statusCode > 999) { + throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 9xx.'); } } } diff --git a/tests/ResponseTest.php b/tests/ResponseTest.php index 9accb4f8..b2dfad03 100644 --- a/tests/ResponseTest.php +++ b/tests/ResponseTest.php @@ -26,11 +26,32 @@ public function testDefaultConstructor(): void self::assertSame('', (string) $r->getBody()); } - public function testCanConstructWithStatusCode(): void + /** + * @dataProvider statusCodeProvider + */ + public function testCanConstructWithStatusCode(int $statusCode, string $reasonPhrase = '') { - $r = new Response(404); - self::assertSame(404, $r->getStatusCode()); - self::assertSame('Not Found', $r->getReasonPhrase()); + $r = new Response($statusCode); + self::assertSame($statusCode, $r->getStatusCode()); + self::assertSame($reasonPhrase, $r->getReasonPhrase()); + } + + /** + * Although some of the status codes below seem invalid a status code can be above + */ + public function statusCodeProvider(): array + { + return [ + [100, 'Continue'], + [200, 'OK'], + [201, 'Created'], + [401, 'Unauthorized'], + [404, 'Not Found'], + [500, 'Internal Server Error'], + [503, 'Service Unavailable'], + [600], + [999], + ]; } public function testConstructorDoesNotReadStreamBody(): void @@ -110,11 +131,14 @@ public function testCanConstructWithProtocolVersion(): void self::assertSame('1000', $r->getProtocolVersion()); } - public function testWithStatusCodeAndNoReason(): void + /** + * @dataProvider statusCodeProvider + */ + public function testWithStatusCodeAndNoReason(int $statusCode, string $reasonPhrase = '') { - $r = (new Response())->withStatus(201); - self::assertSame(201, $r->getStatusCode()); - self::assertSame('Created', $r->getReasonPhrase()); + $r = (new Response())->withStatus($statusCode); + self::assertSame($statusCode, $r->getStatusCode()); + self::assertSame($reasonPhrase, $r->getReasonPhrase()); } public function testWithStatusCodeAndReason(): void @@ -354,7 +378,7 @@ public function nonIntegerStatusCodeProvider(): iterable public function testConstructResponseWithInvalidRangeStatusCode($invalidValues): void { $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Status code must be an integer value between 1xx and 5xx.'); + $this->expectExceptionMessage('Status code must be an integer value between 1xx and 9xx.'); new Response($invalidValues); } @@ -367,14 +391,14 @@ public function testResponseChangeStatusCodeWithWithInvalidRange($invalidValues) { $response = new Response(); $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Status code must be an integer value between 1xx and 5xx.'); + $this->expectExceptionMessage('Status code must be an integer value between 1xx and 9xx.'); $response->withStatus($invalidValues); } public function invalidStatusCodeRangeProvider(): iterable { return [ - [600], + [1], [99], ]; }