Completed
Push — ezp-30616 ( 8e069f...7bf8e8 )
by
unknown
23:24 queued 01:36
created

UserServiceTest   A

Complexity

Total Complexity 27

Size/Duplication

Total Lines 887
Duplicated Lines 71.03 %

Coupling/Cohesion

Components 1
Dependencies 13

Importance

Changes 0
Metric Value
dl 630
loc 887
rs 9.7129
c 0
b 0
f 0
wmc 27
lcom 1
cbo 13

27 Methods

Rating   Name   Duplication   Size   Complexity  
A testUpdateUserGroupEvents() 28 28 1
A testReturnUpdateUserGroupResultInBeforeEvents() 34 34 1
A testUpdateUserGroupStopPropagationInBeforeEvents() 37 37 1
A testUpdateUserEvents() 28 28 1
A testReturnUpdateUserResultInBeforeEvents() 34 34 1
A testUpdateUserStopPropagationInBeforeEvents() 37 37 1
A testUnAssignUserFromUserGroupEvents() 0 25 1
A testUnAssignUserFromUserGroupStopPropagationInBeforeEvents() 32 32 1
A testDeleteUserGroupEvents() 0 27 1
A testReturnDeleteUserGroupResultInBeforeEvents() 33 33 1
A testDeleteUserGroupStopPropagationInBeforeEvents() 36 36 1
A testAssignUserToUserGroupEvents() 0 25 1
A testAssignUserToUserGroupStopPropagationInBeforeEvents() 32 32 1
A testDeleteUserEvents() 0 27 1
A testReturnDeleteUserResultInBeforeEvents() 33 33 1
A testDeleteUserStopPropagationInBeforeEvents() 36 36 1
A testMoveUserGroupEvents() 0 25 1
A testMoveUserGroupStopPropagationInBeforeEvents() 32 32 1
A testCreateUserEvents() 0 28 1
A testReturnCreateUserResultInBeforeEvents() 0 34 1
A testCreateUserStopPropagationInBeforeEvents() 0 37 1
A testCreateUserGroupEvents() 28 28 1
A testReturnCreateUserGroupResultInBeforeEvents() 34 34 1
A testCreateUserGroupStopPropagationInBeforeEvents() 37 37 1
A testUpdateUserTokenEvents() 28 28 1
A testReturnUpdateUserTokenResultInBeforeEvents() 34 34 1
A testUpdateUserTokenStopPropagationInBeforeEvents() 37 37 1

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
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
namespace eZ\Publish\Core\Event\Tests;
8
9
use eZ\Publish\API\Repository\UserService as UserServiceInterface;
10
use eZ\Publish\API\Repository\Values\User\User;
11
use eZ\Publish\API\Repository\Values\User\UserCreateStruct;
12
use eZ\Publish\API\Repository\Values\User\UserGroup;
13
use eZ\Publish\API\Repository\Values\User\UserGroupCreateStruct;
14
use eZ\Publish\API\Repository\Values\User\UserGroupUpdateStruct;
15
use eZ\Publish\API\Repository\Values\User\UserTokenUpdateStruct;
16
use eZ\Publish\API\Repository\Values\User\UserUpdateStruct;
17
use eZ\Publish\Core\Event\UserService;
18
use eZ\Publish\Core\Event\User\BeforeAssignUserToUserGroupEvent;
19
use eZ\Publish\Core\Event\User\BeforeCreateUserEvent;
20
use eZ\Publish\Core\Event\User\BeforeCreateUserGroupEvent;
21
use eZ\Publish\Core\Event\User\BeforeDeleteUserEvent;
22
use eZ\Publish\Core\Event\User\BeforeDeleteUserGroupEvent;
23
use eZ\Publish\Core\Event\User\BeforeMoveUserGroupEvent;
24
use eZ\Publish\Core\Event\User\BeforeUnAssignUserFromUserGroupEvent;
25
use eZ\Publish\Core\Event\User\BeforeUpdateUserEvent;
26
use eZ\Publish\Core\Event\User\BeforeUpdateUserGroupEvent;
27
use eZ\Publish\Core\Event\User\BeforeUpdateUserTokenEvent;
28
use eZ\Publish\Core\Event\User\UserEvents;
29
30
class UserServiceTest extends AbstractServiceTest
31
{
32 View Code Duplication
    public function testUpdateUserGroupEvents()
33
    {
34
        $traceableEventDispatcher = $this->getEventDispatcher(
35
            UserEvents::BEFORE_UPDATE_USER_GROUP,
36
            UserEvents::UPDATE_USER_GROUP
37
        );
38
39
        $parameters = [
40
            $this->createMock(UserGroup::class),
41
            $this->createMock(UserGroupUpdateStruct::class),
42
        ];
43
44
        $updatedUserGroup = $this->createMock(UserGroup::class);
45
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
46
        $innerServiceMock->method('updateUserGroup')->willReturn($updatedUserGroup);
47
48
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
49
        $result = $service->updateUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserGroup() misses a required argument $userGroupUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
50
51
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
52
53
        $this->assertSame($updatedUserGroup, $result);
54
        $this->assertSame($calledListeners, [
55
            [UserEvents::BEFORE_UPDATE_USER_GROUP, 0],
56
            [UserEvents::UPDATE_USER_GROUP, 0],
57
        ]);
58
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
59
    }
60
61 View Code Duplication
    public function testReturnUpdateUserGroupResultInBeforeEvents()
62
    {
63
        $traceableEventDispatcher = $this->getEventDispatcher(
64
            UserEvents::BEFORE_UPDATE_USER_GROUP,
65
            UserEvents::UPDATE_USER_GROUP
66
        );
67
68
        $parameters = [
69
            $this->createMock(UserGroup::class),
70
            $this->createMock(UserGroupUpdateStruct::class),
71
        ];
72
73
        $updatedUserGroup = $this->createMock(UserGroup::class);
74
        $eventUpdatedUserGroup = $this->createMock(UserGroup::class);
75
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
76
        $innerServiceMock->method('updateUserGroup')->willReturn($updatedUserGroup);
77
78
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER_GROUP, function (BeforeUpdateUserGroupEvent $event) use ($eventUpdatedUserGroup) {
79
            $event->setUpdatedUserGroup($eventUpdatedUserGroup);
80
        }, 10);
81
82
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
83
        $result = $service->updateUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserGroup() misses a required argument $userGroupUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
84
85
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
86
87
        $this->assertSame($eventUpdatedUserGroup, $result);
88
        $this->assertSame($calledListeners, [
89
            [UserEvents::BEFORE_UPDATE_USER_GROUP, 10],
90
            [UserEvents::BEFORE_UPDATE_USER_GROUP, 0],
91
            [UserEvents::UPDATE_USER_GROUP, 0],
92
        ]);
93
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
94
    }
