Passed
Pull Request — master (#108)
by Alexander
01:46
created

addAddsMiddlewareInterfaceToMiddlewareArrayWithoutThrowingException()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 2
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 4
rs 10
1
<?php
2
3
4
namespace Yiisoft\Yii\Web\Tests;
5
6
use PHPUnit\Framework\TestCase;
7
use Psr\Container\ContainerInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Server\MiddlewareInterface;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Yiisoft\Di\Container;
12
use PHPUnit_Framework_MockObject_MockObject;
13
use Yiisoft\Yii\Web\Emitter\SapiEmitter;
14
use Yiisoft\Yii\Web\MiddlewareDispatcher;
15
16
class MiddlewareDispatcherTest extends TestCase
17
{
18
    /**
19
     * @var MiddlewareDispatcher
20
     */
21
    private $middlewareDispatcher;
22
23
    /**
24
     * @var Container|PHPUnit_Framework_MockObject_MockObject
25
     */
26
    private $containerMock;
27
28
    /**
29
     * @var RequestHandlerInterface|PHPUnit_Framework_MockObject_MockObject
30
     */
31
    private $fallbackHandlerMock;
32
33
    /**
34
     * @var MiddlewareInterface[]|PHPUnit_Framework_MockObject_MockObject[]
35
     */
36
    private $middlewareMocks;
37
38
    public function setUp()
39
    {
40
        parent::setUp();
41
        $this->containerMock = $this->createMock(ContainerInterface::class);
42
        $this->fallbackHandlerMock = $this->createMock(RequestHandlerInterface::class);
43
        $this->middlewareMocks = [
44
            $this->createMock(MiddlewareInterface::class),
45
            $this->createMock(MiddlewareInterface::class)
46
        ];
47
        $this->middlewareDispatcher = new MiddlewareDispatcher($this->middlewareMocks, $this->containerMock, $this->fallbackHandlerMock);
48
    }
49
50
    /**
51
     * @test
52
     */
53
    public function addThrowsInvalidArgumentExceptionWhenMiddlewareIsNotOfCorrectType()
54
    {
55
        $this->expectException(\InvalidArgumentException::class);
56
        $exampleInput = new SapiEmitter();
57
58
        $this->middlewareDispatcher->add($exampleInput);
59
    }
60
61
    /**
62
     * @test
63
     * @doesNotPerformAssertions
64
     */
65
    public function addAddsCallableToMiddlewareArrayWithoutThrowingException()
66
    {
67
        $callable = function () {
68
            echo 'example function for testing purposes';
69
        };
70
        $this->middlewareDispatcher->add($callable);
71
    }
72
73
    /**
74
     * @test
75
     * @doesNotPerformAssertions
76
     */
77
    public function addAddsMiddlewareInterfaceToMiddlewareArrayWithoutThrowingException()
78
    {
79
        $middleware = $this->createMock(MiddlewareInterface::class);
80
        $this->middlewareDispatcher->add($middleware);
81
    }
82
83
    /**
84
     * @test
85
     */
86
    public function handleCallsFallbackHandlerWhenPointerValueEqualsMiddlewareQueueSize()
87
    {
88
        $request = $this->createMock(ServerRequestInterface::class);
89
        $this->middlewareDispatcher->handle($request); //pointer is incremented to 1
90
        $this->middlewareDispatcher->handle($request); //pointer is incremented to 2
91
92
        $this->fallbackHandlerMock
93
            ->expects($this->once())
94
            ->method('handle')
95
            ->with($request);
96
97
        $this->middlewareDispatcher->handle($request); //pointer value equals middleware queue size (2)
98
    }
99
100
    /**
101
     * @test
102
     */
103
    public function handleCallsConsecutiveMiddlewareFromQueueToProcessRequest()
104
    {
105
        $request = $this->createMock(ServerRequestInterface::class);
106
        $this->fallbackHandlerMock
107
            ->expects($this->never())
108
            ->method('handle')
109
            ->with($request);
110
111
        foreach ($this->middlewareMocks as $middlewareMock) {
112
            $middlewareMock
113
                ->expects($this->once())
114
                ->method('process')
115
                ->with($request, $this->middlewareDispatcher);
116
            $this->middlewareDispatcher->handle($request);
117
        }
118
    }
119
}
120