diff --git a/src/Middleware/ResponseHeaderMiddleware.php b/src/Middleware/ResponseHeaderMiddleware.php index 9872192..3f3d6ca 100644 --- a/src/Middleware/ResponseHeaderMiddleware.php +++ b/src/Middleware/ResponseHeaderMiddleware.php @@ -45,8 +45,11 @@ public function addHeaders(ResponseInterface $response, string $route): Response if (! array_key_exists('value', $data)) { continue; } - $overwrite = isset($data['overwrite']) && $data['overwrite'] === true; - if ($overwrite) { + $addHeader = true; + if ($response->hasHeader($header)) { + $addHeader = isset($data['overwrite']) && $data['overwrite'] === true; + } + if ($addHeader === true) { $response = $response->withHeader($header, $data['value']); } } diff --git a/test/Middleware/ResponseHeaderMiddlewareTest.php b/test/Middleware/ResponseHeaderMiddlewareTest.php index e3839a8..91eddb9 100644 --- a/test/Middleware/ResponseHeaderMiddlewareTest.php +++ b/test/Middleware/ResponseHeaderMiddlewareTest.php @@ -5,6 +5,7 @@ namespace DotTest\ResponseHeader; use Dot\ResponseHeader\Middleware\ResponseHeaderMiddleware; +use Laminas\Diactoros\Response; use PHPUnit\Framework\MockObject\Exception; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -47,10 +48,41 @@ public function testProcess() $this->assertIsString($data->getReasonPhrase()); } - public function testAddHeaders() + public function testWillNotAddHeadersWithoutCommonWithoutRouteSpecificHeadersConfigured(): void { - $data = $this->responseHeader->addHeaders($this->responseInterface, ''); + $responseHeader = new ResponseHeaderMiddleware([]); - $this->assertInstanceOf(ResponseInterface::class, $data); + $response = new Response(); + $response = $responseHeader->addHeaders($response, 'test'); + + $this->assertEmpty($response->getHeaders()); + } + + public function testWillAddHeadersWithCommonWithoutRouteSpecificHeadersConfigured(): void + { + $responseHeader = new ResponseHeaderMiddleware([ + '*' => [ + 'CustomHeader1' => [ + 'value' => 'CustomHeader1-Value', + 'overwrite' => true, + ], + 'CustomHeader2' => [ + 'value' => 'CustomHeader2-Value', + 'overwrite' => false, + ], + ], + ]); + + $response = new Response(); + + $response = $responseHeader->addHeaders($response, 'test'); + $this->assertEmpty($response->getHeaders()); + $this->assertFalse($response->hasHeader('CustomHeader1')); + $this->assertFalse($response->hasHeader('CustomHeader2')); + + $response = $responseHeader->addHeaders($response, '*'); + $this->assertCount(2, $response->getHeaders()); + $this->assertTrue($response->hasHeader('CustomHeader1')); + $this->assertTrue($response->hasHeader('CustomHeader2')); } }