95
96 View Code Duplication
    public function testUpdateUserGroupStopPropagationInBeforeEvents()
97
    {
98
        $traceableEventDispatcher = $this->getEventDispatcher(
99
            UserEvents::BEFORE_UPDATE_USER_GROUP,
100
            UserEvents::UPDATE_USER_GROUP
101
        );
102
103
        $parameters = [
104
            $this->createMock(UserGroup::class),
105
            $this->createMock(UserGroupUpdateStruct::class),
106
        ];
107
108
        $updatedUserGroup = $this->createMock(UserGroup::class);
109
        $eventUpdatedUserGroup = $this->createMock(UserGroup::class);
110
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
111
        $innerServiceMock->method('updateUserGroup')->willReturn($updatedUserGroup);
112
113
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER_GROUP, function (BeforeUpdateUserGroupEvent $event) use ($eventUpdatedUserGroup) {
114
            $event->setUpdatedUserGroup($eventUpdatedUserGroup);
115
            $event->stopPropagation();
116
        }, 10);
117
118
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
119
        $result = $service->updateUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserGroup() misses a required argument $userGroupUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
120
121
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
122
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
123
124
        $this->assertSame($eventUpdatedUserGroup, $result);
125
        $this->assertSame($calledListeners, [
126
            [UserEvents::BEFORE_UPDATE_USER_GROUP, 10],
127
        ]);
128
        $this->assertSame($notCalledListeners, [
129
            [UserEvents::UPDATE_USER_GROUP, 0],
130
            [UserEvents::BEFORE_UPDATE_USER_GROUP, 0],
131
        ]);
132
    }
133
134 View Code Duplication
    public function testUpdateUserEvents()
135
    {
136
        $traceableEventDispatcher = $this->getEventDispatcher(
137
            UserEvents::BEFORE_UPDATE_USER,
138
            UserEvents::UPDATE_USER
139
        );
140
141
        $parameters = [
142
            $this->createMock(User::class),
143
            $this->createMock(UserUpdateStruct::class),
144
        ];
145
146
        $updatedUser = $this->createMock(User::class);
147
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
148
        $innerServiceMock->method('updateUser')->willReturn($updatedUser);
149
150
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
151
        $result = $service->updateUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUser() misses a required argument $userUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
152
153
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
154
155
        $this->assertSame($updatedUser, $result);
156
        $this->assertSame($calledListeners, [
157
            [UserEvents::BEFORE_UPDATE_USER, 0],
158
            [UserEvents::UPDATE_USER, 0],
159
        ]);
160
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
161
    }
