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

testUpdatePolicyByRoleDraftStopPropagationInBeforeEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 38

Duplication

Lines 38
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 38
loc 38
rs 9.312
c 0
b 0
f 0
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\RoleService as RoleServiceInterface;
10
use eZ\Publish\API\Repository\Values\User\Limitation\RoleLimitation;
11
use eZ\Publish\API\Repository\Values\User\Policy;
12
use eZ\Publish\API\Repository\Values\User\PolicyCreateStruct;
13
use eZ\Publish\API\Repository\Values\User\PolicyDraft;
14
use eZ\Publish\API\Repository\Values\User\PolicyUpdateStruct;
15
use eZ\Publish\API\Repository\Values\User\Role;
16
use eZ\Publish\API\Repository\Values\User\RoleAssignment;
17
use eZ\Publish\API\Repository\Values\User\RoleCreateStruct;
18
use eZ\Publish\API\Repository\Values\User\RoleDraft;
19
use eZ\Publish\API\Repository\Values\User\RoleUpdateStruct;
20
use eZ\Publish\API\Repository\Values\User\User;
21
use eZ\Publish\API\Repository\Values\User\UserGroup;
22
use eZ\Publish\Core\Event\RoleService;
23
use eZ\Publish\Core\Event\Role\BeforeAddPolicyByRoleDraftEvent;
24
use eZ\Publish\Core\Event\Role\BeforeAddPolicyEvent;
25
use eZ\Publish\Core\Event\Role\BeforeAssignRoleToUserEvent;
26
use eZ\Publish\Core\Event\Role\BeforeAssignRoleToUserGroupEvent;
27
use eZ\Publish\Core\Event\Role\BeforeCreateRoleDraftEvent;
28
use eZ\Publish\Core\Event\Role\BeforeCreateRoleEvent;
29
use eZ\Publish\Core\Event\Role\BeforeDeletePolicyEvent;
30
use eZ\Publish\Core\Event\Role\BeforeDeleteRoleDraftEvent;
31
use eZ\Publish\Core\Event\Role\BeforeDeleteRoleEvent;
32
use eZ\Publish\Core\Event\Role\BeforePublishRoleDraftEvent;
33
use eZ\Publish\Core\Event\Role\BeforeRemovePolicyByRoleDraftEvent;
34
use eZ\Publish\Core\Event\Role\BeforeRemoveRoleAssignmentEvent;
35
use eZ\Publish\Core\Event\Role\BeforeUnassignRoleFromUserEvent;
36
use eZ\Publish\Core\Event\Role\BeforeUnassignRoleFromUserGroupEvent;
37
use eZ\Publish\Core\Event\Role\BeforeUpdatePolicyByRoleDraftEvent;
38
use eZ\Publish\Core\Event\Role\BeforeUpdatePolicyEvent;
39
use eZ\Publish\Core\Event\Role\BeforeUpdateRoleDraftEvent;
40
use eZ\Publish\Core\Event\Role\BeforeUpdateRoleEvent;
41
use eZ\Publish\Core\Event\Role\RoleEvents;
42
43
class RoleServiceTest extends AbstractServiceTest
44
{
45
    public function testDeletePolicyEvents()
46
    {
47
        $traceableEventDispatcher = $this->getEventDispatcher(
48
            RoleEvents::BEFORE_DELETE_POLICY,
49
            RoleEvents::DELETE_POLICY
50
        );
51
52
        $parameters = [
53
            $this->createMock(Policy::class),
54
        ];
55
56
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
57
58
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
59
        $service->deletePolicy(...$parameters);
60
61
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
62
63
        $this->assertSame($calledListeners, [
64
            [RoleEvents::BEFORE_DELETE_POLICY, 0],
65
            [RoleEvents::DELETE_POLICY, 0],
66
        ]);
67
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
68
    }
69
70
    public function testDeletePolicyStopPropagationInBeforeEvents()
71
    {
72
        $traceableEventDispatcher = $this->getEventDispatcher(
73
            RoleEvents::BEFORE_DELETE_POLICY,
74
            RoleEvents::DELETE_POLICY
75
        );
76
77
        $parameters = [
78
            $this->createMock(Policy::class),
79
        ];
80
81
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
82
83
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_DELETE_POLICY, function (BeforeDeletePolicyEvent $event) {
84
            $event->stopPropagation();
85
        }, 10);
86
87
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
88
        $service->deletePolicy(...$parameters);
89
90
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
91
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
92
93
        $this->assertSame($calledListeners, [
94
            [RoleEvents::BEFORE_DELETE_POLICY, 10],
95
        ]);
96
        $this->assertSame($notCalledListeners, [
97
            [RoleEvents::DELETE_POLICY, 0],
98
            [RoleEvents::BEFORE_DELETE_POLICY, 0],
99
        ]);
100
    }
101
102 View Code Duplication
    public function testUpdateRoleEvents()
