Completed
Branch master (4042af)
by Aleksandar
02:14
created

PageControllerTest::testEditMethodShouldReturnHtmlResponse()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 22
nc 1
nop 0
dl 0
loc 25
rs 8.8571
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Test\Page\Controller;
6
7
class PageControllerTest extends \PHPUnit_Framework_TestCase
8
{
9
    public function testIndexMethodShouldReturnHtmlResponse()
10
    {
11
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
12
            ->setMethods(['render'])
13
            ->getMockForAbstractClass();
14
        $template->expects(static::once())
15
            ->method('render')
16
            ->will(static::returnValue('test'));
17
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
18
            ->disableOriginalConstructor()
19
            ->getMock();
20
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
21
            ->getMockForAbstractClass();
22
        $request = new \Zend\Diactoros\ServerRequest();
23
        $request = $request->withAttribute('action', 'index');
24
        $response = new \Zend\Diactoros\Response();
25
        $pageController = new \Page\Controller\PageController(
26
            $template,
27
            $router,
28
            $pageService
29
        );
30
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $pageController($request, $response));
31
    }
32
33
    public function testEditMethodShouldReturnHtmlResponse()
34
    {
35
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
36
            ->setMethods(['render'])
37
            ->getMockForAbstractClass();
38
        $template->expects(static::once())
39
            ->method('render')
40
            ->will(static::returnValue('test'));
41
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
42
            ->disableOriginalConstructor()
43
            ->getMock();
44
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
45
            ->getMockForAbstractClass();
46
        $request = new \Zend\Diactoros\ServerRequest();
47
        $request = $request->withAttribute('action', 'edit');
48
        $request = $request->withAttribute('id', 1);
49
        $request = $request->withParsedBody(['page' => 'test']);
50
        $response = new \Zend\Diactoros\Response();
51
        $pageController = new \Page\Controller\PageController(
52
            $template,
53
            $router,
54
            $pageService
55
        );
56
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $pageController($request, $response));
57
    }
58
59
    public function testSaveMethodShouldCreatePageAndReturnRedirect()
60
    {
61
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
62
            ->getMockForAbstractClass();
63
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
64
            ->disableOriginalConstructor()
65
            ->getMock();
66
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
67
            ->getMockForAbstractClass();
68
        $router->expects(static::at(0))
69
            ->method('generateUri')
70
            ->will(static::returnValue('http://unfinished.dev/admin'));
71
        $request = new \Zend\Diactoros\ServerRequest();
72
        $request = $request->withAttribute('action', 'save');
73
        $request = $request->withParsedBody(['user' => 'test']);
74
        $response = new \Zend\Diactoros\Response();
75
        $pageController = new \Page\Controller\PageController(
76
            $template,
77
            $router,
78
            $pageService
79
        );
80
        $returnedResponse = $pageController($request, $response);
81
        static::assertSame(302, $returnedResponse->getStatusCode());
82
    }
83
84
    public function testSaveMethodShouldUpdateDiscussionAndReturnRedirect()
85
    {
86
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
87
            ->getMockForAbstractClass();
88
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
89
            ->disableOriginalConstructor()
90
            ->getMock();
91
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
92
            ->getMockForAbstractClass();
93
        $router->expects(static::at(0))
94
            ->method('generateUri')
95
            ->will(static::returnValue('http://unfinished.dev/admin'));
96
        $request = new \Zend\Diactoros\ServerRequest();
97
        $request = $request->withAttribute('action', 'save');
98
        $request = $request->withAttribute('id', 2);
99
        $request = $request->withParsedBody(['user' => 'test']);
100
        $response = new \Zend\Diactoros\Response();
101
        $pageController = new \Page\Controller\PageController(
102
            $template,
103
            $router,
104
            $pageService
105
        );
106
        $returnedResponse = $pageController($request, $response);
107
        static::assertSame(302, $returnedResponse->getStatusCode());
108
    }
109
110
    public function testSaveMethodShouldThrowFilterExceptionAndReturnHtmlResponse()