162
163 View Code Duplication
    public function testReturnUpdateUserResultInBeforeEvents()
164
    {
165
        $traceableEventDispatcher = $this->getEventDispatcher(
166
            UserEvents::BEFORE_UPDATE_USER,
167
            UserEvents::UPDATE_USER
168
        );
169
170
        $parameters = [
171
            $this->createMock(User::class),
172
            $this->createMock(UserUpdateStruct::class),
173
        ];
174
175
        $updatedUser = $this->createMock(User::class);
176
        $eventUpdatedUser = $this->createMock(User::class);
177
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
178
        $innerServiceMock->method('updateUser')->willReturn($updatedUser);
179
180
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER, function (BeforeUpdateUserEvent $event) use ($eventUpdatedUser) {
181
            $event->setUpdatedUser($eventUpdatedUser);
182
        }, 10);
183
184
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
185
        $result = $service->updateUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUser() misses a required argument $userUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
186
187
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
188
189
        $this->assertSame($eventUpdatedUser, $result);
190
        $this->assertSame($calledListeners, [
191
            [UserEvents::BEFORE_UPDATE_USER, 10],
192
            [UserEvents::BEFORE_UPDATE_USER, 0],
193
            [UserEvents::UPDATE_USER, 0],
194
        ]);
195
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
196
    }
197
198 View Code Duplication
    public function testUpdateUserStopPropagationInBeforeEvents()
199
    {
200
        $traceableEventDispatcher = $this->getEventDispatcher(
201
            UserEvents::BEFORE_UPDATE_USER,
202
            UserEvents::UPDATE_USER
203
        );
204
205
        $parameters = [
206
            $this->createMock(User::class),
207
            $this->createMock(UserUpdateStruct::class),
208
        ];
209
210
        $updatedUser = $this->createMock(User::class);
211
        $eventUpdatedUser = $this->createMock(User::class);
212
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
213
        $innerServiceMock->method('updateUser')->willReturn($updatedUser);
214
215
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER, function (BeforeUpdateUserEvent $event) use ($eventUpdatedUser) {
216
            $event->setUpdatedUser($eventUpdatedUser);
217
            $event->stopPropagation();
218
        }, 10);
219
220
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
221
        $result = $service->updateUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUser() misses a required argument $userUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
222
223
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
224
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
225
226
        $this->assertSame($eventUpdatedUser, $result);
227
        $this->assertSame($calledListeners, [
228
            [UserEvents::BEFORE_UPDATE_USER, 10],
229
        ]);
230
        $this->assertSame($notCalledListeners, [
231
            [UserEvents::UPDATE_USER, 0],
232
            [UserEvents::BEFORE_UPDATE_USER, 0],
233
        ]);
234
    }
235
236
    public function testUnAssignUserFromUserGroupEvents()
237
    {
238
        $traceableEventDispatcher = $this->getEventDispatcher(
239
            UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP,
240
            UserEvents::UN_ASSIGN_USER_FROM_USER_GROUP
241
        );
242
243
        $parameters = [
244
            $this->createMock(User::class),
245
            $this->createMock(UserGroup::class),
246
        ];
247
248
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
249
250
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
251
        $service->unAssignUserFromUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unAssignUserFromUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
252
253
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
254
255
        $this->assertSame($calledListeners, [
256
            [UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP, 0],
257
            [UserEvents::UN_ASSIGN_USER_FROM_USER_GROUP, 0],
258
        ]);
259
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
260
    }
261
262 View Code Duplication
    public function testUnAssignUserFromUserGroupStopPropagationInBeforeEvents()
263
    {
264
        $traceableEventDispatcher = $this->getEventDispatcher(
265
            UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP,
266
            UserEvents::UN_ASSIGN_USER_FROM_USER_GROUP
267
        );
268
269
        $parameters = [
270
            $this->createMock(User::class),
271
            $this->createMock(UserGroup::class),
272
        ];
273
274
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
275
276
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP, function (BeforeUnAssignUserFromUserGroupEvent $event) {
277
            $event->stopPropagation();
278
        }, 10);
279
280
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
281
        $service->unAssignUserFromUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unAssignUserFromUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
282
283
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
284
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
285
286
        $this->assertSame($calledListeners, [
287
            [UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP, 10],
288
        ]);
