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

VideoControllerTest::testEditMethodShouldReturnHtmlResponseAndUpdateObjectWithRequestData()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 34
nc 1
nop 0
dl 0
loc 37
rs 8.8571
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Test\Article\Controller;
6
7
class VideoControllerTest 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
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
18
            ->disableOriginalConstructor()
19
            ->getMock();
20
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
21
            ->disableOriginalConstructor()
22
            ->getMock();
23
        $sessionManager = $this->getMockBuilder(\Zend\Session\SessionManager::class)
24
            ->disableOriginalConstructor()
25
            ->getMock();
26
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
27
            ->getMockForAbstractClass();
28
        $request = new \Zend\Diactoros\ServerRequest();
29
        $request = $request->withAttribute('action', 'index');
30
        $response = new \Zend\Diactoros\Response();
31
        $videoController = new \Article\Controller\VideoController(
32
            $template,
33
            $router,
34
            $videoService,
35
            $sessionManager,
36
            $categoryService
37
        );
38
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $videoController($request, $response));
39
    }
40
41
    public function testEditMethodShouldReturnHtmlResponse()
42
    {
43
        $user = new \stdClass();
44
        $user->admin_user_id = 1;
45
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage();
46
        $sessionStorage->user = $user;
47
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
48
            ->setMethods(['render'])
49
            ->getMockForAbstractClass();
50
        $template->expects(static::once())
51
            ->method('render')
52
            ->will(static::returnValue('test'));
53
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
54
            ->disableOriginalConstructor()
55
            ->getMock();
56
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
57
            ->disableOriginalConstructor()
58
            ->getMock();
59
        $sessionManager = $this->getMockBuilder(\Zend\Session\SessionManager::class)
60
            ->disableOriginalConstructor()
61
            ->getMock();
62
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
63
            ->getMockForAbstractClass();
64
        $request = new \Zend\Diactoros\ServerRequest();
65
        $request = $request->withAttribute('action', 'edit');
66
        $request = $request->withAttribute('id', 1);
67
        $response = new \Zend\Diactoros\Response();
68
        $videoController = new \Article\Controller\VideoController(
69
            $template,
70
            $router,
71
            $videoService,
72
            $sessionManager,
73
            $categoryService
74
        );
75
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $videoController($request, $response));
76
    }
77
78
    public function testEditMethodShouldReturnHtmlResponseAndUpdateObjectWithRequestData()
79
    {
80
        $user = new \stdClass();
81
        $user->admin_user_id = 1;
82
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage();
83
        $sessionStorage->user = $user;
84
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
85
            ->setMethods(['render'])
86
            ->getMockForAbstractClass();
87
        $template->expects(static::once())
88
            ->method('render')
89
            ->will(static::returnValue('test'));
90
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
91
            ->disableOriginalConstructor()
92
            ->getMock();
93
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
94
            ->disableOriginalConstructor()
95
            ->getMock();
96
        $sessionManager = $this->getMockBuilder(\Zend\Session\SessionManager::class)
97
            ->disableOriginalConstructor()
98
            ->getMock();
99
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
100
            ->getMockForAbstractClass();
101
        $request = new \Zend\Diactoros\ServerRequest();
102
        $request = $request->withAttribute('action', 'edit');
103
        $request = $request->withAttribute('id', 1);
104
        $request = $request->withParsedBody(['video' => 'test']);
105
        $response = new \Zend\Diactoros\Response();
106
        $videoController = new \Article\Controller\VideoController(
107
            $template,
108
            $router,
109
            $videoService,
110
            $sessionManager,
111
            $categoryService
112
        );
113
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $videoController($request, $response));
114
    }
115
116
    public function testSaveMethodShouldCreateEventAndReturnRedirect()
117
    {
118
        $user = new \stdClass();
119
        $user->admin_user_id = 1;
120
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
121
            [
122
            'user' => true,
123
            ]
124
        );
125
        $sessionManager = new \Zend\Session\SessionManager();
126
        $sessionManager->setStorage($sessionStorage);
127
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
128
            ->getMockForAbstractClass();
129
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
130
            ->disableOriginalConstructor()
131
            ->getMock();
