Completed
Push — master ( 5f7cbd...b12d8e )
by Alejandro
03:03
created

ContentBasedErrorHandlerTest::factory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
namespace AcelayaTest\ExpressiveErrorHandler\ErrorHandler;
3
4
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ContentBasedErrorHandler;
5
use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorHandlerManager;
6
use Acelaya\ExpressiveErrorHandler\Log\BasicLogMessageBuilder;
7
use PHPUnit_Framework_TestCase as TestCase;
8
use Psr\Log\NullLogger;
9
use Zend\Diactoros\Response;
10
use Zend\Diactoros\ServerRequestFactory;
11
use Zend\ServiceManager\ServiceManager;
12
13
class ContentBasedErrorHandlerTest extends TestCase
14
{
15
    /**
16
     * @var ContentBasedErrorHandler
17
     */
18
    protected $errorHandler;
19
20
    public function setUp()
21
    {
22
        $this->errorHandler = new ContentBasedErrorHandler(new ErrorHandlerManager(new ServiceManager(), [
23
            'factories' => [
24
                'text/html' => [$this, 'factory'],
25
                'application/json' => [$this, 'factory'],
26
            ],
27
        ]), new NullLogger(), new BasicLogMessageBuilder());
28
    }
29
30
    public function factory($container, $name)
31
    {
32
        return function () use ($name) {
33
            return $name;
34
        };
35
    }
36
37
    /**
38
     * @test
39
     */
40
    public function correctAcceptHeaderValueInvokesErrorHandler()
41
    {
42
        $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,application/json');
43
        $result = $this->errorHandler->__invoke($request, new Response());
44
        $this->assertEquals('application/json', $result);
45
    }
46
47
    /**
48
     * @test
49
     */
50
    public function defaultContentTypeIsUsedWhenNoAcceptHeaderisPresent()
51
    {
52
        $request = ServerRequestFactory::fromGlobals();
53
        $result = $this->errorHandler->__invoke($request, new Response());
54
        $this->assertEquals('text/html', $result);
55
    }
56
57
    /**
58
     * @test
59
     */
60
    public function defaultContentTypeIsUsedWhenAcceptedContentIsNotSupported()
61
    {
62
        $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml');
63
        $result = $this->errorHandler->__invoke($request, new Response());
64
        $this->assertEquals('text/html', $result);
65
    }
66
67
    /**
68
     * @test
69
     * @expectedException \Acelaya\ExpressiveErrorHandler\Exception\InvalidArgumentException
70
     */
71
    public function ifNoErrorHandlerIsFoundAnExceptionIsThrown()
72
    {
73
        $this->errorHandler = new ContentBasedErrorHandler(
74
            new ErrorHandlerManager(new ServiceManager(), []),
75
            new NullLogger(),
76
            new BasicLogMessageBuilder()
77
        );
78
        $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml');
79
        $this->errorHandler->__invoke($request, new Response());
80
    }
81
}
82