289
        $this->assertSame($notCalledListeners, [
290
            [UserEvents::UN_ASSIGN_USER_FROM_USER_GROUP, 0],
291
            [UserEvents::BEFORE_UN_ASSIGN_USER_FROM_USER_GROUP, 0],
292
        ]);
293
    }
294
295
    public function testDeleteUserGroupEvents()
296
    {
297
        $traceableEventDispatcher = $this->getEventDispatcher(
298
            UserEvents::BEFORE_DELETE_USER_GROUP,
299
            UserEvents::DELETE_USER_GROUP
300
        );
301
302
        $parameters = [
303
            $this->createMock(UserGroup::class),
304
        ];
305
306
        $locations = [];
307
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
308
        $innerServiceMock->method('deleteUserGroup')->willReturn($locations);
309
310
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
311
        $result = $service->deleteUserGroup(...$parameters);
312
313
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
314
315
        $this->assertSame($locations, $result);
316
        $this->assertSame($calledListeners, [
317
            [UserEvents::BEFORE_DELETE_USER_GROUP, 0],
318
            [UserEvents::DELETE_USER_GROUP, 0],
319
        ]);
320
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
321
    }
322
323 View Code Duplication
    public function testReturnDeleteUserGroupResultInBeforeEvents()
324
    {
325
        $traceableEventDispatcher = $this->getEventDispatcher(
326
            UserEvents::BEFORE_DELETE_USER_GROUP,
327
            UserEvents::DELETE_USER_GROUP
328
        );
329
330
        $parameters = [
331
            $this->createMock(UserGroup::class),
332
        ];
333
334
        $locations = [];
335
        $eventLocations = [];
336
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
337
        $innerServiceMock->method('deleteUserGroup')->willReturn($locations);
338
339
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_DELETE_USER_GROUP, function (BeforeDeleteUserGroupEvent $event) use ($eventLocations) {
340
            $event->setLocations($eventLocations);
341
        }, 10);
342
343
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
344
        $result = $service->deleteUserGroup(...$parameters);
345
346
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
347
348
        $this->assertSame($eventLocations, $result);
349
        $this->assertSame($calledListeners, [
350
            [UserEvents::BEFORE_DELETE_USER_GROUP, 10],
351
            [UserEvents::BEFORE_DELETE_USER_GROUP, 0],
352
            [UserEvents::DELETE_USER_GROUP, 0],
353
        ]);
354
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
355
    }
356
357 View Code Duplication
    public function testDeleteUserGroupStopPropagationInBeforeEvents()
358
    {
359
        $traceableEventDispatcher = $this->getEventDispatcher(
360
            UserEvents::BEFORE_DELETE_USER_GROUP,
361
            UserEvents::DELETE_USER_GROUP
362
        );
363
364
        $parameters = [
365
            $this->createMock(UserGroup::class),
366
        ];
367
368
        $locations = [];
369
        $eventLocations = [];
370
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
371
        $innerServiceMock->method('deleteUserGroup')->willReturn($locations);
372
373
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_DELETE_USER_GROUP, function (BeforeDeleteUserGroupEvent $event) use ($eventLocations) {
374
            $event->setLocations($eventLocations);
375
            $event->stopPropagation();
376
        }, 10);
377
378
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
379
        $result = $service->deleteUserGroup(...$parameters);
380
381
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
382
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
383
384
        $this->assertSame($eventLocations, $result);
385
        $this->assertSame($calledListeners, [
386
            [UserEvents::BEFORE_DELETE_USER_GROUP, 10],
387
        ]);
388
        $this->assertSame($notCalledListeners, [
389
            [UserEvents::DELETE_USER_GROUP, 0],
390
            [UserEvents::BEFORE_DELETE_USER_GROUP, 0],
391
        ]);
392
    }
393
394
    public function testAssignUserToUserGroupEvents()
395
    {
396
        $traceableEventDispatcher = $this->getEventDispatcher(
397
            UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP,
398
            UserEvents::ASSIGN_USER_TO_USER_GROUP
399
        );
400
401
        $parameters = [
402
            $this->createMock(User::class),
403
            $this->createMock(UserGroup::class),
404
        ];
405
406
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
407
408
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
409
        $service->assignUserToUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignUserToUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
410
411
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
412
413
        $this->assertSame($calledListeners, [
414
            [UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP, 0],
415
            [UserEvents::ASSIGN_USER_TO_USER_GROUP, 0],
416
        ]);
417
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
418
    }
