|
14 | 14 | use Psr\Http\Server\RequestHandlerInterface; |
15 | 15 | use Psr\Log\LoggerInterface; |
16 | 16 | use RuntimeException; |
17 | | -use Yiisoft\ErrorHandler\Middleware\ErrorCatcher; |
18 | 17 | use Yiisoft\ErrorHandler\ErrorHandler; |
| 18 | +use Yiisoft\ErrorHandler\HeadersProvider; |
| 19 | +use Yiisoft\ErrorHandler\Middleware\ErrorCatcher; |
19 | 20 | use Yiisoft\ErrorHandler\Renderer\HeaderRenderer; |
20 | 21 | use Yiisoft\ErrorHandler\Renderer\PlainTextRenderer; |
21 | 22 | use Yiisoft\ErrorHandler\ThrowableRendererInterface; |
@@ -229,16 +230,50 @@ public function testForceContentTypeSetInvalidType(): void |
229 | 230 | ->forceContentType('image/gif'); |
230 | 231 | } |
231 | 232 |
|
232 | | - private function createErrorHandler(): ErrorHandler |
| 233 | + public function testAddedHeaders(): void |
233 | 234 | { |
234 | | - $logger = $this->createMock(LoggerInterface::class); |
235 | | - return new ErrorHandler($logger, new PlainTextRenderer()); |
| 235 | + $provider = new HeadersProvider([ |
| 236 | + 'X-Default' => 'default', |
| 237 | + 'Content-Type' => 'incorrect', |
| 238 | + ]); |
| 239 | + $provider->add('X-Test', 'test'); |
| 240 | + $provider->add('X-Test2', ['test2', 'test3']); |
| 241 | + $catcher = $this |
| 242 | + ->createErrorCatcher(provider: $provider) |
| 243 | + ->withRenderer('*/*', PlainTextRenderer::class); |
| 244 | + $response = $catcher->process( |
| 245 | + $this->createServerRequest('GET', ['Accept' => ['test/test']]), |
| 246 | + $this->createRequestHandlerWithThrowable(), |
| 247 | + ); |
| 248 | + $headers = $response->getHeaders(); |
| 249 | + |
| 250 | + $this->assertArrayHasKey('Content-Type', $headers); |
| 251 | + $this->assertNotEquals('incorrect', $headers['Content-Type']); |
| 252 | + |
| 253 | + $this->assertArrayHasKey('X-Default', $headers); |
| 254 | + $this->assertEquals(['default'], $headers['X-Default']); |
| 255 | + $this->assertArrayHasKey('X-Test', $headers); |
| 256 | + $this->assertEquals(['test'], $headers['X-Test']); |
| 257 | + $this->assertArrayHasKey('X-Test2', $headers); |
| 258 | + $this->assertEquals(['test2', 'test3'], $headers['X-Test2']); |
236 | 259 | } |
237 | 260 |
|
238 | | - private function createErrorCatcher(): ErrorCatcher |
239 | | - { |
| 261 | + private function createErrorCatcher( |
| 262 | + HeadersProvider $provider = null, |
| 263 | + ): ErrorCatcher { |
240 | 264 | $container = new SimpleContainer([], fn (string $className): object => new $className()); |
241 | | - return new ErrorCatcher(new ResponseFactory(), $this->createErrorHandler(), $container); |
| 265 | + return new ErrorCatcher( |
| 266 | + new ResponseFactory(), |
| 267 | + $this->createErrorHandler(), |
| 268 | + $container, |
| 269 | + $provider ?? new HeadersProvider() |
| 270 | + ); |
| 271 | + } |
| 272 | + |
| 273 | + private function createErrorHandler(): ErrorHandler |
| 274 | + { |
| 275 | + $logger = $this->createMock(LoggerInterface::class); |
| 276 | + return new ErrorHandler($logger, new PlainTextRenderer()); |
242 | 277 | } |
243 | 278 |
|
244 | 279 | private function createServerRequest(string $method, array $headers = []): ServerRequestInterface |
|
0 commit comments