Completed
Push — master ( 632840...f0c648 )
by Alexander
02:14
created

ErrorCatcherTest::testWithoutRenderers()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 10
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 12
rs 9.9332
1
<?php
2
3
namespace Yiisoft\Yii\Web\Tests\Middleware;
4
5
use Nyholm\Psr7\Factory\Psr17Factory;
6
use Nyholm\Psr7\ServerRequest;
7
use PHPUnit\Framework\TestCase;
8
use Yiisoft\Di\Container;
9
use Yiisoft\Log\Logger;
10
use Yiisoft\Yii\Web\ErrorHandler\ErrorHandler;
11
use Yiisoft\Yii\Web\Middleware\ErrorCatcher;
12
use Yiisoft\Yii\Web\Tests\Middleware\Mock\MockRequestHandler;
13
use Yiisoft\Yii\Web\Tests\Middleware\Mock\MockThrowableRenderer;
14
15
class ErrorCatcherTest extends TestCase
16
{
17
    private const DEFAULT_RENDERER_RESPONSE = 'default-renderer-test';
18
19
    public function testAddedRenderer(): void
20
    {
21
        $factory = new Psr17Factory();
22
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
23
        $container = new Container();
24
        $mimeType = 'test/test';
25
        $containerId = 'testRenderer';
26
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
27
            ->withAddedRenderer($mimeType, $containerId);
28
        $expectedRendererOutput = 'expectedRendereOutput';
29
        $container->set($containerId, new MockThrowableRenderer($expectedRendererOutput));
30
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
31
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => [$mimeType]]), $requestHandler);
32
        $response->getBody()->rewind();
33
        $content = $response->getBody()->getContents();
34
        $this->assertNotSame(self::DEFAULT_RENDERER_RESPONSE, $content);
35
        $this->assertSame($expectedRendererOutput, $content);
36
    }
37
38
    public function testWithoutRenderers()
39
    {
40
        $factory = new Psr17Factory();
41
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
42
        $container = new Container();
43
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
44
            ->withoutRenderers();
45
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
46
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => ['test/html']]), $requestHandler);
47
        $response->getBody()->rewind();
48
        $content = $response->getBody()->getContents();
49
        $this->assertSame(self::DEFAULT_RENDERER_RESPONSE, $content);
50
    }
51
52
    public function testWithoutRenderer()
53
    {
54
        $factory = new Psr17Factory();
55
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
56
        $container = new Container();
57
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
58
            ->withoutRenderers('text/html');
59
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
60
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => ['test/html']]), $requestHandler);
61
        $response->getBody()->rewind();
62
        $content = $response->getBody()->getContents();
63
        $this->assertSame(self::DEFAULT_RENDERER_RESPONSE, $content);
64
    }
65
}
66