419
420 View Code Duplication
    public function testAssignUserToUserGroupStopPropagationInBeforeEvents()
421
    {
422
        $traceableEventDispatcher = $this->getEventDispatcher(
423
            UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP,
424
            UserEvents::ASSIGN_USER_TO_USER_GROUP
425
        );
426
427
        $parameters = [
428
            $this->createMock(User::class),
429
            $this->createMock(UserGroup::class),
430
        ];
431
432
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
433
434
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP, function (BeforeAssignUserToUserGroupEvent $event) {
435
            $event->stopPropagation();
436
        }, 10);
437
438
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
439
        $service->assignUserToUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignUserToUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
440
441
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
442
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
443
444
        $this->assertSame($calledListeners, [
445
            [UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP, 10],
446
        ]);
447
        $this->assertSame($notCalledListeners, [
448
            [UserEvents::ASSIGN_USER_TO_USER_GROUP, 0],
449
            [UserEvents::BEFORE_ASSIGN_USER_TO_USER_GROUP, 0],
450
        ]);
451
    }
452
453
    public function testDeleteUserEvents()
454
    {
455
        $traceableEventDispatcher = $this->getEventDispatcher(
456
            UserEvents::BEFORE_DELETE_USER,
457
            UserEvents::DELETE_USER
458
        );
459
460
        $parameters = [
461
            $this->createMock(User::class),
462
        ];
463
464
        $locations = [];
465
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
466
        $innerServiceMock->method('deleteUser')->willReturn($locations);
467
468
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
469
        $result = $service->deleteUser(...$parameters);
470
471
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
472
473
        $this->assertSame($locations, $result);
474
        $this->assertSame($calledListeners, [
475
            [UserEvents::BEFORE_DELETE_USER, 0],
476
            [UserEvents::DELETE_USER, 0],
477
        ]);
478
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
479
    }
480
481 View Code Duplication
    public function testReturnDeleteUserResultInBeforeEvents()
482
    {
483
        $traceableEventDispatcher = $this->getEventDispatcher(
484
            UserEvents::BEFORE_DELETE_USER,
485
            UserEvents::DELETE_USER
486
        );
487
488
        $parameters = [
489
            $this->createMock(User::class),
490
        ];
491
492
        $locations = [];
493
        $eventLocations = [];
494
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
495
        $innerServiceMock->method('deleteUser')->willReturn($locations);
496
497
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_DELETE_USER, function (BeforeDeleteUserEvent $event) use ($eventLocations) {
498
            $event->setLocations($eventLocations);
499
        }, 10);
500
501
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
502
        $result = $service->deleteUser(...$parameters);
503
504
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
505
506
        $this->assertSame($eventLocations, $result);
507
        $this->assertSame($calledListeners, [
508
            [UserEvents::BEFORE_DELETE_USER, 10],
509
            [UserEvents::BEFORE_DELETE_USER, 0],
510
            [UserEvents::DELETE_USER, 0],
511
        ]);
512
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
513
    }
514
515 View Code Duplication
    public function testDeleteUserStopPropagationInBeforeEvents()
516
    {
517
        $traceableEventDispatcher = $this->getEventDispatcher(
518
            UserEvents::BEFORE_DELETE_USER,
519
            UserEvents::DELETE_USER
520
        );
521
522
        $parameters = [
523
            $this->createMock(User::class),
524
        ];
525
526
        $locations = [];
527
        $eventLocations = [];
528
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
529
        $innerServiceMock->method('deleteUser')->willReturn($locations);
530
531
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_DELETE_USER, function (BeforeDeleteUserEvent $event) use ($eventLocations) {
532
            $event->setLocations($eventLocations);
533
            $event->stopPropagation();
534
        }, 10);
535
536
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
537
        $result = $service->deleteUser(...$parameters);
538
539
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
540
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
541
542
        $this->assertSame($eventLocations, $result);
543
        $this->assertSame($calledListeners, [
544
            [UserEvents::BEFORE_DELETE_USER, 10],
545
        ]);
546
        $this->assertSame($notCalledListeners, [
547
            [UserEvents::DELETE_USER, 0],
548
            [UserEvents::BEFORE_DELETE_USER, 0],
549
        ]);
550
    }
551
552
    public function testMoveUserGroupEvents()