103
    {
104
        $traceableEventDispatcher = $this->getEventDispatcher(
105
            RoleEvents::BEFORE_UPDATE_ROLE,
106
            RoleEvents::UPDATE_ROLE
107
        );
108
109
        $parameters = [
110
            $this->createMock(Role::class),
111
            $this->createMock(RoleUpdateStruct::class),
112
        ];
113
114
        $updatedRole = $this->createMock(Role::class);
115
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
116
        $innerServiceMock->method('updateRole')->willReturn($updatedRole);
117
118
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
119
        $result = $service->updateRole(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRole() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
120
121
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
122
123
        $this->assertSame($updatedRole, $result);
124
        $this->assertSame($calledListeners, [
125
            [RoleEvents::BEFORE_UPDATE_ROLE, 0],
126
            [RoleEvents::UPDATE_ROLE, 0],
127
        ]);
128
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
129
    }
130
131 View Code Duplication
    public function testReturnUpdateRoleResultInBeforeEvents()
132
    {
133
        $traceableEventDispatcher = $this->getEventDispatcher(
134
            RoleEvents::BEFORE_UPDATE_ROLE,
135
            RoleEvents::UPDATE_ROLE
136
        );
137
138
        $parameters = [
139
            $this->createMock(Role::class),
140
            $this->createMock(RoleUpdateStruct::class),
141
        ];
142
143
        $updatedRole = $this->createMock(Role::class);
144
        $eventUpdatedRole = $this->createMock(Role::class);
145
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
146
        $innerServiceMock->method('updateRole')->willReturn($updatedRole);
147
148
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_ROLE, function (BeforeUpdateRoleEvent $event) use ($eventUpdatedRole) {
149
            $event->setUpdatedRole($eventUpdatedRole);
150
        }, 10);
151
152
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
153
        $result = $service->updateRole(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRole() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
154
155
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
156
157
        $this->assertSame($eventUpdatedRole, $result);
158
        $this->assertSame($calledListeners, [
159
            [RoleEvents::BEFORE_UPDATE_ROLE, 10],
160
            [RoleEvents::BEFORE_UPDATE_ROLE, 0],
161
            [RoleEvents::UPDATE_ROLE, 0],
162
        ]);
163
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
164
    }
165
166 View Code Duplication
    public function testUpdateRoleStopPropagationInBeforeEvents()
167
    {
168
        $traceableEventDispatcher = $this->getEventDispatcher(
169
            RoleEvents::BEFORE_UPDATE_ROLE,
170
            RoleEvents::UPDATE_ROLE
171
        );
172
173
        $parameters = [
174
            $this->createMock(Role::class),
175
            $this->createMock(RoleUpdateStruct::class),
176
        ];
177
178
        $updatedRole = $this->createMock(Role::class);
179
        $eventUpdatedRole = $this->createMock(Role::class);
180
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
181
        $innerServiceMock->method('updateRole')->willReturn($updatedRole);
182
183
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_ROLE, function (BeforeUpdateRoleEvent $event) use ($eventUpdatedRole) {
184
            $event->setUpdatedRole($eventUpdatedRole);
185
            $event->stopPropagation();
186
        }, 10);
187
188
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
189
        $result = $service->updateRole(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRole() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
190
191
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
192
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
193
194
        $this->assertSame($eventUpdatedRole, $result);
195
        $this->assertSame($calledListeners, [
196
            [RoleEvents::BEFORE_UPDATE_ROLE, 10],
197
        ]);
198
        $this->assertSame($notCalledListeners, [
199
            [RoleEvents::UPDATE_ROLE, 0],
200
            [RoleEvents::BEFORE_UPDATE_ROLE, 0],
201
        ]);
202
    }
203
204
    public function testPublishRoleDraftEvents()
205
    {
206
        $traceableEventDispatcher = $this->getEventDispatcher(
207
            RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT,
208
            RoleEvents::PUBLISH_ROLE_DRAFT
209
        );
210
211
        $parameters = [
212
            $this->createMock(RoleDraft::class),
213
        ];
214
215
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
216
217
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
218
        $service->publishRoleDraft(...$parameters);
219
220
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
221
222
        $this->assertSame($calledListeners, [
223
            [RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT, 0],
224
            [RoleEvents::PUBLISH_ROLE_DRAFT, 0],
225
        ]);
226
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
227
    }
228
229
    public function testPublishRoleDraftStopPropagationInBeforeEvents()
230
    {
231
        $traceableEventDispatcher = $this->getEventDispatcher(
232
            RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT,
233
            RoleEvents::PUBLISH_ROLE_DRAFT
234
        );
235
236
        $parameters = [
237
            $this->createMock(RoleDraft::class),
238
        ];
239
240
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
241
242
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT, function (BeforePublishRoleDraftEvent $event) {
243
            $event->stopPropagation();
244
        }, 10);
245
246
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
247
        $service->publishRoleDraft(...$parameters);
248
249
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
250
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
251
252
        $this->assertSame($calledListeners, [
253
            [RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT, 10],
254
        ]);
255
        $this->assertSame($notCalledListeners, [
256
            [RoleEvents::PUBLISH_ROLE_DRAFT, 0],
257
            [RoleEvents::BEFORE_PUBLISH_ROLE_DRAFT, 0],
258
        ]);
259
    }
260
261 View Code Duplication
    public function testAssignRoleToUserEvents()
262
    {
263
        $traceableEventDispatcher = $this->getEventDispatcher(
264
            RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER,
265
            RoleEvents::ASSIGN_ROLE_TO_USER
266
        );
267
268
        $parameters = [
269
            $this->createMock(Role::class),
270
            $this->createMock(User::class),
271
            $this->createMock(RoleLimitation::class),
272
        ];
273
274
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
275
276
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
277
        $service->assignRoleToUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignRoleToUser() misses a required argument $user.

This check looks for function calls that miss required arguments.

Loading history...
278
279
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
280
281
        $this->assertSame($calledListeners, [
282
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER, 0],
283
            [RoleEvents::ASSIGN_ROLE_TO_USER, 0],
284
        ]);
285
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
286
    }
287
288 View Code Duplication
    public function testAssignRoleToUserStopPropagationInBeforeEvents()
289
    {
290
        $traceableEventDispatcher = $this->getEventDispatcher(
291
            RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER,
292
            RoleEvents::ASSIGN_ROLE_TO_USER
293
        );
294
295
        $parameters = [
296
            $this->createMock(Role::class),
297
            $this->createMock(User::class),
298
            $this->createMock(RoleLimitation::class),
299
        ];
300
301
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
302
303
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER, function (BeforeAssignRoleToUserEvent $event) {
304
            $event->stopPropagation();
305
        }, 10);
306
307
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
308
        $service->assignRoleToUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignRoleToUser() misses a required argument $user.

This check looks for function calls that miss required arguments.

Loading history...
309
310
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
311
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
312
313
        $this->assertSame($calledListeners, [
314
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER, 10],
315
        ]);
316
        $this->assertSame($notCalledListeners, [
317
            [RoleEvents::ASSIGN_ROLE_TO_USER, 0],
318
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER, 0],
319
        ]);
320
    }
321
322 View Code Duplication
    public function testAddPolicyEvents()
323
    {
324
        $traceableEventDispatcher = $this->getEventDispatcher(
325
            RoleEvents::BEFORE_ADD_POLICY,
326
            RoleEvents::ADD_POLICY
327
        );
328
329
        $parameters = [
330
            $this->createMock(Role::class),
331
            $this->createMock(PolicyCreateStruct::class),
332
        ];
333
334
        $updatedRole = $this->createMock(Role::class);
335
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
336
        $innerServiceMock->method('addPolicy')->willReturn($updatedRole);
337
338
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
339
        $result = $service->addPolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicy() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
340
341
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
342
343
        $this->assertSame($updatedRole, $result);
344
        $this->assertSame($calledListeners, [
345
            [RoleEvents::BEFORE_ADD_POLICY, 0],
346
            [RoleEvents::ADD_POLICY, 0],
347
        ]);
348
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
349
    }
350
351 View Code Duplication
    public function testReturnAddPolicyResultInBeforeEvents()
