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

IndexControllerTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 242
Duplicated Lines 32.23 %

Coupling/Cohesion

Components 1
Dependencies 8

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 78
loc 242
rs 10
c 1
b 0
f 0
wmc 9
lcom 1
cbo 8

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Menu\Test\Controller;
6
7
class IndexControllerTest 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
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::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
        $indexController = new \Menu\Controller\IndexController(
26
            $template,
27
            $router,
28
            $menuService
29
        );
30
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $indexController($request, $response));
31
    }
32
33
    public function testEditMethodShouldReturnHtmlResponseAndGetIdFromRequest()
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
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::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(['menu' => 'test']);
50
        $response = new \Zend\Diactoros\Response();
51
        $indexController = new \Menu\Controller\IndexController(
52
            $template,
53
            $router,
54
            $menuService
55
        );
56
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $indexController($request, $response));
57
    }
58
59
    public function testSaveMethodShouldCreateCategoryAndReturnRedirect()
60
    {
61
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
62
            ->getMockForAbstractClass();
63
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::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(['menu' => 'test']);
74
        $response = new \Zend\Diactoros\Response();
75
        $indexController = new \Menu\Controller\IndexController(
76
            $template,
77
            $router,
78
            $menuService
79
        );
80
        $returnedResponse = $indexController($request, $response);
81
        static::assertSame(302, $returnedResponse->getStatusCode());
82
    }
83
84
    public function testSaveMethodShouldUpdateCategoryAndReturnRedirect()
85
    {
86
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
87
            ->getMockForAbstractClass();
88
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::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', 1);
99
        $request = $request->withParsedBody(['menu' => 'test']);
100
        $response = new \Zend\Diactoros\Response();
101
        $indexController = new \Menu\Controller\IndexController(
102
            $template,
103
            $router,
104
            $menuService
105
        );
106
        $returnedResponse = $indexController($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
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::class)
118
            ->disableOriginalConstructor()
119
            ->getMock();
120
        $menuService->expects(static::once())
121
            ->method('updateMenuItem')
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(['menu' => 'test']);
129
        $response = new \Zend\Diactoros\Response();
130
        $indexController = new \Menu\Controller\IndexController(
131
            $template,
132
            $router,
133
            $menuService
134
        );
135
136
        $returnedResponse = $indexController($request, $response);
137
        static::assertSame(200, $returnedResponse->getStatusCode());
138
        static::assertInstanceOf(\Zend\Diactoros\Response\HtmlResponse::class, $returnedResponse);
139
    }
140
141
    /**
142
     * @expectedException \Exception
143
     * @expectedExceptionMessage test error
144
     */
145
    public function testSaveMethodShouldThrowException()
146
    {
147
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
148
            ->getMockForAbstractClass();
149
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::class)
150
            ->disableOriginalConstructor()
151
            ->getMock();
152
        $menuService->expects(static::once())
153
            ->method('updateMenuItem')
154
            ->willThrowException(new \Exception('test error'));
155
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
156
            ->getMockForAbstractClass();
157
        $request = new \Zend\Diactoros\ServerRequest();
158
        $request = $request->withAttribute('action', 'save');
159
        $request = $request->withAttribute('id', 2);
160
        $request = $request->withParsedBody(['menu' => 'test']);
161
        $response = new \Zend\Diactoros\Response();
162
        $indexController = new \Menu\Controller\IndexController(
163
            $template,
164
            $router,
165
            $menuService
166
        );
167
        $indexController($request, $response);
168
    }
169
170
    public function testDeleteMethodShouldSucceedAndReturnRedirect()
171
    {
172
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
173
            ->getMockForAbstractClass();
174
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::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', 'delete');
184
        $request = $request->withAttribute('id', 2);
185
        $response = new \Zend\Diactoros\Response();
186
        $indexController = new \Menu\Controller\IndexController(
187
            $template,
188
            $router,
189
            $menuService
190
        );
191
        $returnedResponse = $indexController($request, $response);
192
        static::assertSame(302, $returnedResponse->getStatusCode());
193
    }
194
195
    /**
196
     * @expectedException \Exception
197
     * @expectedExceptionMessage test error
198
     */
199
    public function testDeleteMethodShouldFailThrowException()
200
    {
201
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
202
            ->getMockForAbstractClass();
203
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::class)
204
            ->disableOriginalConstructor()
205
            ->getMock();
206
        $menuService->expects(static::once())
207
            ->method('delete')
208
            ->willThrowException(new \Exception('test error'));
209
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
210
            ->getMockForAbstractClass();
211
        $request = new \Zend\Diactoros\ServerRequest();
212
        $request = $request->withAttribute('action', 'delete');
213
        $request = $request->withAttribute('id', 2);
214
        $response = new \Zend\Diactoros\Response();
215
        $indexController = new \Menu\Controller\IndexController(
216
            $template,
217
            $router,
218
            $menuService
219
        );
220
        $returnedResponse = $indexController($request, $response);
221
        static::assertSame(302, $returnedResponse->getStatusCode());
222
    }
223
224
    public function testUpdateOrderMethodShouldReturnJsonResponse()
225
    {
226
        $template = $this->getMockBuilder(\Zend\Expressive\Template\TemplateRendererInterface::class)
227
            ->getMockForAbstractClass();
228
        $menuService = $this->getMockBuilder(\Menu\Service\MenuService::class)
229
            ->disableOriginalConstructor()
230
            ->getMock();
231
        $menuService->expects(static::once())
232
            ->method('updateMenuOrder')
233
            ->willReturn('test');
234
        $router = $this->getMockBuilder(\Zend\Expressive\Router\RouterInterface::class)
235
            ->getMockForAbstractClass();
236
        $request = new \Zend\Diactoros\ServerRequest();
237
        $request = $request->withAttribute('action', 'updateOrder');
238
        $request = $request->withAttribute('id', 2);
239
        $request = $request->withParsedBody(['menu' => 'test']);
240
        $response = new \Zend\Diactoros\Response();
241
        $indexController = new \Menu\Controller\IndexController(
242
            $template,
243
            $router,
244
            $menuService
245
        );
246
        static::assertInstanceOf(\Zend\Diactoros\Response\JsonResponse::class, $indexController($request, $response));
247
    }
248
}
249