Passed
Branch master (e8fd46)
by Alexey
03:15
created

MiddlewarePipelineSpec   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
dl 0
loc 60
rs 10
c 0
b 0
f 0
wmc 4
lcom 0
cbo 4
1
<?php
2
3
namespace spec\Venta\Routing;
4
5
use PhpSpec\ObjectBehavior;
6
use Prophecy\Argument;
7
use Psr\Http\Message\ResponseInterface;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Venta\Contracts\Routing\Delegate;
10
use Venta\Contracts\Routing\Middleware;
11
12
class MiddlewarePipelineSpec extends ObjectBehavior
13
{
14
    function it_adds_middleware_and_processes_pipeline(
15
        ServerRequestInterface $request,
16
        Middleware $middleware,
17
        Delegate $delegate,
18
        ResponseInterface $delegateResponse,
19
        ResponseInterface $middlewareResponse
20
    ) {
21
        $delegate->next($request)->willReturn($delegateResponse);
22
        $middleware->process($request, $delegate)->willReturn($middlewareResponse);
23
        $pipeline = $this->withMiddleware($middleware);
24
        $pipeline->process($request, $delegate)->shouldBe($middlewareResponse);
25
        $this->process($request, $delegate)->shouldBe($delegateResponse);
26
    }
27
28
    function it_is_initializable()
29
    {
30
        $this->shouldHaveType(\Venta\Contracts\Routing\MiddlewarePipeline::class);
31
    }
32
33
    function it_processes_empty_pipeline(
34
        ServerRequestInterface $request,
35
        Delegate $delegate,
36
        ResponseInterface $response
37
    ) {
38
        $delegate->next($request)->willReturn($response);
39
        $this->process($request, $delegate)->shouldBe($response);
40
    }
41
42
    function it_respects_middleware_sequence(
43
        Middleware $m1,
44
        Middleware $m2,
45
        Middleware $m3,
46
        ServerRequestInterface $request,
47
        Delegate $delegate,
48
        ResponseInterface $response,
49
        ResponseInterface $lastResponse
50
    ) {
51
        $m1->process($request, Argument::type(Delegate::class))->will(function ($args) use ($lastResponse, $response) {
52
            $args[1]->next($args[0]);
53
54
            return $lastResponse;
55
        })->shouldBeCalled();
56
        $m2->process($request, Argument::type(Delegate::class))->will(function ($args) {
57
            return $args[1]->next($args[0]);
58
        })->shouldBeCalled();
59
        $m3->process($request, Argument::type(Delegate::class))->will(function ($args) {
60
            return $args[1]->next($args[0]);
61
        })->shouldBeCalled();
62
        $delegate->next($request)->willReturn($response)->shouldBeCalled();
63
64
        $this
65
            ->withMiddleware($m1)
66
            ->withMiddleware($m2)
67
            ->withMiddleware($m3)
68
            ->process($request, $delegate)->shouldBe($lastResponse);
69
    }
70
71
}
72