352
    {
353
        $traceableEventDispatcher = $this->getEventDispatcher(
354
            RoleEvents::BEFORE_ADD_POLICY,
355
            RoleEvents::ADD_POLICY
356
        );
357
358
        $parameters = [
359
            $this->createMock(Role::class),
360
            $this->createMock(PolicyCreateStruct::class),
361
        ];
362
363
        $updatedRole = $this->createMock(Role::class);
364
        $eventUpdatedRole = $this->createMock(Role::class);
365
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
366
        $innerServiceMock->method('addPolicy')->willReturn($updatedRole);
367
368
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ADD_POLICY, function (BeforeAddPolicyEvent $event) use ($eventUpdatedRole) {
369
            $event->setUpdatedRole($eventUpdatedRole);
370
        }, 10);
371
372
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
373
        $result = $service->addPolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicy() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
374
375
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
376
377
        $this->assertSame($eventUpdatedRole, $result);
378
        $this->assertSame($calledListeners, [
379
            [RoleEvents::BEFORE_ADD_POLICY, 10],
380
            [RoleEvents::BEFORE_ADD_POLICY, 0],
381
            [RoleEvents::ADD_POLICY, 0],
382
        ]);
383
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
384
    }
385
386 View Code Duplication
    public function testAddPolicyStopPropagationInBeforeEvents()
387
    {
388
        $traceableEventDispatcher = $this->getEventDispatcher(
389
            RoleEvents::BEFORE_ADD_POLICY,
390
            RoleEvents::ADD_POLICY
391
        );
392
393
        $parameters = [
394
            $this->createMock(Role::class),
395
            $this->createMock(PolicyCreateStruct::class),
396
        ];
397
398
        $updatedRole = $this->createMock(Role::class);
399
        $eventUpdatedRole = $this->createMock(Role::class);
400
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
401
        $innerServiceMock->method('addPolicy')->willReturn($updatedRole);
402
403
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ADD_POLICY, function (BeforeAddPolicyEvent $event) use ($eventUpdatedRole) {
404
            $event->setUpdatedRole($eventUpdatedRole);
405
            $event->stopPropagation();
406
        }, 10);
407
408
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
409
        $result = $service->addPolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicy() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
410
411
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
412
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
413
414
        $this->assertSame($eventUpdatedRole, $result);
415
        $this->assertSame($calledListeners, [
416
            [RoleEvents::BEFORE_ADD_POLICY, 10],
417
        ]);
418
        $this->assertSame($notCalledListeners, [
419
            [RoleEvents::ADD_POLICY, 0],
420
            [RoleEvents::BEFORE_ADD_POLICY, 0],
421
        ]);
422
    }
423
424 View Code Duplication
    public function testUpdateRoleDraftEvents()
425
    {
426
        $traceableEventDispatcher = $this->getEventDispatcher(
427
            RoleEvents::BEFORE_UPDATE_ROLE_DRAFT,
428
            RoleEvents::UPDATE_ROLE_DRAFT
429
        );
430
431
        $parameters = [
432
            $this->createMock(RoleDraft::class),
433
            $this->createMock(RoleUpdateStruct::class),
434
        ];
435
436
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
437
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
438
        $innerServiceMock->method('updateRoleDraft')->willReturn($updatedRoleDraft);
439
440
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
441
        $result = $service->updateRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRoleDraft() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
442
443
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
444
445
        $this->assertSame($updatedRoleDraft, $result);
446
        $this->assertSame($calledListeners, [
447
            [RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, 0],
448
            [RoleEvents::UPDATE_ROLE_DRAFT, 0],
449
        ]);
450
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
451
    }
452
453 View Code Duplication
    public function testReturnUpdateRoleDraftResultInBeforeEvents()
454
    {
455
        $traceableEventDispatcher = $this->getEventDispatcher(
456
            RoleEvents::BEFORE_UPDATE_ROLE_DRAFT,
457
            RoleEvents::UPDATE_ROLE_DRAFT
458
        );
459
460
        $parameters = [
461
            $this->createMock(RoleDraft::class),
462
            $this->createMock(RoleUpdateStruct::class),
463
        ];
464
465
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
466
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
467
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
468
        $innerServiceMock->method('updateRoleDraft')->willReturn($updatedRoleDraft);
469
470
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, function (BeforeUpdateRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
471
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
472
        }, 10);
473
474
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
475
        $result = $service->updateRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRoleDraft() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
476
477
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
478
479
        $this->assertSame($eventUpdatedRoleDraft, $result);
480
        $this->assertSame($calledListeners, [
481
            [RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, 10],
482
            [RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, 0],
483
            [RoleEvents::UPDATE_ROLE_DRAFT, 0],
484
        ]);
485
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
486
    }
487
488 View Code Duplication
    public function testUpdateRoleDraftStopPropagationInBeforeEvents()
489
    {
490
        $traceableEventDispatcher = $this->getEventDispatcher(
491
            RoleEvents::BEFORE_UPDATE_ROLE_DRAFT,
492
            RoleEvents::UPDATE_ROLE_DRAFT
493
        );
494
495
        $parameters = [
496
            $this->createMock(RoleDraft::class),
497
            $this->createMock(RoleUpdateStruct::class),
498
        ];
499
500
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
501
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
502
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
503
        $innerServiceMock->method('updateRoleDraft')->willReturn($updatedRoleDraft);
504
505
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, function (BeforeUpdateRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
506
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
507
            $event->stopPropagation();
508
        }, 10);
509
510
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
511
        $result = $service->updateRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateRoleDraft() misses a required argument $roleUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
512
513
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
514
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
515
516
        $this->assertSame($eventUpdatedRoleDraft, $result);
517
        $this->assertSame($calledListeners, [
518
            [RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, 10],
519
        ]);
520
        $this->assertSame($notCalledListeners, [
521
            [RoleEvents::UPDATE_ROLE_DRAFT, 0],
522
            [RoleEvents::BEFORE_UPDATE_ROLE_DRAFT, 0],
523
        ]);
524
    }
525
526 View Code Duplication
    public function testAssignRoleToUserGroupEvents()
527
    {
528
        $traceableEventDispatcher = $this->getEventDispatcher(
529
            RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP,
530
            RoleEvents::ASSIGN_ROLE_TO_USER_GROUP
531
        );
532
533
        $parameters = [
534
            $this->createMock(Role::class),
535
            $this->createMock(UserGroup::class),
536
            $this->createMock(RoleLimitation::class),
537
        ];
538
539
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
540
541
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
542
        $service->assignRoleToUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignRoleToUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
543
544
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
545
546
        $this->assertSame($calledListeners, [
547
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP, 0],
548
            [RoleEvents::ASSIGN_ROLE_TO_USER_GROUP, 0],
549
        ]);
550
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
551
    }
552
553 View Code Duplication
    public function testAssignRoleToUserGroupStopPropagationInBeforeEvents()
