|
13 | 13 | use Psr\Http\Server\RequestHandlerInterface; |
14 | 14 | use Psr\Log\LoggerInterface; |
15 | 15 | use RuntimeException; |
16 | | -use Yiisoft\ErrorHandler\Middleware\ErrorCatcher; |
17 | 16 | use Yiisoft\ErrorHandler\ErrorHandler; |
| 17 | +use Yiisoft\ErrorHandler\HeadersProvider; |
| 18 | +use Yiisoft\ErrorHandler\Middleware\ErrorCatcher; |
18 | 19 | use Yiisoft\ErrorHandler\Renderer\HeaderRenderer; |
19 | 20 | use Yiisoft\ErrorHandler\Renderer\PlainTextRenderer; |
20 | 21 | use Yiisoft\ErrorHandler\ThrowableRendererInterface; |
@@ -203,16 +204,50 @@ public function testForceContentTypeSetInvalidType(): void |
203 | 204 | ->forceContentType('image/gif'); |
204 | 205 | } |
205 | 206 |
|
206 | | - private function createErrorHandler(): ErrorHandler |
| 207 | + public function testAddedHeaders(): void |
207 | 208 | { |
208 | | - $logger = $this->createMock(LoggerInterface::class); |
209 | | - return new ErrorHandler($logger, new PlainTextRenderer()); |
| 209 | + $provider = new HeadersProvider([ |
| 210 | + 'X-Default' => 'default', |
| 211 | + 'Content-Type' => 'incorrect', |
| 212 | + ]); |
| 213 | + $provider->add('X-Test', 'test'); |
| 214 | + $provider->add('X-Test2', ['test2', 'test3']); |
| 215 | + $catcher = $this |
| 216 | + ->createErrorCatcher(provider: $provider) |
| 217 | + ->withRenderer('*/*', PlainTextRenderer::class); |
| 218 | + $response = $catcher->process( |
| 219 | + $this->createServerRequest('GET', ['Accept' => ['test/test']]), |
| 220 | + $this->createRequestHandlerWithThrowable(), |
| 221 | + ); |
| 222 | + $headers = $response->getHeaders(); |
| 223 | + |
| 224 | + $this->assertArrayHasKey('Content-Type', $headers); |
| 225 | + $this->assertNotEquals('incorrect', $headers['Content-Type']); |
| 226 | + |
| 227 | + $this->assertArrayHasKey('X-Default', $headers); |
| 228 | + $this->assertEquals(['default'], $headers['X-Default']); |
| 229 | + $this->assertArrayHasKey('X-Test', $headers); |
| 230 | + $this->assertEquals(['test'], $headers['X-Test']); |
| 231 | + $this->assertArrayHasKey('X-Test2', $headers); |
| 232 | + $this->assertEquals(['test2', 'test3'], $headers['X-Test2']); |
210 | 233 | } |
211 | 234 |
|
212 | | - private function createErrorCatcher(): ErrorCatcher |
213 | | - { |
| 235 | + private function createErrorCatcher( |
| 236 | + HeadersProvider $provider = null, |
| 237 | + ): ErrorCatcher { |
214 | 238 | $container = new SimpleContainer([], fn (string $className): object => new $className()); |
215 | | - return new ErrorCatcher(new ResponseFactory(), $this->createErrorHandler(), $container); |
| 239 | + return new ErrorCatcher( |
| 240 | + new ResponseFactory(), |
| 241 | + $this->createErrorHandler(), |
| 242 | + $container, |
| 243 | + $provider ?? new HeadersProvider() |
| 244 | + ); |
| 245 | + } |
| 246 | + |
| 247 | + private function createErrorHandler(): ErrorHandler |
| 248 | + { |
| 249 | + $logger = $this->createMock(LoggerInterface::class); |
| 250 | + return new ErrorHandler($logger, new PlainTextRenderer()); |
216 | 251 | } |
217 | 252 |
|
218 | 253 | private function createServerRequest(string $method, array $headers = []): ServerRequestInterface |
|
0 commit comments