Completed
Push — master ( c4d705...5571d6 )
by Filipe
03:31
created

RendererMiddlewareSpec   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 7
dl 0
loc 52
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * This file is part of slick/web_stack package
5
 *
6
 * For the full copyright and license information, please view the LICENSE
7
 * file that was distributed with this source code.
8
 */
9
10
namespace spec\Slick\WebStack\Http\Server;
11
12
use Aura\Router\Route;
13
use Psr\Http\Server\MiddlewareInterface;
14
use Psr\Http\Server\RequestHandlerInterface;
15
use PhpSpec\Exception\Example\FailureException;
16
use Prophecy\Argument;
17
use Psr\Http\Message\ResponseInterface;
18
use Psr\Http\Message\ServerRequestInterface;
19
use Psr\Http\Message\StreamInterface;
20
use Slick\Template\TemplateEngineInterface;
21
use Slick\WebStack\Http\Server\RendererMiddleware;
22
use PhpSpec\ObjectBehavior;
23
use Slick\WebStack\Renderer\ViewInflectorInterface;
24
25
/**
26
 * RendererMiddlewareSpec specs
27
 *
28
 * @package spec\Slick\WebStack\Http\Server
29
 */
30
class RendererMiddlewareSpec extends ObjectBehavior
31
{
32
    private $data = ['foo', 'bar'];
33
34
    function let(
35
        TemplateEngineInterface $templateEngine,
36
        ViewInflectorInterface $viewInflector,
37
        Route $route,
38
        ServerRequestInterface $request,
39
        ResponseInterface $response,
40
        RequestHandlerInterface $handler
41
    )
42
    {
43
        $request->getAttribute('route')->willReturn($route);
44
        $request->getAttribute('viewData', [])->willReturn($this->data);
45
        $handler->handle($request)->willReturn($response);
46
        $this->beConstructedWith($templateEngine, $viewInflector);
47
    }
48
49
    function it_is_initializable()
50
    {
51
        $this->shouldHaveType(RendererMiddleware::class);
52
    }
53
54
    function its_a_server_middleware()
55
    {
56
        $this->shouldBeAnInstanceOf(MiddlewareInterface::class);
57
    }
58
59
    function it_handles_the_request_by_populating_the_response_body(
60
        TemplateEngineInterface $templateEngine,
61
        ViewInflectorInterface $viewInflector,
62
        Route $route,
63
        ResponseInterface $response,
64
        ServerRequestInterface $request,
65
        RequestHandlerInterface $handler
66
    )
67
    {
68
        $template = 'som/twig.twig';
69
        $viewInflector->inflect($route)->shouldBeCalled()->willReturn($template);
70
        $templateEngine->parse($template)
71
            ->shouldBeCalled()
72
            ->willReturn($templateEngine);
73
        $templateEngine->process($this->data)
74
            ->shouldBeCalled()
75
            ->willReturn('test');
76
        $response->withBody(Argument::type(StreamInterface::class))
77
            ->shouldBeCalled()
78
            ->willReturn($response);
79
        $this->process($request, $handler)->shouldBe($response);
80
    }
81
}
82