554
    {
555
        $traceableEventDispatcher = $this->getEventDispatcher(
556
            RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP,
557
            RoleEvents::ASSIGN_ROLE_TO_USER_GROUP
558
        );
559
560
        $parameters = [
561
            $this->createMock(Role::class),
562
            $this->createMock(UserGroup::class),
563
            $this->createMock(RoleLimitation::class),
564
        ];
565
566
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
567
568
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP, function (BeforeAssignRoleToUserGroupEvent $event) {
569
            $event->stopPropagation();
570
        }, 10);
571
572
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
573
        $service->assignRoleToUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to assignRoleToUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
574
575
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
576
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
577
578
        $this->assertSame($calledListeners, [
579
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP, 10],
580
        ]);
581
        $this->assertSame($notCalledListeners, [
582
            [RoleEvents::ASSIGN_ROLE_TO_USER_GROUP, 0],
583
            [RoleEvents::BEFORE_ASSIGN_ROLE_TO_USER_GROUP, 0],
584
        ]);
585
    }
586
587
    public function testUnassignRoleFromUserEvents()
588
    {
589
        $traceableEventDispatcher = $this->getEventDispatcher(
590
            RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER,
591
            RoleEvents::UNASSIGN_ROLE_FROM_USER
592
        );
593
594
        $parameters = [
595
            $this->createMock(Role::class),
596
            $this->createMock(User::class),
597
        ];
598
599
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
600
601
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
602
        $service->unassignRoleFromUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unassignRoleFromUser() misses a required argument $user.

This check looks for function calls that miss required arguments.

Loading history...
603
604
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
605
606
        $this->assertSame($calledListeners, [
607
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER, 0],
608
            [RoleEvents::UNASSIGN_ROLE_FROM_USER, 0],
609
        ]);
610
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
611
    }
612
613 View Code Duplication
    public function testUnassignRoleFromUserStopPropagationInBeforeEvents()
614
    {
615
        $traceableEventDispatcher = $this->getEventDispatcher(
616
            RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER,
617
            RoleEvents::UNASSIGN_ROLE_FROM_USER
618
        );
619
620
        $parameters = [
621
            $this->createMock(Role::class),
622
            $this->createMock(User::class),
623
        ];
624
625
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
626
627
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER, function (BeforeUnassignRoleFromUserEvent $event) {
628
            $event->stopPropagation();
629
        }, 10);
630
631
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
632
        $service->unassignRoleFromUser(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unassignRoleFromUser() misses a required argument $user.

This check looks for function calls that miss required arguments.

Loading history...
633
634
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
635
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
636
637
        $this->assertSame($calledListeners, [
638
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER, 10],
639
        ]);
640
        $this->assertSame($notCalledListeners, [
641
            [RoleEvents::UNASSIGN_ROLE_FROM_USER, 0],
642
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER, 0],
643
        ]);
644
    }
645
646 View Code Duplication
    public function testUpdatePolicyByRoleDraftEvents()
647
    {
648
        $traceableEventDispatcher = $this->getEventDispatcher(
649
            RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT,
650
            RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT
651
        );
652
653
        $parameters = [
654
            $this->createMock(RoleDraft::class),
655
            $this->createMock(PolicyDraft::class),
656
            $this->createMock(PolicyUpdateStruct::class),
657
        ];
658
659
        $updatedPolicyDraft = $this->createMock(PolicyDraft::class);
660
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
661
        $innerServiceMock->method('updatePolicyByRoleDraft')->willReturn($updatedPolicyDraft);
662
663
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
664
        $result = $service->updatePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicyByRoleDraft() misses some required arguments starting with $policy.
Loading history...
665
666
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
667
668
        $this->assertSame($updatedPolicyDraft, $result);
669
        $this->assertSame($calledListeners, [
670
            [RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, 0],
671
            [RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT, 0],
672
        ]);
673
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
674
    }
675
676 View Code Duplication
    public function testReturnUpdatePolicyByRoleDraftResultInBeforeEvents()
677
    {
678
        $traceableEventDispatcher = $this->getEventDispatcher(
679
            RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT,
680
            RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT
681
        );
682
683
        $parameters = [
684
            $this->createMock(RoleDraft::class),
685
            $this->createMock(PolicyDraft::class),
686
            $this->createMock(PolicyUpdateStruct::class),
687
        ];
688
689
        $updatedPolicyDraft = $this->createMock(PolicyDraft::class);
690
        $eventUpdatedPolicyDraft = $this->createMock(PolicyDraft::class);
691
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
692
        $innerServiceMock->method('updatePolicyByRoleDraft')->willReturn($updatedPolicyDraft);
693
694
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, function (BeforeUpdatePolicyByRoleDraftEvent $event) use ($eventUpdatedPolicyDraft) {
695
            $event->setUpdatedPolicyDraft($eventUpdatedPolicyDraft);
696
        }, 10);
697
698
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
699
        $result = $service->updatePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicyByRoleDraft() misses some required arguments starting with $policy.
Loading history...
700
701
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
702
703
        $this->assertSame($eventUpdatedPolicyDraft, $result);
704
        $this->assertSame($calledListeners, [
705
            [RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, 10],
706
            [RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, 0],
707
            [RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT, 0],
708
        ]);
709
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
710
    }
711
712 View Code Duplication
    public function testUpdatePolicyByRoleDraftStopPropagationInBeforeEvents()
713
    {
714
        $traceableEventDispatcher = $this->getEventDispatcher(
715
            RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT,
716
            RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT
717
        );
718
719
        $parameters = [
720
            $this->createMock(RoleDraft::class),
721
            $this->createMock(PolicyDraft::class),
722
            $this->createMock(PolicyUpdateStruct::class),
723
        ];
724
725
        $updatedPolicyDraft = $this->createMock(PolicyDraft::class);
726
        $eventUpdatedPolicyDraft = $this->createMock(PolicyDraft::class);
727
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
728
        $innerServiceMock->method('updatePolicyByRoleDraft')->willReturn($updatedPolicyDraft);
729
730
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, function (BeforeUpdatePolicyByRoleDraftEvent $event) use ($eventUpdatedPolicyDraft) {
731
            $event->setUpdatedPolicyDraft($eventUpdatedPolicyDraft);
732
            $event->stopPropagation();
733
        }, 10);
734
735
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
736
        $result = $service->updatePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicyByRoleDraft() misses some required arguments starting with $policy.
Loading history...
737
738
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
739
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
740
741
        $this->assertSame($eventUpdatedPolicyDraft, $result);
742
        $this->assertSame($calledListeners, [
743
            [RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, 10],
744
        ]);
745
        $this->assertSame($notCalledListeners, [
746
            [RoleEvents::UPDATE_POLICY_BY_ROLE_DRAFT, 0],
747
            [RoleEvents::BEFORE_UPDATE_POLICY_BY_ROLE_DRAFT, 0],
748
        ]);