132
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
133
            ->disableOriginalConstructor()
134
            ->getMock();
135
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
136
            ->getMockForAbstractClass();
137
        $router->expects(static::at(0))
138
            ->method('generateUri')
139
            ->will(static::returnValue('http://unfinished.dev/admin'));
140
        $request = new \Zend\Diactoros\ServerRequest();
141
        $request = $request->withAttribute('action', 'save');
142
        $request = $request->withParsedBody(['video' => 'test']);
143
        $response = new \Zend\Diactoros\Response();
144
        $videoController = new \Article\Controller\VideoController(
145
            $template,
146
            $router,
147
            $videoService,
148
            $sessionManager,
149
            $categoryService
150
        );
151
        /**
152
         * @var \Zend\Diactoros\Response
153
         */
154
        $returnedResponse = $videoController($request, $response);
155
        static::assertSame(302, $returnedResponse->getStatusCode());
156
    }
157
158
    public function testSaveMethodShouldUpdateEventAndReturnRedirect()
159
    {
160
        $user = new \stdClass();
161
        $user->admin_user_id = 1;
162
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
163
            [
164
            'user' => true,
165
            ]
166
        );
167
        $sessionManager = new \Zend\Session\SessionManager();
168
        $sessionManager->setStorage($sessionStorage);
169
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
170
            ->getMockForAbstractClass();
171
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
172
            ->disableOriginalConstructor()
173
            ->getMock();
174
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
175
            ->disableOriginalConstructor()
176
            ->getMock();
177
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
178
            ->getMockForAbstractClass();
179
        $router->expects(static::at(0))
180
            ->method('generateUri')
181
            ->will(static::returnValue('http://unfinished.dev/admin'));
182
        $request = new \Zend\Diactoros\ServerRequest();
183
        $request = $request->withAttribute('action', 'save');
184
        $request = $request->withAttribute('id', 2);
185
        $request = $request->withParsedBody(['video' => 'test']);
186
        $response = new \Zend\Diactoros\Response();
187
        $videoController = new \Article\Controller\VideoController(
188
            $template,
189
            $router,
190
            $videoService,
191
            $sessionManager,
192
            $categoryService
193
        );
194
        /**
195
         * @var \Zend\Diactoros\Response
196
         */
197
        $returnedResponse = $videoController($request, $response);
198
        static::assertSame(302, $returnedResponse->getStatusCode());
199
    }
200
201
    public function testSaveMethodShouldThrowFilterExceptionAndReturnHtmlResponse()
202
    {
203
        $user = new \stdClass();
204
        $user->admin_user_id = 1;
205
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
206
            [
207
            'user' => true,
208
            ]
209
        );
210
        $sessionManager = new \Zend\Session\SessionManager();
211
        $sessionManager->setStorage($sessionStorage);
212
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
213
            ->getMockForAbstractClass();
214
        $template->expects(static::once())
215
            ->method('render')
216
            ->will(static::returnValue('test'));
217
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
218
            ->disableOriginalConstructor()
219
            ->getMock();
220
        $videoService->expects(static::once())
221
            ->method('updateArticle')
222
            ->willThrowException(new \Std\FilterException(['test error']));
223
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
224
            ->disableOriginalConstructor()
225
            ->getMock();
226
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
227
            ->getMockForAbstractClass();
228
        $request = new \Zend\Diactoros\ServerRequest();
229
        $request = $request->withAttribute('action', 'save');
230
        $request = $request->withAttribute('id', 2);
231
        $request = $request->withParsedBody(['video' => 'test']);
232
        $response = new \Zend\Diactoros\Response();
233
        $videoController = new \Article\Controller\VideoController(
234
            $template,
235
            $router,
236
            $videoService,
237
            $sessionManager,
238
            $categoryService
239
        );
240
        /**
241
         * @var \Zend\Diactoros\Response
242
         */
243
        $returnedResponse = $videoController($request, $response);
244
        static::assertSame(200, $returnedResponse->getStatusCode());
245
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $returnedResponse);
246
    }
247
248
    /**
249
     * @expectedException \Exception
250
     * @expectedExceptionMessage test error
251
     */
252
    public function testSaveMethodShouldThrowException()
