Completed
Pull Request — master (#150)
by
unknown
02:30
created

ErrorCatcherTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 37
c 1
b 0
f 0
dl 0
loc 50
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testAddedRenderer() 0 17 1
A testWithoutRenderer() 0 12 1
A testWithoutRenderers() 0 12 1
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
18
    private const DEFAULT_RENDERER_RESPONSE = 'default-renderer-test';
19
20
    public function testAddedRenderer(): void
21
    {
22
        $factory = new Psr17Factory();
23
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
24
        $container = new Container();
25
        $mimeType = 'test/test';
26
        $containerId = 'testRenderer';
27
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
28
            ->withAddedRenderer($mimeType, $containerId);
29
        $expectedRendererOutput = 'expectedRendereOutput';
30
        $container->set($containerId, new MockThrowableRenderer($expectedRendererOutput));
31
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
32
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => [$mimeType]]), $requestHandler);
33
        $response->getBody()->rewind();
34
        $content = $response->getBody()->getContents();
35
        $this->assertNotSame(self::DEFAULT_RENDERER_RESPONSE, $content);
36
        $this->assertSame($expectedRendererOutput, $content);
37
    }
38
39
    public function testWithoutRenderers()
40
    {
41
        $factory = new Psr17Factory();
42
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
43
        $container = new Container();
44
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
45
            ->withoutRenderers();
46
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
47
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => ['test/html']]), $requestHandler);
48
        $response->getBody()->rewind();
49
        $content = $response->getBody()->getContents();
50
        $this->assertSame(self::DEFAULT_RENDERER_RESPONSE, $content);
51
    }
52
53
    public function testWithoutRenderer()
54
    {
55
        $factory = new Psr17Factory();
56
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
57
        $container = new Container();
58
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
59
            ->withoutRenderers('text/html');
60
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
61
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => ['test/html']]), $requestHandler);
62
        $response->getBody()->rewind();
63
        $content = $response->getBody()->getContents();
64
        $this->assertSame(self::DEFAULT_RENDERER_RESPONSE, $content);
65
    }
66
67
}
68