749
    }
750
751
    public function testCreateRoleEvents()
752
    {
753
        $traceableEventDispatcher = $this->getEventDispatcher(
754
            RoleEvents::BEFORE_CREATE_ROLE,
755
            RoleEvents::CREATE_ROLE
756
        );
757
758
        $parameters = [
759
            $this->createMock(RoleCreateStruct::class),
760
        ];
761
762
        $roleDraft = $this->createMock(RoleDraft::class);
763
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
764
        $innerServiceMock->method('createRole')->willReturn($roleDraft);
765
766
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
767
        $result = $service->createRole(...$parameters);
768
769
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
770
771
        $this->assertSame($roleDraft, $result);
772
        $this->assertSame($calledListeners, [
773
            [RoleEvents::BEFORE_CREATE_ROLE, 0],
774
            [RoleEvents::CREATE_ROLE, 0],
775
        ]);
776
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
777
    }
778
779
    public function testReturnCreateRoleResultInBeforeEvents()
780
    {
781
        $traceableEventDispatcher = $this->getEventDispatcher(
782
            RoleEvents::BEFORE_CREATE_ROLE,
783
            RoleEvents::CREATE_ROLE
784
        );
785
786
        $parameters = [
787
            $this->createMock(RoleCreateStruct::class),
788
        ];
789
790
        $roleDraft = $this->createMock(RoleDraft::class);
791
        $eventRoleDraft = $this->createMock(RoleDraft::class);
792
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
793
        $innerServiceMock->method('createRole')->willReturn($roleDraft);
794
795
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_CREATE_ROLE, function (BeforeCreateRoleEvent $event) use ($eventRoleDraft) {
796
            $event->setRoleDraft($eventRoleDraft);
797
        }, 10);
798
799
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
800
        $result = $service->createRole(...$parameters);
801
802
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
803
804
        $this->assertSame($eventRoleDraft, $result);
805
        $this->assertSame($calledListeners, [
806
            [RoleEvents::BEFORE_CREATE_ROLE, 10],
807
            [RoleEvents::BEFORE_CREATE_ROLE, 0],
808
            [RoleEvents::CREATE_ROLE, 0],
809
        ]);
810
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
811
    }
812
813
    public function testCreateRoleStopPropagationInBeforeEvents()
814
    {
815
        $traceableEventDispatcher = $this->getEventDispatcher(
816
            RoleEvents::BEFORE_CREATE_ROLE,
817
            RoleEvents::CREATE_ROLE
818
        );
819
820
        $parameters = [
821
            $this->createMock(RoleCreateStruct::class),
822
        ];
823
824
        $roleDraft = $this->createMock(RoleDraft::class);
825
        $eventRoleDraft = $this->createMock(RoleDraft::class);
826
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
827
        $innerServiceMock->method('createRole')->willReturn($roleDraft);
828
829
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_CREATE_ROLE, function (BeforeCreateRoleEvent $event) use ($eventRoleDraft) {
830
            $event->setRoleDraft($eventRoleDraft);
831
            $event->stopPropagation();
832
        }, 10);
833
834
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
835
        $result = $service->createRole(...$parameters);
836
837
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
838
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
839
840
        $this->assertSame($eventRoleDraft, $result);
841
        $this->assertSame($calledListeners, [
842
            [RoleEvents::BEFORE_CREATE_ROLE, 10],
843
        ]);
844
        $this->assertSame($notCalledListeners, [
845
            [RoleEvents::CREATE_ROLE, 0],
846
            [RoleEvents::BEFORE_CREATE_ROLE, 0],
847
        ]);
848
    }
849
850 View Code Duplication
    public function testRemovePolicyByRoleDraftEvents()
851
    {
852
        $traceableEventDispatcher = $this->getEventDispatcher(
853
            RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT,
854
            RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT
855
        );
856
857
        $parameters = [
858
            $this->createMock(RoleDraft::class),
859
            $this->createMock(PolicyDraft::class),
860
        ];
861
862
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
863
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
864
        $innerServiceMock->method('removePolicyByRoleDraft')->willReturn($updatedRoleDraft);
865
866
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
867
        $result = $service->removePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to removePolicyByRoleDraft() misses a required argument $policyDraft.

This check looks for function calls that miss required arguments.

Loading history...
868
869
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
870
871
        $this->assertSame($updatedRoleDraft, $result);
872
        $this->assertSame($calledListeners, [
873
            [RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, 0],
874
            [RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT, 0],
875
        ]);
876
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
877
    }
878
879 View Code Duplication
    public function testReturnRemovePolicyByRoleDraftResultInBeforeEvents()
880
    {
881
        $traceableEventDispatcher = $this->getEventDispatcher(
882
            RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT,
883
            RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT
884
        );
885
886
        $parameters = [
887
            $this->createMock(RoleDraft::class),
888
            $this->createMock(PolicyDraft::class),
889
        ];
890
891
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
892
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
893
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
894
        $innerServiceMock->method('removePolicyByRoleDraft')->willReturn($updatedRoleDraft);
895
896
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, function (BeforeRemovePolicyByRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
897
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
898
        }, 10);
899
900
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
901
        $result = $service->removePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to removePolicyByRoleDraft() misses a required argument $policyDraft.

This check looks for function calls that miss required arguments.

Loading history...
902
903
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
904
905
        $this->assertSame($eventUpdatedRoleDraft, $result);
906
        $this->assertSame($calledListeners, [
907
            [RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, 10],
908
            [RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, 0],
909
            [RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT, 0],
910
        ]);
911
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
912
    }
913
914 View Code Duplication
    public function testRemovePolicyByRoleDraftStopPropagationInBeforeEvents()
915
    {
916
        $traceableEventDispatcher = $this->getEventDispatcher(
917
            RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT,
918
            RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT
919
        );
920
921
        $parameters = [
922
            $this->createMock(RoleDraft::class),
923
            $this->createMock(PolicyDraft::class),
924
        ];
925
926
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
927
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
928
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
929
        $innerServiceMock->method('removePolicyByRoleDraft')->willReturn($updatedRoleDraft);
930
931
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, function (BeforeRemovePolicyByRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
932
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
933
            $event->stopPropagation();
934
        }, 10);
935
936
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
937
        $result = $service->removePolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to removePolicyByRoleDraft() misses a required argument $policyDraft.

This check looks for function calls that miss required arguments.

Loading history...
938
939
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
940
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
941
942
        $this->assertSame($eventUpdatedRoleDraft, $result);
943
        $this->assertSame($calledListeners, [
944
            [RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, 10],
945
        ]);
946
        $this->assertSame($notCalledListeners, [
947
            [RoleEvents::REMOVE_POLICY_BY_ROLE_DRAFT, 0],
948
            [RoleEvents::BEFORE_REMOVE_POLICY_BY_ROLE_DRAFT, 0],
949
        ]);