553
    {
554
        $traceableEventDispatcher = $this->getEventDispatcher(
555
            UserEvents::BEFORE_MOVE_USER_GROUP,
556
            UserEvents::MOVE_USER_GROUP
557
        );
558
559
        $parameters = [
560
            $this->createMock(UserGroup::class),
561
            $this->createMock(UserGroup::class),
562
        ];
563
564
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
565
566
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
567
        $service->moveUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to moveUserGroup() misses a required argument $newParent.

This check looks for function calls that miss required arguments.

Loading history...
568
569
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
570
571
        $this->assertSame($calledListeners, [
572
            [UserEvents::BEFORE_MOVE_USER_GROUP, 0],
573
            [UserEvents::MOVE_USER_GROUP, 0],
574
        ]);
575
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
576
    }
577
578 View Code Duplication
    public function testMoveUserGroupStopPropagationInBeforeEvents()
579
    {
580
        $traceableEventDispatcher = $this->getEventDispatcher(
581
            UserEvents::BEFORE_MOVE_USER_GROUP,
582
            UserEvents::MOVE_USER_GROUP
583
        );
584
585
        $parameters = [
586
            $this->createMock(UserGroup::class),
587
            $this->createMock(UserGroup::class),
588
        ];
589
590
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
591
592
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_MOVE_USER_GROUP, function (BeforeMoveUserGroupEvent $event) {
593
            $event->stopPropagation();
594
        }, 10);
595
596
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
597
        $service->moveUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to moveUserGroup() misses a required argument $newParent.

This check looks for function calls that miss required arguments.

Loading history...
598
599
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
600
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
601
602
        $this->assertSame($calledListeners, [
603
            [UserEvents::BEFORE_MOVE_USER_GROUP, 10],
604
        ]);
605
        $this->assertSame($notCalledListeners, [
606
            [UserEvents::MOVE_USER_GROUP, 0],
607
            [UserEvents::BEFORE_MOVE_USER_GROUP, 0],
608
        ]);
609
    }
610
611
    public function testCreateUserEvents()
612
    {
613
        $traceableEventDispatcher = $this->getEventDispatcher(
614
            UserEvents::BEFORE_CREATE_USER,
615
            UserEvents::CREATE_USER
616
        );
617
618
        $parameters = [
619
            $this->createMock(UserCreateStruct::class),
620
            [],
621
        ];
622
623
        $user = $this->createMock(User::class);
624
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
625
        $innerServiceMock->method('createUser')->willReturn($user);
626
627
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
628
        $result = $service->createUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUser() misses a required argument $parentGroups.

This check looks for function calls that miss required arguments.

Loading history...
629
630
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
631
632
        $this->assertSame($user, $result);
633
        $this->assertSame($calledListeners, [
634
            [UserEvents::BEFORE_CREATE_USER, 0],
635
            [UserEvents::CREATE_USER, 0],
636
        ]);
637
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
638
    }
639
640
    public function testReturnCreateUserResultInBeforeEvents()
641
    {
642
        $traceableEventDispatcher = $this->getEventDispatcher(
643
            UserEvents::BEFORE_CREATE_USER,
644
            UserEvents::CREATE_USER
645
        );
646
647
        $parameters = [
648
            $this->createMock(UserCreateStruct::class),
649
            [],
650
        ];
651
652
        $user = $this->createMock(User::class);
653
        $eventUser = $this->createMock(User::class);
654
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
655
        $innerServiceMock->method('createUser')->willReturn($user);
656
657
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_CREATE_USER, function (BeforeCreateUserEvent $event) use ($eventUser) {
658
            $event->setUser($eventUser);
659
        }, 10);
660
661
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
662
        $result = $service->createUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUser() misses a required argument $parentGroups.

This check looks for function calls that miss required arguments.

Loading history...
663
664
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
665
666
        $this->assertSame($eventUser, $result);
667
        $this->assertSame($calledListeners, [
668
            [UserEvents::BEFORE_CREATE_USER, 10],
669
            [UserEvents::BEFORE_CREATE_USER, 0],
670
            [UserEvents::CREATE_USER, 0],
671
        ]);
672
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
673
    }
674
675
    public function testCreateUserStopPropagationInBeforeEvents()
676
    {
677
        $traceableEventDispatcher = $this->getEventDispatcher(
678
            UserEvents::BEFORE_CREATE_USER,
679
            UserEvents::CREATE_USER
680
        );
681
682
        $parameters = [
683
            $this->createMock(UserCreateStruct::class),
684
            [],
685
        ];
686
687
        $user = $this->createMock(User::class);
688
        $eventUser = $this->createMock(User::class);
689
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
690
        $innerServiceMock->method('createUser')->willReturn($user);
691
692
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_CREATE_USER, function (BeforeCreateUserEvent $event) use ($eventUser) {
693
            $event->setUser($eventUser);
694
            $event->stopPropagation();
695
        }, 10);
