/
TwigMiddlewareTest.php
121 lines (96 loc) · 4.04 KB
/
TwigMiddlewareTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
/**
* Slim Framework (http://slimframework.com)
*
* @license https://github.com/slimphp/Twig-View/blob/master/LICENSE.md (MIT License)
*/
declare(strict_types=1);
namespace Slim\Tests;
use DI\Container;
use Prophecy\Argument;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\UriInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Slim\Interfaces\RouteParserInterface;
use Slim\Tests\Mocks\MockContainerWithArrayAccess;
use Slim\Views\Twig;
use Slim\Views\TwigExtension;
use Slim\Views\TwigMiddleware;
class TwigMiddlewareTest extends TestCase
{
public function testProcessAppendsTwigExtensionToContainerWithSetMethod()
{
$self = $this;
$basePath = '/base-path';
$uriProphecy = $this->prophesize(UriInterface::class);
$twigProphecy = $this->prophesize(Twig::class);
$twigProphecy
->addExtension(Argument::type('object'))
->will(function ($args) use ($self, $uriProphecy, $basePath) {
/** @var TwigExtension $extension */
$extension = $args[0];
$self->assertEquals($uriProphecy->reveal(), $extension->getUri());
$self->assertEquals($basePath, $extension->getBasePath());
})
->shouldBeCalledOnce();
$routeParserProphecy = $this->prophesize(RouteParserInterface::class);
$container = new Container();
$twigMiddleware = new TwigMiddleware(
$twigProphecy->reveal(),
$container,
$routeParserProphecy->reveal(),
$basePath
);
$responseProphecy = $this->prophesize(ResponseInterface::class);
$requestProphecy = $this->prophesize(ServerRequestInterface::class);
$requestProphecy
->getUri()
->willReturn($uriProphecy->reveal())
->shouldBeCalledOnce();
$requestHandlerProphecy = $this->prophesize(RequestHandlerInterface::class);
$requestHandlerProphecy
->handle($requestProphecy->reveal())
->shouldBeCalledOnce()
->willReturn($responseProphecy->reveal());
$twigMiddleware->process($requestProphecy->reveal(), $requestHandlerProphecy->reveal());
$this->assertSame($twigProphecy->reveal(), $container->get('view'));
}
public function testProcessAppendsTwigExtensionToContainerWithArrayAccess()
{
$self = $this;
$basePath = '/base-path';
$uriProphecy = $this->prophesize(UriInterface::class);
$twigProphecy = $this->prophesize(Twig::class);
$twigProphecy
->addExtension(Argument::type('object'))
->will(function ($args) use ($self, $uriProphecy, $basePath) {
/** @var TwigExtension $extension */
$extension = $args[0];
$self->assertEquals($uriProphecy->reveal(), $extension->getUri());
$self->assertEquals($basePath, $extension->getBasePath());
})
->shouldBeCalledOnce();
$routeParserProphecy = $this->prophesize(RouteParserInterface::class);
$container = new MockContainerWithArrayAccess();
$twigMiddleware = new TwigMiddleware(
$twigProphecy->reveal(),
$container,
$routeParserProphecy->reveal(),
$basePath
);
$responseProphecy = $this->prophesize(ResponseInterface::class);
$requestProphecy = $this->prophesize(ServerRequestInterface::class);
$requestProphecy
->getUri()
->willReturn($uriProphecy->reveal())
->shouldBeCalledOnce();
$requestHandlerProphecy = $this->prophesize(RequestHandlerInterface::class);
$requestHandlerProphecy
->handle($requestProphecy->reveal())
->shouldBeCalledOnce()
->willReturn($responseProphecy->reveal());
$twigMiddleware->process($requestProphecy->reveal(), $requestHandlerProphecy->reveal());
$this->assertSame($twigProphecy->reveal(), $container->get('view'));
}
}