253
    {
254
        $user = new \stdClass();
255
        $user->admin_user_id = 1;
256
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
257
            [
258
            'user' => true,
259
            ]
260
        );
261
        $sessionManager = new \Zend\Session\SessionManager();
262
        $sessionManager->setStorage($sessionStorage);
263
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
264
            ->getMockForAbstractClass();
265
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
266
            ->disableOriginalConstructor()
267
            ->getMock();
268
        $videoService->expects(static::once())
269
            ->method('updateArticle')
270
            ->willThrowException(new \Exception('test error'));
271
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
272
            ->disableOriginalConstructor()
273
            ->getMock();
274
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
275
            ->getMockForAbstractClass();
276
        $request = new \Zend\Diactoros\ServerRequest();
277
        $request = $request->withAttribute('action', 'save');
278
        $request = $request->withAttribute('id', 2);
279
        $request = $request->withParsedBody(['video' => 'test']);
280
        $response = new \Zend\Diactoros\Response();
281
        $videoController = new \Article\Controller\VideoController(
282
            $template,
283
            $router,
284
            $videoService,
285
            $sessionManager,
286
            $categoryService
287
        );
288
        $videoController($request, $response);
289
    }
290
291
    public function testDeleteMethodShouldSucceedAndReturnRedirect()
292
    {
293
        $user = new \stdClass();
294
        $user->admin_user_id = 1;
295
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
296
            [
297
            'user' => true,
298
            ]
299
        );
300
        $sessionManager = new \Zend\Session\SessionManager();
301
        $sessionManager->setStorage($sessionStorage);
302
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
303
            ->getMockForAbstractClass();
304
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
305
            ->disableOriginalConstructor()
306
            ->getMock();
307
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
308
            ->disableOriginalConstructor()
309
            ->getMock();
310
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
311
            ->getMockForAbstractClass();
312
        $router->expects(static::at(0))
313
            ->method('generateUri')
314
            ->will(static::returnValue('http://unfinished.dev/admin'));
315
        $request = new \Zend\Diactoros\ServerRequest();
316
        $request = $request->withAttribute('action', 'delete');
317
        $request = $request->withAttribute('id', 2);
318
        $response = new \Zend\Diactoros\Response();
319
        $videoController = new \Article\Controller\VideoController(
320
            $template,
321
            $router,
322
            $videoService,
323
            $sessionManager,
324
            $categoryService
325
        );
326
        /**
327
         * @var \Zend\Diactoros\Response
328
         */
329
        $returnedResponse = $videoController($request, $response);
330
        static::assertSame(302, $returnedResponse->getStatusCode());
331
    }
332
333
    /**
334
     * @expectedException \Exception
335
     * @expectedExceptionMessage test error
336
     */
337
    public function testDeleteMethodShouldFailAndThrowException()
338
    {
339
        $user = new \stdClass();
340
        $user->admin_user_id = 1;
341
        $sessionStorage = new \Zend\Session\Storage\ArrayStorage(
342
            [
343
            'user' => true,
344
            ]
345
        );
346
        $sessionManager = new \Zend\Session\SessionManager();
347
        $sessionManager->setStorage($sessionStorage);
348
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
349
            ->getMockForAbstractClass();
350
        $videoService = $this->getMockBuilder(\Article\Service\VideoService::class)
351
            ->disableOriginalConstructor()
352
            ->getMock();
353
        $videoService->expects(static::once())
354
            ->method('deleteArticle')
355
            ->willThrowException(new \Exception('test error'));
356
        $categoryService = $this->getMockBuilder(\Category\Service\CategoryService::class)
357
            ->disableOriginalConstructor()
358
            ->getMock();
359
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
360
            ->getMockForAbstractClass();
361
        $request = new \Zend\Diactoros\ServerRequest();
362
        $request = $request->withAttribute('action', 'delete');
363
        $request = $request->withAttribute('id', 2);
364
        $response = new \Zend\Diactoros\Response();
365
        $videoController = new \Article\Controller\VideoController(
366
            $template,
367
            $router,
368
            $videoService,
369
            $sessionManager,
370
            $categoryService
371
        );
372
        $videoController($request, $response);
373
    }
374
}
375