111
    {
112
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
113
            ->getMockForAbstractClass();
114
        $template->expects(static::once())
115
            ->method('render')
116
            ->will(static::returnValue('test'));
117
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
118
            ->disableOriginalConstructor()
119
            ->getMock();
120
        $pageService->expects(static::once())
121
            ->method('updatePage')
122
            ->willThrowException(new \Std\FilterException(['test error']));
123
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
124
            ->getMockForAbstractClass();
125
        $request = new \Zend\Diactoros\ServerRequest();
126
        $request = $request->withAttribute('action', 'save');
127
        $request = $request->withAttribute('id', 2);
128
        $request = $request->withParsedBody(['user' => 'test']);
129
        $response = new \Zend\Diactoros\Response();
130
        $pageController = new \Page\Controller\PageController(
131
            $template,
132
            $router,
133
            $pageService
134
        );
135
        $returnedResponse = $pageController($request, $response);
136
        static::assertSame(200, $returnedResponse->getStatusCode());
137
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $returnedResponse);
138
    }
139
140
    /**
141
     * @expectedException \Exception
142
     * @expectedExceptionMessage test error
143
     */
144
    public function testSaveMethodShouldThrowException()
145
    {
146
        $user = new \stdClass();
147
        $user->admin_user_id = 1;
148
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
149
            [
150
                'user' => true,
151
            ]
152
        );
153
        $sessionManager = new \Zend\Session\SessionManager();
154
        $sessionManager->setStorage($sessionStorage);
155
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
156
            ->getMockForAbstractClass();
157
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
158
            ->disableOriginalConstructor()
159
            ->getMock();
160
        $pageService->expects(static::once())
161
            ->method('updatePage')
162
            ->willThrowException(new \Exception('test error'));
163
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
164
            ->getMockForAbstractClass();
165
        $request = new \Zend\Diactoros\ServerRequest();
166
        $request = $request->withAttribute('action', 'save');
167
        $request = $request->withAttribute('id', 2);
168
        $request = $request->withParsedBody(['user' => 'test']);
169
        $response = new \Zend\Diactoros\Response();
170
        $pageController = new \Page\Controller\PageController(
171
            $template,
172
            $router,
173
            $pageService
174
        );
175
        $pageController($request, $response);
176
    }
177
178
    public function testDeleteMethodShouldSucceedAndReturnRedirect()
179
    {
180
        $user = new \stdClass();
181
        $user->admin_user_id = 1;
182
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
183
            [
184
                'user' => true,
185
            ]
186
        );
187
        $sessionManager = new \Zend\Session\SessionManager();
188
        $sessionManager->setStorage($sessionStorage);
189
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
190
            ->getMockForAbstractClass();
191
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
192
            ->disableOriginalConstructor()
193
            ->getMock();
194
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
195
            ->getMockForAbstractClass();
196
        $router->expects(static::at(0))
197
            ->method('generateUri')
198
            ->will(static::returnValue('http://unfinished.dev/admin'));
199
        $request = new \Zend\Diactoros\ServerRequest();
200
        $request = $request->withAttribute('action', 'delete');
201
        $request = $request->withAttribute('id', 2);
202
        $response = new \Zend\Diactoros\Response();
203
        $pageController = new \Page\Controller\PageController(
204
            $template,
205
            $router,
206
            $pageService
207
        );
208
        $returnedResponse = $pageController($request, $response);
209
        static::assertSame(302, $returnedResponse->getStatusCode());
210
    }
211
212
    public function testDeleteMethodShouldFailAndReturnRedirect()
213
    {
214
        $user = new \stdClass();
215
        $user->admin_user_id = 1;
216
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
217
            [
218
                'user' => true,
219
            ]
220
        );
221
        $sessionManager = new \Zend\Session\SessionManager();
222
        $sessionManager->setStorage($sessionStorage);
223
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
224
            ->getMockForAbstractClass();
225
        $pageService = $this->getMockBuilder(\Page\Service\PageService::class)
226
            ->disableOriginalConstructor()
227
            ->getMock();
228
        $pageService->expects(static::once())
229
            ->method('delete')
230
            ->willThrowException(new \Exception('test error'));
231
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
232
            ->getMockForAbstractClass();
233
        $router->expects(static::at(0))
234
            ->method('generateUri')
235
            ->will(static::returnValue('http://unfinished.dev/admin'));
236
        $request = new \Zend\Diactoros\ServerRequest();
237
        $request = $request->withAttribute('action', 'delete');
238
        $request = $request->withAttribute('id', 2);
239
        $response = new \Zend\Diactoros\Response();
240
        $pageController = new \Page\Controller\PageController(
241
            $template,
242
            $router,
243
            $pageService
244
        );
245
        $returnedResponse = $pageController($request, $response);
246
        static::assertSame(302, $returnedResponse->getStatusCode());
247
    }
248
}
249