diff --git a/src/Header/HeaderLine.php b/src/Header/HeaderLine.php index 5a876c1..f9afc69 100644 --- a/src/Header/HeaderLine.php +++ b/src/Header/HeaderLine.php @@ -10,6 +10,7 @@ class HeaderLine { protected $values; public function __construct(string $name, string...$values) { + $name = str_replace("_", "-", $name); $this->originalNameCase = $name; $this->name = strtolower($name); $this->values = $values; diff --git a/src/RequestFactory.php b/src/RequestFactory.php index 6219a10..2d658b6 100644 --- a/src/RequestFactory.php +++ b/src/RequestFactory.php @@ -49,7 +49,7 @@ public function createServerRequestFromGlobalState( * @param array $get * @param array $post */ - private function buildRequest( + public function buildRequest( string $method, UriInterface $uri, RequestHeaders $headers, @@ -85,7 +85,7 @@ private function buildRequest( /** * @param array $server */ - protected function buildRequestHeaders(array $server):RequestHeaders { + public function buildRequestHeaders(array $server):RequestHeaders { $headers = new RequestHeaders(); foreach($server as $key => $value) { if(str_starts_with($key, "HTTP_")) { @@ -99,7 +99,7 @@ protected function buildRequestHeaders(array $server):RequestHeaders { /** * @param array $server */ - protected function buildUri(array $server):UriInterface { + public function buildUri(array $server):UriInterface { $uri = new Uri($server["REQUEST_URI"] ?? null); if($server["HTTPS"] ?? null) { diff --git a/test/phpunit/Header/HeadersTest.php b/test/phpunit/Header/HeadersTest.php index 9989705..cb11d29 100644 --- a/test/phpunit/Header/HeadersTest.php +++ b/test/phpunit/Header/HeadersTest.php @@ -37,6 +37,7 @@ public function testContains() { $headers = new Headers(self::HEADER_ARRAY); self::assertTrue($headers->contains("Etag")); self::assertFalse($headers->contains("Ftag")); + self::assertTrue($headers->contains("content-type")); } public function testAdd() { @@ -94,8 +95,8 @@ public function testGetNotExist() { public function testGet() { $headers = new Headers(self::HEADER_ARRAY); - $h = $headers->get("Date"); - self::assertEquals(self::HEADER_ARRAY["Date"], $h); + self::assertEquals(self::HEADER_ARRAY["Date"], $headers->get("date")); + self::assertEquals(self::HEADER_ARRAY["Content-Type"], $headers->get("content-type")); } public function testGetMultiple() { @@ -164,4 +165,4 @@ public function testCaseInsensitive() { self::assertTrue($headers->contains("ConTent-Type")); } -} \ No newline at end of file +} diff --git a/test/phpunit/MessageTest.php b/test/phpunit/MessageTest.php index 8f44f4e..699d61d 100644 --- a/test/phpunit/MessageTest.php +++ b/test/phpunit/MessageTest.php @@ -1,6 +1,7 @@ expects(self::once()) + ->method("getValuesCommaSeparated") + ->willReturn($headerValue); + + $uri = self::createMock(Uri::class); + $headers = self::createMock(RequestHeaders::class); + $headers->expects(self::once()) + ->method("get") + ->with($headerName) + ->willReturn($headerLine); + + $sut = new Request("GET", $uri, $headers); + self::assertSame($headerValue, $sut->getHeaderLine($headerName)); + } + public static function data_request():array { $data = []; diff --git a/test/phpunit/RequestFactoryTest.php b/test/phpunit/RequestFactoryTest.php index 31227be..7ecb132 100644 --- a/test/phpunit/RequestFactoryTest.php +++ b/test/phpunit/RequestFactoryTest.php @@ -100,4 +100,21 @@ public function testCreateServerRequestFromGlobals_headers():void { ], [], [], []); self::assertEquals("1.1", $request->getProtocolVersion()); } + + public function testBuildRequestHeaders_hyphenated():void { + $server = [ + "HTTP_ACCEPT" => "application/json", + "HTTP_ACCEPT_LANGUAGE" => "en-GB", + "HTTP_X_KEY" => "abc123", + ]; + + $sut = new RequestFactory(); + $requestHeaders = $sut->buildRequestHeaders($server); + + foreach($server as $key => $value) { + $keyWithoutHttp = substr($key, strlen("HTTP_")); + $keyHyphenated = str_replace("_", "-", $keyWithoutHttp); + self::assertEquals($value, $requestHeaders->get($keyHyphenated)); + } + } }