Completed
Pull Request — master (#151)
by
unknown
02:00
created

ErrorCatcherTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 53
c 2
b 0
f 0
dl 0
loc 69
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testAddedRenderer() 0 17 1
A testWithoutRenderer() 0 12 1
A testWithoutRenderers() 0 12 1
A testAdvancedAcceptHeader() 0 18 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
    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(): void
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(): void
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
    public function testAdvancedAcceptHeader(): void
67
    {
68
        $factory = new Psr17Factory();
69
        $errorHandler = new ErrorHandler(new Logger(), new MockThrowableRenderer(self::DEFAULT_RENDERER_RESPONSE));
70
        $container = new Container();
71
        $mimeType = 'text/html;version=2';
72
        $containerId = 'testRenderer';
73
        $catcher = (new ErrorCatcher($factory, $errorHandler, $container))
74
            ->withAddedRenderer($mimeType, $containerId);
75
        $expectedRendererOutput = 'expectedRendereOutput';
76
        $container->set($containerId, new MockThrowableRenderer($expectedRendererOutput));
77
        $requestHandler = (new MockRequestHandler())->setHandleExcaption(new \RuntimeException());
78
        $response = $catcher->process(new ServerRequest('GET', '/', ['Accept' => ['text/html', $mimeType]]),
79
            $requestHandler);
80
        $response->getBody()->rewind();
81
        $content = $response->getBody()->getContents();
82
        $this->assertNotSame(self::DEFAULT_RENDERER_RESPONSE, $content);
83
        $this->assertSame($expectedRendererOutput, $content);
84
    }
85
}
86