950
    }
951
952 View Code Duplication
    public function testAddPolicyByRoleDraftEvents()
953
    {
954
        $traceableEventDispatcher = $this->getEventDispatcher(
955
            RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT,
956
            RoleEvents::ADD_POLICY_BY_ROLE_DRAFT
957
        );
958
959
        $parameters = [
960
            $this->createMock(RoleDraft::class),
961
            $this->createMock(PolicyCreateStruct::class),
962
        ];
963
964
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
965
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
966
        $innerServiceMock->method('addPolicyByRoleDraft')->willReturn($updatedRoleDraft);
967
968
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
969
        $result = $service->addPolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicyByRoleDraft() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
970
971
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
972
973
        $this->assertSame($updatedRoleDraft, $result);
974
        $this->assertSame($calledListeners, [
975
            [RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, 0],
976
            [RoleEvents::ADD_POLICY_BY_ROLE_DRAFT, 0],
977
        ]);
978
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
979
    }
980
981 View Code Duplication
    public function testReturnAddPolicyByRoleDraftResultInBeforeEvents()
982
    {
983
        $traceableEventDispatcher = $this->getEventDispatcher(
984
            RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT,
985
            RoleEvents::ADD_POLICY_BY_ROLE_DRAFT
986
        );
987
988
        $parameters = [
989
            $this->createMock(RoleDraft::class),
990
            $this->createMock(PolicyCreateStruct::class),
991
        ];
992
993
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
994
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
995
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
996
        $innerServiceMock->method('addPolicyByRoleDraft')->willReturn($updatedRoleDraft);
997
998
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, function (BeforeAddPolicyByRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
999
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
1000
        }, 10);
1001
1002
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1003
        $result = $service->addPolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicyByRoleDraft() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
1004
1005
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1006
1007
        $this->assertSame($eventUpdatedRoleDraft, $result);
1008
        $this->assertSame($calledListeners, [
1009
            [RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, 10],
1010
            [RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, 0],
1011
            [RoleEvents::ADD_POLICY_BY_ROLE_DRAFT, 0],
1012
        ]);
1013
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1014
    }
1015
1016 View Code Duplication
    public function testAddPolicyByRoleDraftStopPropagationInBeforeEvents()
1017
    {
1018
        $traceableEventDispatcher = $this->getEventDispatcher(
1019
            RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT,
1020
            RoleEvents::ADD_POLICY_BY_ROLE_DRAFT
1021
        );
1022
1023
        $parameters = [
1024
            $this->createMock(RoleDraft::class),
1025
            $this->createMock(PolicyCreateStruct::class),
1026
        ];
1027
1028
        $updatedRoleDraft = $this->createMock(RoleDraft::class);
1029
        $eventUpdatedRoleDraft = $this->createMock(RoleDraft::class);
1030
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1031
        $innerServiceMock->method('addPolicyByRoleDraft')->willReturn($updatedRoleDraft);
1032
1033
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, function (BeforeAddPolicyByRoleDraftEvent $event) use ($eventUpdatedRoleDraft) {
1034
            $event->setUpdatedRoleDraft($eventUpdatedRoleDraft);
1035
            $event->stopPropagation();
1036
        }, 10);
1037
1038
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1039
        $result = $service->addPolicyByRoleDraft(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addPolicyByRoleDraft() misses a required argument $policyCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
1040
1041
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1042
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1043
1044
        $this->assertSame($eventUpdatedRoleDraft, $result);
1045
        $this->assertSame($calledListeners, [
1046
            [RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, 10],
1047
        ]);
1048
        $this->assertSame($notCalledListeners, [
1049
            [RoleEvents::ADD_POLICY_BY_ROLE_DRAFT, 0],
1050
            [RoleEvents::BEFORE_ADD_POLICY_BY_ROLE_DRAFT, 0],
1051
        ]);
1052
    }
1053
1054
    public function testDeleteRoleEvents()
1055
    {
1056
        $traceableEventDispatcher = $this->getEventDispatcher(
1057
            RoleEvents::BEFORE_DELETE_ROLE,
1058
            RoleEvents::DELETE_ROLE
1059
        );
1060
1061
        $parameters = [
1062
            $this->createMock(Role::class),
1063
        ];
1064
1065
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1066
1067
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1068
        $service->deleteRole(...$parameters);
1069
1070
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1071
1072
        $this->assertSame($calledListeners, [
1073
            [RoleEvents::BEFORE_DELETE_ROLE, 0],
1074
            [RoleEvents::DELETE_ROLE, 0],
1075
        ]);
1076
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1077
    }
1078
1079
    public function testDeleteRoleStopPropagationInBeforeEvents()
1080
    {
1081
        $traceableEventDispatcher = $this->getEventDispatcher(
1082
            RoleEvents::BEFORE_DELETE_ROLE,
1083
            RoleEvents::DELETE_ROLE
1084
        );
1085
1086
        $parameters = [
1087
            $this->createMock(Role::class),
1088
        ];
1089
1090
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1091
1092
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_DELETE_ROLE, function (BeforeDeleteRoleEvent $event) {
1093
            $event->stopPropagation();
1094
        }, 10);
1095
1096
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1097
        $service->deleteRole(...$parameters);
1098
1099
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1100
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1101
1102
        $this->assertSame($calledListeners, [
1103
            [RoleEvents::BEFORE_DELETE_ROLE, 10],
1104
        ]);
1105
        $this->assertSame($notCalledListeners, [
1106
            [RoleEvents::DELETE_ROLE, 0],
1107
            [RoleEvents::BEFORE_DELETE_ROLE, 0],
1108
        ]);
1109
    }
1110
1111
    public function testDeleteRoleDraftEvents()
1112
    {
1113
        $traceableEventDispatcher = $this->getEventDispatcher(
1114
            RoleEvents::BEFORE_DELETE_ROLE_DRAFT,
1115
            RoleEvents::DELETE_ROLE_DRAFT
1116
        );
1117
1118
        $parameters = [
1119
            $this->createMock(RoleDraft::class),
1120
        ];
1121
1122
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1123
1124
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1125
        $service->deleteRoleDraft(...$parameters);
1126
1127
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1128
1129
        $this->assertSame($calledListeners, [
1130
            [RoleEvents::BEFORE_DELETE_ROLE_DRAFT, 0],
1131
            [RoleEvents::DELETE_ROLE_DRAFT, 0],
1132
        ]);
1133
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1134
    }
1135
1136
    public function testDeleteRoleDraftStopPropagationInBeforeEvents()
