AccessRightsTest::testCommitterRights()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 78

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 78
rs 8.48
c 0
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace App\Tests\Acceptance;
4
5
use App\DataFixtures\UserReferenceTrait;
6
use App\DataFixtures\Users;
7
use App\Entity\User;
8
9
class AccessRightsTest extends BaseAcceptanceTest
10
{
11
    use UserReferenceTrait;
12
13
    public function testAnonymousRights()
14
    {
15
        $referenceRepository = $this->loadClientAndFixtures([Users::class]);
16
17
        $user = $this->getUser(Users::COMMITTER, $referenceRepository);
18
19
        $this->assertAccessRights('/login', 200);
20
        $this->assertAccessRights('/loggedout', 200);
21
        $this->assertAccessRights('/user/profile/');
22
        $this->assertAccessRights('/user/profile/edit');
23
24
        $this->assertAccessRights('/history');
25
26
        $this->assertAccessRights('/browse/');
27
        $this->assertAccessRights('/browse/?action=list');
28
        $this->assertAccessRights('/browse/?action=file.upload');
29
        $this->assertAccessRights('/browse/?action=file.create&extension=txt');
30
        $this->assertAccessRights('/browse/?action=file.create&extension=md');
31
        $this->assertAccessRights('/browse/?action=subdirectory.create');
32
        $this->assertAccessRights('/browse/examples/?action=remove');
33
34
        $this->assertAccessRights('/browse/index.md');
35
        $this->assertAccessRights('/browse/index.md?action=history');
36
        $this->assertAccessRights('/browse/index.md?action=edit');
37
        $this->assertAccessRights('/browse/index.md?action=move');
38
        $this->assertAccessRights('/browse/index.md?action=remove');
39
40
        $this->assertAccessRights('/users/');
41
        $this->assertAccessRights('/users/' . $user->getId() . '/edit');
42
        $this->assertAccessRights('/users/' . $user->getId() . '/delete');
43
    }
44
45
    public function testWatcherRights()
46
    {
47
        $referenceRepository = $this->loadClientAndFixtures([Users::class]);
48
49
        $user = $this->getUser(Users::COMMITTER, $referenceRepository);
50
51
        $this->assertAccessRights('/user/profile/', 200, $this->getUser(Users::WATCHER, $referenceRepository));
52
        $this->assertAccessRights(
53
            '/user/profile/edit',
54
            200,
55
            $this->getUser(Users::WATCHER, $referenceRepository)
56
        );
57
58
        $this->assertAccessRights('/history', 200, $this->getUser(Users::WATCHER, $referenceRepository));
59
60
        $this->assertAccessRights('/browse/', 302, $this->getUser(Users::WATCHER, $referenceRepository));
61
        $this->assertAccessRights(
62
            '/browse/?action=list',
63
            200,
64
            $this->getUser(Users::WATCHER, $referenceRepository)
65
        );
66
        $this->assertAccessRights(
67
            '/browse/?action=file.upload',
68
            null,
69
            $this->getUser(Users::WATCHER, $referenceRepository)
70
        );
71
        $this->assertAccessRights(
72
            '/browse/?action=file.create&extension=txt',
73
            null,
74
            $this->getUser(Users::WATCHER, $referenceRepository)
75
        );
76
        $this->assertAccessRights(
77
            '/browse/?action=file.create&extension=md',
78
            null,
79
            $this->getUser(Users::WATCHER, $referenceRepository)
80
        );
81
        $this->assertAccessRights(
82
            '/browse/?action=subdirectory.create',
83
            null,
84
            $this->getUser(Users::WATCHER, $referenceRepository)
85
        );
86
        $this->assertAccessRights(
87
            '/browse/examples/?action=remove',
88
            null,
89
            $this->getUser(Users::WATCHER, $referenceRepository)
90
        );
91
92
        $this->assertAccessRights(
93
            '/browse/index.md',
94
            200,
95
            $this->getUser(Users::WATCHER, $referenceRepository)
96
        );
97
        $this->assertAccessRights(
98
            '/browse/index.md?action=history',
99
            200,
100
            $this->getUser(Users::WATCHER, $referenceRepository)
101
        );
102
        $this->assertAccessRights(
103
            '/browse/index.md?action=edit',
104
            null,
105
            $this->getUser(Users::WATCHER, $referenceRepository)
106
        );
107
        $this->assertAccessRights(
108
            '/browse/index.md?action=move',
109
            null,
110
            $this->getUser(Users::WATCHER, $referenceRepository)
111
        );
112
        $this->assertAccessRights(
113
            '/browse/index.md?action=remove',
114
            null,
115
            $this->getUser(Users::WATCHER, $referenceRepository)
116
        );
117
118
        $this->assertAccessRights('/users/', null, $this->getUser(Users::WATCHER, $referenceRepository));
119
        $this->assertAccessRights(
120
            '/users/' . $user->getId() . '/edit',
121
            null,
122
            $this->getUser(Users::WATCHER, $referenceRepository)
123
        );
124
        $this->assertAccessRights(
125
            '/users/' . $user->getId() . '/delete',
126
            null,
127
            $this->getUser(Users::WATCHER, $referenceRepository)
128
        );
129
    }
130
131
    public function testCommitterRights()
132
    {
133
        $referenceRepository = $this->loadClientAndFixtures([Users::class]);
134
135
        $user = $this->getUser(Users::COMMITTER, $referenceRepository);
136
137
        $this->assertAccessRights('/history', 200, $this->getUser(Users::COMMITTER, $referenceRepository));
138
139
        $this->assertAccessRights('/browse/', 302, $this->getUser(Users::COMMITTER, $referenceRepository));
140
        $this->assertAccessRights(
141
            '/browse/?action=list',
142
            200,
143
            $this->getUser(Users::COMMITTER, $referenceRepository)
144
        );
145
        $this->assertAccessRights(
146
            '/browse/?action=file.upload',
147
            200,
148
            $this->getUser(Users::COMMITTER, $referenceRepository)
149
        );
150
        $this->assertAccessRights(
151
            '/browse/?action=file.create&extension=txt',
152
            200,
153
            $this->getUser(Users::COMMITTER, $referenceRepository)
154
        );
155
        $this->assertAccessRights(
156
            '/browse/?action=file.create&extension=md',
157
            200,
158
            $this->getUser(Users::COMMITTER, $referenceRepository)
159
        );
160
        $this->assertAccessRights(
161
            '/browse/?action=subdirectory.create',
162
            200,
163
            $this->getUser(Users::COMMITTER, $referenceRepository)
164
        );
165
        $this->assertAccessRights(
166
            '/browse/examples/?action=remove',
167
            200,
168
            $this->getUser(Users::COMMITTER, $referenceRepository)
169
        );
170
171
        $this->assertAccessRights(
172
            '/browse/index.md',
173
            200,
174
            $this->getUser(Users::COMMITTER, $referenceRepository)
175
        );
176
        $this->assertAccessRights(
177
            '/browse/index.md?action=history',
178
            200,
179
            $this->getUser(Users::COMMITTER, $referenceRepository)
180
        );
181
        $this->assertAccessRights(
182
            '/browse/index.md?action=edit',
183
            200,
184
            $this->getUser(Users::COMMITTER, $referenceRepository)
185
        );
186
        $this->assertAccessRights(
187
            '/browse/index.md?action=move',
188
            200,
189
            $this->getUser(Users::COMMITTER, $referenceRepository)
190
        );
191
        $this->assertAccessRights(
192
            '/browse/index.md?action=remove',
193
            302,
194
            $this->getUser(Users::COMMITTER, $referenceRepository)
195
        );
196
197
        $this->assertAccessRights('/users/', null, $this->getUser(Users::COMMITTER, $referenceRepository));
198
        $this->assertAccessRights(
199
            '/users/' . $user->getId() . '/edit',
200
            null,
201
            $this->getUser(Users::COMMITTER, $referenceRepository)
202
        );
203
        $this->assertAccessRights(
204
            '/users/' . $user->getId() . '/delete',
205
            null,
206
            $this->getUser(Users::COMMITTER, $referenceRepository)
207
        );
208
    }
209
210
    public function testAdminRights()
211
    {
212
        $referenceRepository = $this->loadClientAndFixtures([Users::class]);
213
214
        $user = $this->getUser(Users::COMMITTER, $referenceRepository);
215
216
        $this->assertAccessRights('/history', 200, $this->getUser(Users::ADMIN, $referenceRepository));
217
218
        $this->assertAccessRights('/browse/', 302, $this->getUser(Users::ADMIN, $referenceRepository));
219
        $this->assertAccessRights(
220
            '/browse/?action=list',
221
            200,
222
            $this->getUser(Users::ADMIN, $referenceRepository)
223
        );
224
        $this->assertAccessRights(
225
            '/browse/?action=file.upload',
226
            200,
227
            $this->getUser(Users::ADMIN, $referenceRepository)
228
        );
229
        $this->assertAccessRights(
230
            '/browse/?action=file.create&extension=txt',
231
            200,
232
            $this->getUser(Users::ADMIN, $referenceRepository)
233
        );
234
        $this->assertAccessRights(
235
            '/browse/?action=file.create&extension=md',
236
            200,
237
            $this->getUser(Users::ADMIN, $referenceRepository)
238
        );
239
        $this->assertAccessRights(
240
            '/browse/?action=subdirectory.create',
241
            200,
242
            $this->getUser(Users::ADMIN, $referenceRepository)
243
        );
244
        $this->assertAccessRights(
245
            '/browse/examples/?action=remove',
246
            200,
247
            $this->getUser(Users::ADMIN, $referenceRepository)
248
        );
249
250
        $this->assertAccessRights('/browse/index.md', 200, $this->getUser(Users::ADMIN, $referenceRepository));
251
        $this->assertAccessRights(
252
            '/browse/index.md?action=history',
253
            200,
254
            $this->getUser(Users::ADMIN, $referenceRepository)
255
        );
256
        $this->assertAccessRights(
257
            '/browse/index.md?action=edit',
258
            200,
259
            $this->getUser(Users::ADMIN, $referenceRepository)
260
        );
261
        $this->assertAccessRights(
262
            '/browse/index.md?action=move',
263
            200,
264
            $this->getUser(Users::ADMIN, $referenceRepository)
265
        );
266
        $this->assertAccessRights(
267
            '/browse/index.md?action=remove',
268
            302,
269
            $this->getUser(Users::ADMIN, $referenceRepository)
270
        );
271
272
        $this->assertAccessRights('/users/', 200, $this->getUser(Users::ADMIN, $referenceRepository));
273
        $this->assertAccessRights(
274
            '/users/' . $user->getId() . '/edit',
275
            200,
276
            $this->getUser(Users::ADMIN, $referenceRepository)
277
        );
278
        $this->assertAccessRights(
279
            '/users/' . $user->getId() . '/delete',
280
            302,
281
            $this->getUser(Users::ADMIN, $referenceRepository)
282
        );
283
    }
284
285
    protected function assertAccessRights(string $url, ?int $expectedStatus = null, ?User $user = null)
286
    {
287
        $this->logOut();
288
        if (null !== $user) {
289
            $this->logIn($user);
290
        }
291
        $this->client->request('GET', $url);
292
        $response = $this->client->getResponse();
293
        $statusCode = $response->getStatusCode();
294
295
        if (500 === $statusCode) {
296
            echo $this->client->getResponse()->getContent();
297
            $this->fail(sprintf('Status code was 500 for %s', $url));
298
        }
299
300
        if (null === $expectedStatus) {
301
            $this->assertEquals(302, $statusCode, sprintf('%s: Login expected', $url));
302
            $this->assertEquals('http://localhost/login', $response->headers->get('Location'));
303
304
            return;
305
        }
306
307
        $this->assertEquals(
308
            $expectedStatus,
309
            $statusCode,
310
            sprintf('%s [%s]', $url, $user !== null ? $user->getUsername() : null)
311
        );
312
    }
313
}
314