696
697
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
698
        $result = $service->createUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUser() misses a required argument $parentGroups.

This check looks for function calls that miss required arguments.

Loading history...
699
700
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
701
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
702
703
        $this->assertSame($eventUser, $result);
704
        $this->assertSame($calledListeners, [
705
            [UserEvents::BEFORE_CREATE_USER, 10],
706
        ]);
707
        $this->assertSame($notCalledListeners, [
708
            [UserEvents::CREATE_USER, 0],
709
            [UserEvents::BEFORE_CREATE_USER, 0],
710
        ]);
711
    }
712
713 View Code Duplication
    public function testCreateUserGroupEvents()
714
    {
715
        $traceableEventDispatcher = $this->getEventDispatcher(
716
            UserEvents::BEFORE_CREATE_USER_GROUP,
717
            UserEvents::CREATE_USER_GROUP
718
        );
719
720
        $parameters = [
721
            $this->createMock(UserGroupCreateStruct::class),
722
            $this->createMock(UserGroup::class),
723
        ];
724
725
        $userGroup = $this->createMock(UserGroup::class);
726
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
727
        $innerServiceMock->method('createUserGroup')->willReturn($userGroup);
728
729
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
730
        $result = $service->createUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUserGroup() misses a required argument $parentGroup.

This check looks for function calls that miss required arguments.

Loading history...
731
732
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
733
734
        $this->assertSame($userGroup, $result);
735
        $this->assertSame($calledListeners, [
736
            [UserEvents::BEFORE_CREATE_USER_GROUP, 0],
737
            [UserEvents::CREATE_USER_GROUP, 0],
738
        ]);
739
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
740
    }
741
742 View Code Duplication
    public function testReturnCreateUserGroupResultInBeforeEvents()
743
    {
744
        $traceableEventDispatcher = $this->getEventDispatcher(
745
            UserEvents::BEFORE_CREATE_USER_GROUP,
746
            UserEvents::CREATE_USER_GROUP
747
        );
748
749
        $parameters = [
750
            $this->createMock(UserGroupCreateStruct::class),
751
            $this->createMock(UserGroup::class),
752
        ];
753
754
        $userGroup = $this->createMock(UserGroup::class);
755
        $eventUserGroup = $this->createMock(UserGroup::class);
756
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
757
        $innerServiceMock->method('createUserGroup')->willReturn($userGroup);
758
759
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_CREATE_USER_GROUP, function (BeforeCreateUserGroupEvent $event) use ($eventUserGroup) {
760
            $event->setUserGroup($eventUserGroup);
761
        }, 10);
762
763
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
764
        $result = $service->createUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUserGroup() misses a required argument $parentGroup.

This check looks for function calls that miss required arguments.

Loading history...
765
766
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
767
768
        $this->assertSame($eventUserGroup, $result);
769
        $this->assertSame($calledListeners, [
770
            [UserEvents::BEFORE_CREATE_USER_GROUP, 10],
771
            [UserEvents::BEFORE_CREATE_USER_GROUP, 0],
772
            [UserEvents::CREATE_USER_GROUP, 0],
773
        ]);
774
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
775
    }
776
777 View Code Duplication
    public function testCreateUserGroupStopPropagationInBeforeEvents()
778
    {
779
        $traceableEventDispatcher = $this->getEventDispatcher(
780
            UserEvents::BEFORE_CREATE_USER_GROUP,
781
            UserEvents::CREATE_USER_GROUP
782
        );
783
784
        $parameters = [
785
            $this->createMock(UserGroupCreateStruct::class),
786
            $this->createMock(UserGroup::class),
787
        ];
788
789
        $userGroup = $this->createMock(UserGroup::class);
790
        $eventUserGroup = $this->createMock(UserGroup::class);
791
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
792
        $innerServiceMock->method('createUserGroup')->willReturn($userGroup);
793
794
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_CREATE_USER_GROUP, function (BeforeCreateUserGroupEvent $event) use ($eventUserGroup) {
795
            $event->setUserGroup($eventUserGroup);
796
            $event->stopPropagation();
797
        }, 10);
798
799
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
800
        $result = $service->createUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to createUserGroup() misses a required argument $parentGroup.

This check looks for function calls that miss required arguments.

Loading history...
801
802
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
803
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
804
805
        $this->assertSame($eventUserGroup, $result);
806
        $this->assertSame($calledListeners, [
807
            [UserEvents::BEFORE_CREATE_USER_GROUP, 10],
808
        ]);