1137
    {
1138
        $traceableEventDispatcher = $this->getEventDispatcher(
1139
            RoleEvents::BEFORE_DELETE_ROLE_DRAFT,
1140
            RoleEvents::DELETE_ROLE_DRAFT
1141
        );
1142
1143
        $parameters = [
1144
            $this->createMock(RoleDraft::class),
1145
        ];
1146
1147
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1148
1149
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_DELETE_ROLE_DRAFT, function (BeforeDeleteRoleDraftEvent $event) {
1150
            $event->stopPropagation();
1151
        }, 10);
1152
1153
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1154
        $service->deleteRoleDraft(...$parameters);
1155
1156
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1157
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1158
1159
        $this->assertSame($calledListeners, [
1160
            [RoleEvents::BEFORE_DELETE_ROLE_DRAFT, 10],
1161
        ]);
1162
        $this->assertSame($notCalledListeners, [
1163
            [RoleEvents::DELETE_ROLE_DRAFT, 0],
1164
            [RoleEvents::BEFORE_DELETE_ROLE_DRAFT, 0],
1165
        ]);
1166
    }
1167
1168
    public function testRemoveRoleAssignmentEvents()
1169
    {
1170
        $traceableEventDispatcher = $this->getEventDispatcher(
1171
            RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT,
1172
            RoleEvents::REMOVE_ROLE_ASSIGNMENT
1173
        );
1174
1175
        $parameters = [
1176
            $this->createMock(RoleAssignment::class),
1177
        ];
1178
1179
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1180
1181
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1182
        $service->removeRoleAssignment(...$parameters);
1183
1184
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1185
1186
        $this->assertSame($calledListeners, [
1187
            [RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT, 0],
1188
            [RoleEvents::REMOVE_ROLE_ASSIGNMENT, 0],
1189
        ]);
1190
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1191
    }
1192
1193
    public function testRemoveRoleAssignmentStopPropagationInBeforeEvents()
1194
    {
1195
        $traceableEventDispatcher = $this->getEventDispatcher(
1196
            RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT,
1197
            RoleEvents::REMOVE_ROLE_ASSIGNMENT
1198
        );
1199
1200
        $parameters = [
1201
            $this->createMock(RoleAssignment::class),
1202
        ];
1203
1204
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1205
1206
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT, function (BeforeRemoveRoleAssignmentEvent $event) {
1207
            $event->stopPropagation();
1208
        }, 10);
1209
1210
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1211
        $service->removeRoleAssignment(...$parameters);
1212
1213
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1214
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1215
1216
        $this->assertSame($calledListeners, [
1217
            [RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT, 10],
1218
        ]);
1219
        $this->assertSame($notCalledListeners, [
1220
            [RoleEvents::REMOVE_ROLE_ASSIGNMENT, 0],
1221
            [RoleEvents::BEFORE_REMOVE_ROLE_ASSIGNMENT, 0],
1222
        ]);
1223
    }
1224
1225
    public function testCreateRoleDraftEvents()
1226
    {
1227
        $traceableEventDispatcher = $this->getEventDispatcher(
1228
            RoleEvents::BEFORE_CREATE_ROLE_DRAFT,
1229
            RoleEvents::CREATE_ROLE_DRAFT
1230
        );
1231
1232
        $parameters = [
1233
            $this->createMock(Role::class),
1234
        ];
1235
1236
        $roleDraft = $this->createMock(RoleDraft::class);
1237
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1238
        $innerServiceMock->method('createRoleDraft')->willReturn($roleDraft);
1239
1240
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1241
        $result = $service->createRoleDraft(...$parameters);
1242
1243
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1244
1245
        $this->assertSame($roleDraft, $result);
1246
        $this->assertSame($calledListeners, [
1247
            [RoleEvents::BEFORE_CREATE_ROLE_DRAFT, 0],
1248
            [RoleEvents::CREATE_ROLE_DRAFT, 0],
1249
        ]);
1250
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1251
    }
1252
1253
    public function testReturnCreateRoleDraftResultInBeforeEvents()
1254
    {
1255
        $traceableEventDispatcher = $this->getEventDispatcher(
1256
            RoleEvents::BEFORE_CREATE_ROLE_DRAFT,
1257
            RoleEvents::CREATE_ROLE_DRAFT
1258
        );
1259
1260
        $parameters = [
1261
            $this->createMock(Role::class),
1262
        ];
1263
1264
        $roleDraft = $this->createMock(RoleDraft::class);
1265
        $eventRoleDraft = $this->createMock(RoleDraft::class);
1266
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1267
        $innerServiceMock->method('createRoleDraft')->willReturn($roleDraft);
1268
1269
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_CREATE_ROLE_DRAFT, function (BeforeCreateRoleDraftEvent $event) use ($eventRoleDraft) {
1270
            $event->setRoleDraft($eventRoleDraft);
1271
        }, 10);
1272
1273
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1274
        $result = $service->createRoleDraft(...$parameters);
1275
1276
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1277
1278
        $this->assertSame($eventRoleDraft, $result);
1279
        $this->assertSame($calledListeners, [
1280
            [RoleEvents::BEFORE_CREATE_ROLE_DRAFT, 10],
1281
            [RoleEvents::BEFORE_CREATE_ROLE_DRAFT, 0],
1282
            [RoleEvents::CREATE_ROLE_DRAFT, 0],
1283
        ]);
1284
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1285
    }
1286
1287
    public function testCreateRoleDraftStopPropagationInBeforeEvents()
1288
    {
1289
        $traceableEventDispatcher = $this->getEventDispatcher(
1290
            RoleEvents::BEFORE_CREATE_ROLE_DRAFT,
1291
            RoleEvents::CREATE_ROLE_DRAFT
1292
        );
1293
1294
        $parameters = [
1295
            $this->createMock(Role::class),
1296
        ];
1297
1298
        $roleDraft = $this->createMock(RoleDraft::class);
1299
        $eventRoleDraft = $this->createMock(RoleDraft::class);
1300
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1301
        $innerServiceMock->method('createRoleDraft')->willReturn($roleDraft);
1302
1303
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_CREATE_ROLE_DRAFT, function (BeforeCreateRoleDraftEvent $event) use ($eventRoleDraft) {
1304
            $event->setRoleDraft($eventRoleDraft);
1305
            $event->stopPropagation();
1306
        }, 10);
1307
1308
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1309
        $result = $service->createRoleDraft(...$parameters);
1310
1311
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1312
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1313
1314
        $this->assertSame($eventRoleDraft, $result);
1315
        $this->assertSame($calledListeners, [
1316
            [RoleEvents::BEFORE_CREATE_ROLE_DRAFT, 10],
1317
        ]);
1318
        $this->assertSame($notCalledListeners, [
1319
            [RoleEvents::CREATE_ROLE_DRAFT, 0],
1320
            [RoleEvents::BEFORE_CREATE_ROLE_DRAFT, 0],
1321
        ]);
1322
    }
1323
1324 View Code Duplication
    public function testUpdatePolicyEvents()
1325
    {
1326
        $traceableEventDispatcher = $this->getEventDispatcher(
1327
            RoleEvents::BEFORE_UPDATE_POLICY,
1328
            RoleEvents::UPDATE_POLICY
1329
        );
1330
1331
        $parameters = [
1332
            $this->createMock(Policy::class),
1333
            $this->createMock(PolicyUpdateStruct::class),
1334
        ];
1335
1336
        $updatedPolicy = $this->createMock(Policy::class);
1337
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1338
        $innerServiceMock->method('updatePolicy')->willReturn($updatedPolicy);
1339
1340
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1341
        $result = $service->updatePolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicy() misses a required argument $policyUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
1342
1343
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1344
1345
        $this->assertSame($updatedPolicy, $result);
1346
        $this->assertSame($calledListeners, [
1347
            [RoleEvents::BEFORE_UPDATE_POLICY, 0],
1348
            [RoleEvents::UPDATE_POLICY, 0],
1349
        ]);
1350
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1351
    }
1352
1353 View Code Duplication
    public function testReturnUpdatePolicyResultInBeforeEvents()
1354
    {
1355
        $traceableEventDispatcher = $this->getEventDispatcher(
1356
            RoleEvents::BEFORE_UPDATE_POLICY,
1357
            RoleEvents::UPDATE_POLICY
1358
        );
1359
1360
        $parameters = [
1361
            $this->createMock(Policy::class),
1362
            $this->createMock(PolicyUpdateStruct::class),
1363
        ];
1364
1365
        $updatedPolicy = $this->createMock(Policy::class);
1366
        $eventUpdatedPolicy = $this->createMock(Policy::class);
1367
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1368
        $innerServiceMock->method('updatePolicy')->willReturn($updatedPolicy);
1369
1370
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_POLICY, function (BeforeUpdatePolicyEvent $event) use ($eventUpdatedPolicy) {
1371
            $event->setUpdatedPolicy($eventUpdatedPolicy);
1372
        }, 10);
1373
1374
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1375
        $result = $service->updatePolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicy() misses a required argument $policyUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
1376
1377
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1378
1379
        $this->assertSame($eventUpdatedPolicy, $result);
1380
        $this->assertSame($calledListeners, [
1381
            [RoleEvents::BEFORE_UPDATE_POLICY, 10],
1382
            [RoleEvents::BEFORE_UPDATE_POLICY, 0],
1383
            [RoleEvents::UPDATE_POLICY, 0],
1384
        ]);
1385
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1386
    }
1387
1388 View Code Duplication
    public function testUpdatePolicyStopPropagationInBeforeEvents()
1389
    {
1390
        $traceableEventDispatcher = $this->getEventDispatcher(
1391
            RoleEvents::BEFORE_UPDATE_POLICY,
1392
            RoleEvents::UPDATE_POLICY
1393
        );
1394
1395
        $parameters = [
1396
            $this->createMock(Policy::class),
1397
            $this->createMock(PolicyUpdateStruct::class),
1398
        ];
1399
1400
        $updatedPolicy = $this->createMock(Policy::class);
1401
        $eventUpdatedPolicy = $this->createMock(Policy::class);
1402
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1403
        $innerServiceMock->method('updatePolicy')->willReturn($updatedPolicy);
1404
1405
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UPDATE_POLICY, function (BeforeUpdatePolicyEvent $event) use ($eventUpdatedPolicy) {
1406
            $event->setUpdatedPolicy($eventUpdatedPolicy);
1407
            $event->stopPropagation();
1408
        }, 10);
1409
1410
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1411
        $result = $service->updatePolicy(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updatePolicy() misses a required argument $policyUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
1412
1413
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1414
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1415
1416
        $this->assertSame($eventUpdatedPolicy, $result);
1417
        $this->assertSame($calledListeners, [
1418
            [RoleEvents::BEFORE_UPDATE_POLICY, 10],
1419
        ]);
1420
        $this->assertSame($notCalledListeners, [
1421
            [RoleEvents::UPDATE_POLICY, 0],
1422
            [RoleEvents::BEFORE_UPDATE_POLICY, 0],
1423
        ]);
1424
    }
1425
1426
    public function testUnassignRoleFromUserGroupEvents()
1427
    {
1428
        $traceableEventDispatcher = $this->getEventDispatcher(
1429
            RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP,
1430
            RoleEvents::UNASSIGN_ROLE_FROM_USER_GROUP
1431
        );
1432
1433
        $parameters = [
1434
            $this->createMock(Role::class),
1435
            $this->createMock(UserGroup::class),
1436
        ];
1437
1438
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1439
1440
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1441
        $service->unassignRoleFromUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unassignRoleFromUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
1442
1443
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1444
1445
        $this->assertSame($calledListeners, [
1446
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP, 0],
1447
            [RoleEvents::UNASSIGN_ROLE_FROM_USER_GROUP, 0],
1448
        ]);
1449
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1450
    }
1451
1452 View Code Duplication
    public function testUnassignRoleFromUserGroupStopPropagationInBeforeEvents()
1453
    {
1454
        $traceableEventDispatcher = $this->getEventDispatcher(
1455
            RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP,
1456
            RoleEvents::UNASSIGN_ROLE_FROM_USER_GROUP
1457
        );
1458
1459
        $parameters = [
1460
            $this->createMock(Role::class),
1461
            $this->createMock(UserGroup::class),
1462
        ];
1463
1464
        $innerServiceMock = $this->createMock(RoleServiceInterface::class);
1465
1466
        $traceableEventDispatcher->addListener(RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP, function (BeforeUnassignRoleFromUserGroupEvent $event) {
1467
            $event->stopPropagation();
1468
        }, 10);
1469
1470
        $service = new RoleService($innerServiceMock, $traceableEventDispatcher);
1471
        $service->unassignRoleFromUserGroup(...$parameters);
0 ignored issues
show
Bug introduced by
The call to unassignRoleFromUserGroup() misses a required argument $userGroup.

This check looks for function calls that miss required arguments.

Loading history...
1472
1473
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1474
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1475
1476
        $this->assertSame($calledListeners, [
1477
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP, 10],
1478
        ]);
1479
        $this->assertSame($notCalledListeners, [
1480
            [RoleEvents::UNASSIGN_ROLE_FROM_USER_GROUP, 0],
1481
            [RoleEvents::BEFORE_UNASSIGN_ROLE_FROM_USER_GROUP, 0],
1482
        ]);
1483
    }
1484
}
1485