809
        $this->assertSame($notCalledListeners, [
810
            [UserEvents::CREATE_USER_GROUP, 0],
811
            [UserEvents::BEFORE_CREATE_USER_GROUP, 0],
812
        ]);
813
    }
814
815 View Code Duplication
    public function testUpdateUserTokenEvents()
816
    {
817
        $traceableEventDispatcher = $this->getEventDispatcher(
818
            UserEvents::BEFORE_UPDATE_USER_TOKEN,
819
            UserEvents::UPDATE_USER_TOKEN
820
        );
821
822
        $parameters = [
823
            $this->createMock(User::class),
824
            $this->createMock(UserTokenUpdateStruct::class),
825
        ];
826
827
        $updatedUser = $this->createMock(User::class);
828
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
829
        $innerServiceMock->method('updateUserToken')->willReturn($updatedUser);
830
831
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
832
        $result = $service->updateUserToken(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserToken() misses a required argument $userTokenUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
833
834
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
835
836
        $this->assertSame($updatedUser, $result);
837
        $this->assertSame($calledListeners, [
838
            [UserEvents::BEFORE_UPDATE_USER_TOKEN, 0],
839
            [UserEvents::UPDATE_USER_TOKEN, 0],
840
        ]);
841
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
842
    }
843
844 View Code Duplication
    public function testReturnUpdateUserTokenResultInBeforeEvents()
845
    {
846
        $traceableEventDispatcher = $this->getEventDispatcher(
847
            UserEvents::BEFORE_UPDATE_USER_TOKEN,
848
            UserEvents::UPDATE_USER_TOKEN
849
        );
850
851
        $parameters = [
852
            $this->createMock(User::class),
853
            $this->createMock(UserTokenUpdateStruct::class),
854
        ];
855
856
        $updatedUser = $this->createMock(User::class);
857
        $eventUpdatedUser = $this->createMock(User::class);
858
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
859
        $innerServiceMock->method('updateUserToken')->willReturn($updatedUser);
860
861
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER_TOKEN, function (BeforeUpdateUserTokenEvent $event) use ($eventUpdatedUser) {
862
            $event->setUpdatedUser($eventUpdatedUser);
863
        }, 10);
864
865
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
866
        $result = $service->updateUserToken(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserToken() misses a required argument $userTokenUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
867
868
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
869
870
        $this->assertSame($eventUpdatedUser, $result);
871
        $this->assertSame($calledListeners, [
872
            [UserEvents::BEFORE_UPDATE_USER_TOKEN, 10],
873
            [UserEvents::BEFORE_UPDATE_USER_TOKEN, 0],
874
            [UserEvents::UPDATE_USER_TOKEN, 0],
875
        ]);
876
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
877
    }
878
879 View Code Duplication
    public function testUpdateUserTokenStopPropagationInBeforeEvents()
880
    {
881
        $traceableEventDispatcher = $this->getEventDispatcher(
882
            UserEvents::BEFORE_UPDATE_USER_TOKEN,
883
            UserEvents::UPDATE_USER_TOKEN
884
        );
885
886
        $parameters = [
887
            $this->createMock(User::class),
888
            $this->createMock(UserTokenUpdateStruct::class),
889
        ];
890
891
        $updatedUser = $this->createMock(User::class);
892
        $eventUpdatedUser = $this->createMock(User::class);
893
        $innerServiceMock = $this->createMock(UserServiceInterface::class);
894
        $innerServiceMock->method('updateUserToken')->willReturn($updatedUser);
895
896
        $traceableEventDispatcher->addListener(UserEvents::BEFORE_UPDATE_USER_TOKEN, function (BeforeUpdateUserTokenEvent $event) use ($eventUpdatedUser) {
897
            $event->setUpdatedUser($eventUpdatedUser);
898
            $event->stopPropagation();
899
        }, 10);
900
901
        $service = new UserService($innerServiceMock, $traceableEventDispatcher);
902
        $result = $service->updateUserToken(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUserToken() misses a required argument $userTokenUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
903
904
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
905
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
906
907
        $this->assertSame($eventUpdatedUser, $result);
908
        $this->assertSame($calledListeners, [
909
            [UserEvents::BEFORE_UPDATE_USER_TOKEN, 10],
910
        ]);
911
        $this->assertSame($notCalledListeners, [
912
            [UserEvents::UPDATE_USER_TOKEN, 0],
913
            [UserEvents::BEFORE_UPDATE_USER_TOKEN, 0],
914
        ]);
915
    }
916
}
917