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

testCreateContentDraftStopPropagationInBeforeEvents()   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\ContentService as ContentServiceInterface;
10
use eZ\Publish\API\Repository\Values\Content\Content;
11
use eZ\Publish\API\Repository\Values\Content\ContentCreateStruct;
12
use eZ\Publish\API\Repository\Values\Content\ContentInfo;
13
use eZ\Publish\API\Repository\Values\Content\ContentMetadataUpdateStruct;
14
use eZ\Publish\API\Repository\Values\Content\ContentUpdateStruct;
15
use eZ\Publish\API\Repository\Values\Content\LocationCreateStruct;
16
use eZ\Publish\API\Repository\Values\Content\Relation;
17
use eZ\Publish\API\Repository\Values\Content\VersionInfo;
18
use eZ\Publish\API\Repository\Values\User\User;
19
use eZ\Publish\Core\Event\ContentService;
20
use eZ\Publish\Core\Event\Content\BeforeAddRelationEvent;
21
use eZ\Publish\Core\Event\Content\BeforeCopyContentEvent;
22
use eZ\Publish\Core\Event\Content\BeforeCreateContentDraftEvent;
23
use eZ\Publish\Core\Event\Content\BeforeCreateContentEvent;
24
use eZ\Publish\Core\Event\Content\BeforeDeleteContentEvent;
25
use eZ\Publish\Core\Event\Content\BeforeDeleteRelationEvent;
26
use eZ\Publish\Core\Event\Content\BeforeDeleteTranslationEvent;
27
use eZ\Publish\Core\Event\Content\BeforeDeleteVersionEvent;
28
use eZ\Publish\Core\Event\Content\BeforeHideContentEvent;
29
use eZ\Publish\Core\Event\Content\BeforePublishVersionEvent;
30
use eZ\Publish\Core\Event\Content\BeforeRevealContentEvent;
31
use eZ\Publish\Core\Event\Content\BeforeUpdateContentEvent;
32
use eZ\Publish\Core\Event\Content\BeforeUpdateContentMetadataEvent;
33
use eZ\Publish\Core\Event\Content\ContentEvents;
34
35
class ContentServiceTest extends AbstractServiceTest
36
{
37
    public function testDeleteContentEvents()
38
    {
39
        $traceableEventDispatcher = $this->getEventDispatcher(
40
            ContentEvents::BEFORE_DELETE_CONTENT,
41
            ContentEvents::DELETE_CONTENT
42
        );
43
44
        $parameters = [
45
            $this->createMock(ContentInfo::class),
46
        ];
47
48
        $locations = [];
49
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
50
        $innerServiceMock->method('deleteContent')->willReturn($locations);
51
52
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
53
        $result = $service->deleteContent(...$parameters);
54
55
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
56
57
        $this->assertSame($locations, $result);
58
        $this->assertSame($calledListeners, [
59
            [ContentEvents::BEFORE_DELETE_CONTENT, 0],
60
            [ContentEvents::DELETE_CONTENT, 0],
61
        ]);
62
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
63
    }
64
65 View Code Duplication
    public function testReturnDeleteContentResultInBeforeEvents()
66
    {
67
        $traceableEventDispatcher = $this->getEventDispatcher(
68
            ContentEvents::BEFORE_DELETE_CONTENT,
69
            ContentEvents::DELETE_CONTENT
70
        );
71
72
        $parameters = [
73
            $this->createMock(ContentInfo::class),
74
        ];
75
76
        $locations = [];
77
        $eventLocations = [];
78
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
79
        $innerServiceMock->method('deleteContent')->willReturn($locations);
80
81
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_DELETE_CONTENT, function (BeforeDeleteContentEvent $event) use ($eventLocations) {
82
            $event->setLocations($eventLocations);
83
        }, 10);
84
85
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
86
        $result = $service->deleteContent(...$parameters);
87
88
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
89
90
        $this->assertSame($eventLocations, $result);
91
        $this->assertSame($calledListeners, [
92
            [ContentEvents::BEFORE_DELETE_CONTENT, 10],
93
            [ContentEvents::BEFORE_DELETE_CONTENT, 0],
94
            [ContentEvents::DELETE_CONTENT, 0],
95
        ]);
96
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
97
    }
98
99 View Code Duplication
    public function testDeleteContentStopPropagationInBeforeEvents()
100
    {
101
        $traceableEventDispatcher = $this->getEventDispatcher(
102
            ContentEvents::BEFORE_DELETE_CONTENT,
103
            ContentEvents::DELETE_CONTENT
104
        );
105
106
        $parameters = [
107
            $this->createMock(ContentInfo::class),
108
        ];
109
110
        $locations = [];
111
        $eventLocations = [];
112
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
113
        $innerServiceMock->method('deleteContent')->willReturn($locations);
114
115
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_DELETE_CONTENT, function (BeforeDeleteContentEvent $event) use ($eventLocations) {
116
            $event->setLocations($eventLocations);
117
            $event->stopPropagation();
118
        }, 10);
119
120
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
121
        $result = $service->deleteContent(...$parameters);
122
123
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
124
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
125
126
        $this->assertSame($eventLocations, $result);
127
        $this->assertSame($calledListeners, [
128
            [ContentEvents::BEFORE_DELETE_CONTENT, 10],
129
        ]);
130
        $this->assertSame($notCalledListeners, [
131
            [ContentEvents::DELETE_CONTENT, 0],
132
            [ContentEvents::BEFORE_DELETE_CONTENT, 0],
133
        ]);
134
    }
135
136 View Code Duplication
    public function testCopyContentEvents()
137
    {
138
        $traceableEventDispatcher = $this->getEventDispatcher(
139
            ContentEvents::BEFORE_COPY_CONTENT,
140
            ContentEvents::COPY_CONTENT
141
        );
142
143
        $parameters = [
144
            $this->createMock(ContentInfo::class),
145
            $this->createMock(LocationCreateStruct::class),
146
            $this->createMock(VersionInfo::class),
147
        ];
148
149
        $content = $this->createMock(Content::class);
150
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
151
        $innerServiceMock->method('copyContent')->willReturn($content);
152
153
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
154
        $result = $service->copyContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to copyContent() misses a required argument $destinationLocationCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
155
156
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
157
158
        $this->assertSame($content, $result);
159
        $this->assertSame($calledListeners, [
160
            [ContentEvents::BEFORE_COPY_CONTENT, 0],
161
            [ContentEvents::COPY_CONTENT, 0],
162
        ]);
163
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
164
    }
165
166 View Code Duplication
    public function testReturnCopyContentResultInBeforeEvents()
167
    {
168
        $traceableEventDispatcher = $this->getEventDispatcher(
169
            ContentEvents::BEFORE_COPY_CONTENT,
170
            ContentEvents::COPY_CONTENT
171
        );
172
173
        $parameters = [
174
            $this->createMock(ContentInfo::class),
175
            $this->createMock(LocationCreateStruct::class),
176
            $this->createMock(VersionInfo::class),
177
        ];
178
179
        $content = $this->createMock(Content::class);
180
        $eventContent = $this->createMock(Content::class);
181
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
182
        $innerServiceMock->method('copyContent')->willReturn($content);
183
184
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_COPY_CONTENT, function (BeforeCopyContentEvent $event) use ($eventContent) {
185
            $event->setContent($eventContent);
186
        }, 10);
187
188
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
189
        $result = $service->copyContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to copyContent() misses a required argument $destinationLocationCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
190
191
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
192
193
        $this->assertSame($eventContent, $result);
194
        $this->assertSame($calledListeners, [
195
            [ContentEvents::BEFORE_COPY_CONTENT, 10],
196
            [ContentEvents::BEFORE_COPY_CONTENT, 0],
197
            [ContentEvents::COPY_CONTENT, 0],
198
        ]);
199
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
200
    }
201
202 View Code Duplication
    public function testCopyContentStopPropagationInBeforeEvents()
203
    {
204
        $traceableEventDispatcher = $this->getEventDispatcher(
205
            ContentEvents::BEFORE_COPY_CONTENT,
206
            ContentEvents::COPY_CONTENT
207
        );
208
209
        $parameters = [
210
            $this->createMock(ContentInfo::class),
211
            $this->createMock(LocationCreateStruct::class),
212
            $this->createMock(VersionInfo::class),
213
        ];
214
215
        $content = $this->createMock(Content::class);
216
        $eventContent = $this->createMock(Content::class);
217
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
218
        $innerServiceMock->method('copyContent')->willReturn($content);
219
220
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_COPY_CONTENT, function (BeforeCopyContentEvent $event) use ($eventContent) {
221
            $event->setContent($eventContent);
222
            $event->stopPropagation();
223
        }, 10);
224
225
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
226
        $result = $service->copyContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to copyContent() misses a required argument $destinationLocationCreateStruct.

This check looks for function calls that miss required arguments.

Loading history...
227
228
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
229
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
230
231
        $this->assertSame($eventContent, $result);
232
        $this->assertSame($calledListeners, [
233
            [ContentEvents::BEFORE_COPY_CONTENT, 10],
234
        ]);
235
        $this->assertSame($notCalledListeners, [
236
            [ContentEvents::COPY_CONTENT, 0],
237
            [ContentEvents::BEFORE_COPY_CONTENT, 0],
238
        ]);
239
    }
240
241 View Code Duplication
    public function testUpdateContentEvents()
242
    {
243
        $traceableEventDispatcher = $this->getEventDispatcher(
244
            ContentEvents::BEFORE_UPDATE_CONTENT,
245
            ContentEvents::UPDATE_CONTENT
246
        );
247
248
        $parameters = [
249
            $this->createMock(VersionInfo::class),
250
            $this->createMock(ContentUpdateStruct::class),
251
        ];
252
253
        $content = $this->createMock(Content::class);
254
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
255
        $innerServiceMock->method('updateContent')->willReturn($content);
256
257
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
258
        $result = $service->updateContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContent() misses a required argument $contentUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
259
260
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
261
262
        $this->assertSame($content, $result);
263
        $this->assertSame($calledListeners, [
264
            [ContentEvents::BEFORE_UPDATE_CONTENT, 0],
265
            [ContentEvents::UPDATE_CONTENT, 0],
266
        ]);
267
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
268
    }
269
270 View Code Duplication
    public function testReturnUpdateContentResultInBeforeEvents()
271
    {
272
        $traceableEventDispatcher = $this->getEventDispatcher(
273
            ContentEvents::BEFORE_UPDATE_CONTENT,
274
            ContentEvents::UPDATE_CONTENT
275
        );
276
277
        $parameters = [
278
            $this->createMock(VersionInfo::class),
279
            $this->createMock(ContentUpdateStruct::class),
280
        ];
281
282
        $content = $this->createMock(Content::class);
283
        $eventContent = $this->createMock(Content::class);
284
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
285
        $innerServiceMock->method('updateContent')->willReturn($content);
286
287
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_UPDATE_CONTENT, function (BeforeUpdateContentEvent $event) use ($eventContent) {
288
            $event->setContent($eventContent);
289
        }, 10);
290
291
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
292
        $result = $service->updateContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContent() misses a required argument $contentUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
293
294
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
295
296
        $this->assertSame($eventContent, $result);
297
        $this->assertSame($calledListeners, [
298
            [ContentEvents::BEFORE_UPDATE_CONTENT, 10],
299
            [ContentEvents::BEFORE_UPDATE_CONTENT, 0],
300
            [ContentEvents::UPDATE_CONTENT, 0],
301
        ]);
302
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
303
    }
304
305 View Code Duplication
    public function testUpdateContentStopPropagationInBeforeEvents()
306
    {
307
        $traceableEventDispatcher = $this->getEventDispatcher(
308
            ContentEvents::BEFORE_UPDATE_CONTENT,
309
            ContentEvents::UPDATE_CONTENT
310
        );
311
312
        $parameters = [
313
            $this->createMock(VersionInfo::class),
314
            $this->createMock(ContentUpdateStruct::class),
315
        ];
316
317
        $content = $this->createMock(Content::class);
318
        $eventContent = $this->createMock(Content::class);
319
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
320
        $innerServiceMock->method('updateContent')->willReturn($content);
321
322
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_UPDATE_CONTENT, function (BeforeUpdateContentEvent $event) use ($eventContent) {
323
            $event->setContent($eventContent);
324
            $event->stopPropagation();
325
        }, 10);
326
327
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
328
        $result = $service->updateContent(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContent() misses a required argument $contentUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
329
330
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
331
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
332
333
        $this->assertSame($eventContent, $result);
334
        $this->assertSame($calledListeners, [
335
            [ContentEvents::BEFORE_UPDATE_CONTENT, 10],
336
        ]);
337
        $this->assertSame($notCalledListeners, [
338
            [ContentEvents::UPDATE_CONTENT, 0],
339
            [ContentEvents::BEFORE_UPDATE_CONTENT, 0],
340
        ]);
341
    }
342
343
    public function testDeleteRelationEvents()
344
    {
345
        $traceableEventDispatcher = $this->getEventDispatcher(
346
            ContentEvents::BEFORE_DELETE_RELATION,
347
            ContentEvents::DELETE_RELATION
348
        );
349
350
        $parameters = [
351
            $this->createMock(VersionInfo::class),
352
            $this->createMock(ContentInfo::class),
353
        ];
354
355
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
356
357
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
358
        $service->deleteRelation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to deleteRelation() misses a required argument $destinationContent.

This check looks for function calls that miss required arguments.

Loading history...
359
360
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
361
362
        $this->assertSame($calledListeners, [
363
            [ContentEvents::BEFORE_DELETE_RELATION, 0],
364
            [ContentEvents::DELETE_RELATION, 0],
365
        ]);
366
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
367
    }
368
369 View Code Duplication
    public function testDeleteRelationStopPropagationInBeforeEvents()
370
    {
371
        $traceableEventDispatcher = $this->getEventDispatcher(
372
            ContentEvents::BEFORE_DELETE_RELATION,
373
            ContentEvents::DELETE_RELATION
374
        );
375
376
        $parameters = [
377
            $this->createMock(VersionInfo::class),
378
            $this->createMock(ContentInfo::class),
379
        ];
380
381
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
382
383
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_DELETE_RELATION, function (BeforeDeleteRelationEvent $event) {
384
            $event->stopPropagation();
385
        }, 10);
386
387
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
388
        $service->deleteRelation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to deleteRelation() misses a required argument $destinationContent.

This check looks for function calls that miss required arguments.

Loading history...
389
390
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
391
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
392
393
        $this->assertSame($calledListeners, [
394
            [ContentEvents::BEFORE_DELETE_RELATION, 10],
395
        ]);
396
        $this->assertSame($notCalledListeners, [
397
            [ContentEvents::DELETE_RELATION, 0],
398
            [ContentEvents::BEFORE_DELETE_RELATION, 0],
399
        ]);
400
    }
401
402
    public function testCreateContentEvents()
403
    {
404
        $traceableEventDispatcher = $this->getEventDispatcher(
405
            ContentEvents::BEFORE_CREATE_CONTENT,
406
            ContentEvents::CREATE_CONTENT
407
        );
408
409
        $parameters = [
410
            $this->createMock(ContentCreateStruct::class),
411
            [],
412
        ];
413
414
        $content = $this->createMock(Content::class);
415
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
416
        $innerServiceMock->method('createContent')->willReturn($content);
417
418
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
419
        $result = $service->createContent(...$parameters);
420
421
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
422
423
        $this->assertSame($content, $result);
424
        $this->assertSame($calledListeners, [
425
            [ContentEvents::BEFORE_CREATE_CONTENT, 0],
426
            [ContentEvents::CREATE_CONTENT, 0],
427
        ]);
428
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
429
    }
430
431
    public function testReturnCreateContentResultInBeforeEvents()
432
    {
433
        $traceableEventDispatcher = $this->getEventDispatcher(
434
            ContentEvents::BEFORE_CREATE_CONTENT,
435
            ContentEvents::CREATE_CONTENT
436
        );
437
438
        $parameters = [
439
            $this->createMock(ContentCreateStruct::class),
440
            [],
441
        ];
442
443
        $content = $this->createMock(Content::class);
444
        $eventContent = $this->createMock(Content::class);
445
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
446
        $innerServiceMock->method('createContent')->willReturn($content);
447
448
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_CREATE_CONTENT, function (BeforeCreateContentEvent $event) use ($eventContent) {
449
            $event->setContent($eventContent);
450
        }, 10);
451
452
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
453
        $result = $service->createContent(...$parameters);
454
455
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
456
457
        $this->assertSame($eventContent, $result);
458
        $this->assertSame($calledListeners, [
459
            [ContentEvents::BEFORE_CREATE_CONTENT, 10],
460
            [ContentEvents::BEFORE_CREATE_CONTENT, 0],
461
            [ContentEvents::CREATE_CONTENT, 0],
462
        ]);
463
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
464
    }
465
466
    public function testCreateContentStopPropagationInBeforeEvents()
467
    {
468
        $traceableEventDispatcher = $this->getEventDispatcher(
469
            ContentEvents::BEFORE_CREATE_CONTENT,
470
            ContentEvents::CREATE_CONTENT
471
        );
472
473
        $parameters = [
474
            $this->createMock(ContentCreateStruct::class),
475
            [],
476
        ];
477
478
        $content = $this->createMock(Content::class);
479
        $eventContent = $this->createMock(Content::class);
480
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
481
        $innerServiceMock->method('createContent')->willReturn($content);
482
483
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_CREATE_CONTENT, function (BeforeCreateContentEvent $event) use ($eventContent) {
484
            $event->setContent($eventContent);
485
            $event->stopPropagation();
486
        }, 10);
487
488
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
489
        $result = $service->createContent(...$parameters);
490
491
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
492
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
493
494
        $this->assertSame($eventContent, $result);
495
        $this->assertSame($calledListeners, [
496
            [ContentEvents::BEFORE_CREATE_CONTENT, 10],
497
        ]);
498
        $this->assertSame($notCalledListeners, [
499
            [ContentEvents::CREATE_CONTENT, 0],
500
            [ContentEvents::BEFORE_CREATE_CONTENT, 0],
501
        ]);
502
    }
503
504
    public function testHideContentEvents()
505
    {
506
        $traceableEventDispatcher = $this->getEventDispatcher(
507
            ContentEvents::BEFORE_HIDE_CONTENT,
508
            ContentEvents::HIDE_CONTENT
509
        );
510
511
        $parameters = [
512
            $this->createMock(ContentInfo::class),
513
        ];
514
515
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
516
517
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
518
        $service->hideContent(...$parameters);
519
520
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
521
522
        $this->assertSame($calledListeners, [
523
            [ContentEvents::BEFORE_HIDE_CONTENT, 0],
524
            [ContentEvents::HIDE_CONTENT, 0],
525
        ]);
526
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
527
    }
528
529
    public function testHideContentStopPropagationInBeforeEvents()
530
    {
531
        $traceableEventDispatcher = $this->getEventDispatcher(
532
            ContentEvents::BEFORE_HIDE_CONTENT,
533
            ContentEvents::HIDE_CONTENT
534
        );
535
536
        $parameters = [
537
            $this->createMock(ContentInfo::class),
538
        ];
539
540
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
541
542
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_HIDE_CONTENT, function (BeforeHideContentEvent $event) {
543
            $event->stopPropagation();
544
        }, 10);
545
546
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
547
        $service->hideContent(...$parameters);
548
549
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
550
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
551
552
        $this->assertSame($calledListeners, [
553
            [ContentEvents::BEFORE_HIDE_CONTENT, 10],
554
        ]);
555
        $this->assertSame($notCalledListeners, [
556
            [ContentEvents::HIDE_CONTENT, 0],
557
            [ContentEvents::BEFORE_HIDE_CONTENT, 0],
558
        ]);
559
    }
560
561
    public function testDeleteVersionEvents()
562
    {
563
        $traceableEventDispatcher = $this->getEventDispatcher(
564
            ContentEvents::BEFORE_DELETE_VERSION,
565
            ContentEvents::DELETE_VERSION
566
        );
567
568
        $parameters = [
569
            $this->createMock(VersionInfo::class),
570
        ];
571
572
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
573
574
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
575
        $service->deleteVersion(...$parameters);
576
577
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
578
579
        $this->assertSame($calledListeners, [
580
            [ContentEvents::BEFORE_DELETE_VERSION, 0],
581
            [ContentEvents::DELETE_VERSION, 0],
582
        ]);
583
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
584
    }
585
586
    public function testDeleteVersionStopPropagationInBeforeEvents()
587
    {
588
        $traceableEventDispatcher = $this->getEventDispatcher(
589
            ContentEvents::BEFORE_DELETE_VERSION,
590
            ContentEvents::DELETE_VERSION
591
        );
592
593
        $parameters = [
594
            $this->createMock(VersionInfo::class),
595
        ];
596
597
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
598
599
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_DELETE_VERSION, function (BeforeDeleteVersionEvent $event) {
600
            $event->stopPropagation();
601
        }, 10);
602
603
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
604
        $service->deleteVersion(...$parameters);
605
606
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
607
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
608
609
        $this->assertSame($calledListeners, [
610
            [ContentEvents::BEFORE_DELETE_VERSION, 10],
611
        ]);
612
        $this->assertSame($notCalledListeners, [
613
            [ContentEvents::DELETE_VERSION, 0],
614
            [ContentEvents::BEFORE_DELETE_VERSION, 0],
615
        ]);
616
    }
617
618 View Code Duplication
    public function testAddRelationEvents()
619
    {
620
        $traceableEventDispatcher = $this->getEventDispatcher(
621
            ContentEvents::BEFORE_ADD_RELATION,
622
            ContentEvents::ADD_RELATION
623
        );
624
625
        $parameters = [
626
            $this->createMock(VersionInfo::class),
627
            $this->createMock(ContentInfo::class),
628
        ];
629
630
        $relation = $this->createMock(Relation::class);
631
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
632
        $innerServiceMock->method('addRelation')->willReturn($relation);
633
634
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
635
        $result = $service->addRelation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addRelation() misses a required argument $destinationContent.

This check looks for function calls that miss required arguments.

Loading history...
636
637
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
638
639
        $this->assertSame($relation, $result);
640
        $this->assertSame($calledListeners, [
641
            [ContentEvents::BEFORE_ADD_RELATION, 0],
642
            [ContentEvents::ADD_RELATION, 0],
643
        ]);
644
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
645
    }
646
647 View Code Duplication
    public function testReturnAddRelationResultInBeforeEvents()
648
    {
649
        $traceableEventDispatcher = $this->getEventDispatcher(
650
            ContentEvents::BEFORE_ADD_RELATION,
651
            ContentEvents::ADD_RELATION
652
        );
653
654
        $parameters = [
655
            $this->createMock(VersionInfo::class),
656
            $this->createMock(ContentInfo::class),
657
        ];
658
659
        $relation = $this->createMock(Relation::class);
660
        $eventRelation = $this->createMock(Relation::class);
661
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
662
        $innerServiceMock->method('addRelation')->willReturn($relation);
663
664
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_ADD_RELATION, function (BeforeAddRelationEvent $event) use ($eventRelation) {
665
            $event->setRelation($eventRelation);
666
        }, 10);
667
668
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
669
        $result = $service->addRelation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addRelation() misses a required argument $destinationContent.

This check looks for function calls that miss required arguments.

Loading history...
670
671
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
672
673
        $this->assertSame($eventRelation, $result);
674
        $this->assertSame($calledListeners, [
675
            [ContentEvents::BEFORE_ADD_RELATION, 10],
676
            [ContentEvents::BEFORE_ADD_RELATION, 0],
677
            [ContentEvents::ADD_RELATION, 0],
678
        ]);
679
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
680
    }
681
682 View Code Duplication
    public function testAddRelationStopPropagationInBeforeEvents()
683
    {
684
        $traceableEventDispatcher = $this->getEventDispatcher(
685
            ContentEvents::BEFORE_ADD_RELATION,
686
            ContentEvents::ADD_RELATION
687
        );
688
689
        $parameters = [
690
            $this->createMock(VersionInfo::class),
691
            $this->createMock(ContentInfo::class),
692
        ];
693
694
        $relation = $this->createMock(Relation::class);
695
        $eventRelation = $this->createMock(Relation::class);
696
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
697
        $innerServiceMock->method('addRelation')->willReturn($relation);
698
699
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_ADD_RELATION, function (BeforeAddRelationEvent $event) use ($eventRelation) {
700
            $event->setRelation($eventRelation);
701
            $event->stopPropagation();
702
        }, 10);
703
704
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
705
        $result = $service->addRelation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to addRelation() misses a required argument $destinationContent.

This check looks for function calls that miss required arguments.

Loading history...
706
707
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
708
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
709
710
        $this->assertSame($eventRelation, $result);
711
        $this->assertSame($calledListeners, [
712
            [ContentEvents::BEFORE_ADD_RELATION, 10],
713
        ]);
714
        $this->assertSame($notCalledListeners, [
715
            [ContentEvents::ADD_RELATION, 0],
716
            [ContentEvents::BEFORE_ADD_RELATION, 0],
717
        ]);
718
    }
719
720 View Code Duplication
    public function testUpdateContentMetadataEvents()
721
    {
722
        $traceableEventDispatcher = $this->getEventDispatcher(
723
            ContentEvents::BEFORE_UPDATE_CONTENT_METADATA,
724
            ContentEvents::UPDATE_CONTENT_METADATA
725
        );
726
727
        $parameters = [
728
            $this->createMock(ContentInfo::class),
729
            $this->createMock(ContentMetadataUpdateStruct::class),
730
        ];
731
732
        $content = $this->createMock(Content::class);
733
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
734
        $innerServiceMock->method('updateContentMetadata')->willReturn($content);
735
736
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
737
        $result = $service->updateContentMetadata(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContentMetadata() misses a required argument $contentMetadataUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
738
739
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
740
741
        $this->assertSame($content, $result);
742
        $this->assertSame($calledListeners, [
743
            [ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, 0],
744
            [ContentEvents::UPDATE_CONTENT_METADATA, 0],
745
        ]);
746
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
747
    }
748
749 View Code Duplication
    public function testReturnUpdateContentMetadataResultInBeforeEvents()
750
    {
751
        $traceableEventDispatcher = $this->getEventDispatcher(
752
            ContentEvents::BEFORE_UPDATE_CONTENT_METADATA,
753
            ContentEvents::UPDATE_CONTENT_METADATA
754
        );
755
756
        $parameters = [
757
            $this->createMock(ContentInfo::class),
758
            $this->createMock(ContentMetadataUpdateStruct::class),
759
        ];
760
761
        $content = $this->createMock(Content::class);
762
        $eventContent = $this->createMock(Content::class);
763
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
764
        $innerServiceMock->method('updateContentMetadata')->willReturn($content);
765
766
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, function (BeforeUpdateContentMetadataEvent $event) use ($eventContent) {
767
            $event->setContent($eventContent);
768
        }, 10);
769
770
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
771
        $result = $service->updateContentMetadata(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContentMetadata() misses a required argument $contentMetadataUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
772
773
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
774
775
        $this->assertSame($eventContent, $result);
776
        $this->assertSame($calledListeners, [
777
            [ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, 10],
778
            [ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, 0],
779
            [ContentEvents::UPDATE_CONTENT_METADATA, 0],
780
        ]);
781
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
782
    }
783
784 View Code Duplication
    public function testUpdateContentMetadataStopPropagationInBeforeEvents()
785
    {
786
        $traceableEventDispatcher = $this->getEventDispatcher(
787
            ContentEvents::BEFORE_UPDATE_CONTENT_METADATA,
788
            ContentEvents::UPDATE_CONTENT_METADATA
789
        );
790
791
        $parameters = [
792
            $this->createMock(ContentInfo::class),
793
            $this->createMock(ContentMetadataUpdateStruct::class),
794
        ];
795
796
        $content = $this->createMock(Content::class);
797
        $eventContent = $this->createMock(Content::class);
798
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
799
        $innerServiceMock->method('updateContentMetadata')->willReturn($content);
800
801
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, function (BeforeUpdateContentMetadataEvent $event) use ($eventContent) {
802
            $event->setContent($eventContent);
803
            $event->stopPropagation();
804
        }, 10);
805
806
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
807
        $result = $service->updateContentMetadata(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateContentMetadata() misses a required argument $contentMetadataUpdateStruct.

This check looks for function calls that miss required arguments.

Loading history...
808
809
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
810
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
811
812
        $this->assertSame($eventContent, $result);
813
        $this->assertSame($calledListeners, [
814
            [ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, 10],
815
        ]);
816
        $this->assertSame($notCalledListeners, [
817
            [ContentEvents::UPDATE_CONTENT_METADATA, 0],
818
            [ContentEvents::BEFORE_UPDATE_CONTENT_METADATA, 0],
819
        ]);
820
    }
821
822
    public function testDeleteTranslationEvents()
823
    {
824
        $traceableEventDispatcher = $this->getEventDispatcher(
825
            ContentEvents::BEFORE_DELETE_TRANSLATION,
826
            ContentEvents::DELETE_TRANSLATION
827
        );
828
829
        $parameters = [
830
            $this->createMock(ContentInfo::class),
831
            'random_value_5cff79c31a2f31.74205767',
832
        ];
833
834
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
835
836
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
837
        $service->deleteTranslation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to deleteTranslation() misses a required argument $languageCode.

This check looks for function calls that miss required arguments.

Loading history...
838
839
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
840
841
        $this->assertSame($calledListeners, [
842
            [ContentEvents::BEFORE_DELETE_TRANSLATION, 0],
843
            [ContentEvents::DELETE_TRANSLATION, 0],
844
        ]);
845
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
846
    }
847
848
    public function testDeleteTranslationStopPropagationInBeforeEvents()
849
    {
850
        $traceableEventDispatcher = $this->getEventDispatcher(
851
            ContentEvents::BEFORE_DELETE_TRANSLATION,
852
            ContentEvents::DELETE_TRANSLATION
853
        );
854
855
        $parameters = [
856
            $this->createMock(ContentInfo::class),
857
            'random_value_5cff79c31a2fc0.71971617',
858
        ];
859
860
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
861
862
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_DELETE_TRANSLATION, function (BeforeDeleteTranslationEvent $event) {
863
            $event->stopPropagation();
864
        }, 10);
865
866
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
867
        $service->deleteTranslation(...$parameters);
0 ignored issues
show
Bug introduced by
The call to deleteTranslation() misses a required argument $languageCode.

This check looks for function calls that miss required arguments.

Loading history...
868
869
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
870
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
871
872
        $this->assertSame($calledListeners, [
873
            [ContentEvents::BEFORE_DELETE_TRANSLATION, 10],
874
        ]);
875
        $this->assertSame($notCalledListeners, [
876
            [ContentEvents::DELETE_TRANSLATION, 0],
877
            [ContentEvents::BEFORE_DELETE_TRANSLATION, 0],
878
        ]);
879
    }
880
881
    public function testPublishVersionEvents()
882
    {
883
        $traceableEventDispatcher = $this->getEventDispatcher(
884
            ContentEvents::BEFORE_PUBLISH_VERSION,
885
            ContentEvents::PUBLISH_VERSION
886
        );
887
888
        $parameters = [
889
            $this->createMock(VersionInfo::class),
890
        ];
891
892
        $content = $this->createMock(Content::class);
893
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
894
        $innerServiceMock->method('publishVersion')->willReturn($content);
895
896
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
897
        $result = $service->publishVersion(...$parameters);
898
899
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
900
901
        $this->assertSame($content, $result);
902
        $this->assertSame($calledListeners, [
903
            [ContentEvents::BEFORE_PUBLISH_VERSION, 0],
904
            [ContentEvents::PUBLISH_VERSION, 0],
905
        ]);
906
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
907
    }
908
909
    public function testReturnPublishVersionResultInBeforeEvents()
910
    {
911
        $traceableEventDispatcher = $this->getEventDispatcher(
912
            ContentEvents::BEFORE_PUBLISH_VERSION,
913
            ContentEvents::PUBLISH_VERSION
914
        );
915
916
        $parameters = [
917
            $this->createMock(VersionInfo::class),
918
        ];
919
920
        $content = $this->createMock(Content::class);
921
        $eventContent = $this->createMock(Content::class);
922
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
923
        $innerServiceMock->method('publishVersion')->willReturn($content);
924
925
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_PUBLISH_VERSION, function (BeforePublishVersionEvent $event) use ($eventContent) {
926
            $event->setContent($eventContent);
927
        }, 10);
928
929
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
930
        $result = $service->publishVersion(...$parameters);
931
932
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
933
934
        $this->assertSame($eventContent, $result);
935
        $this->assertSame($calledListeners, [
936
            [ContentEvents::BEFORE_PUBLISH_VERSION, 10],
937
            [ContentEvents::BEFORE_PUBLISH_VERSION, 0],
938
            [ContentEvents::PUBLISH_VERSION, 0],
939
        ]);
940
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
941
    }
942
943
    public function testPublishVersionStopPropagationInBeforeEvents()
944
    {
945
        $traceableEventDispatcher = $this->getEventDispatcher(
946
            ContentEvents::BEFORE_PUBLISH_VERSION,
947
            ContentEvents::PUBLISH_VERSION
948
        );
949
950
        $parameters = [
951
            $this->createMock(VersionInfo::class),
952
        ];
953
954
        $content = $this->createMock(Content::class);
955
        $eventContent = $this->createMock(Content::class);
956
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
957
        $innerServiceMock->method('publishVersion')->willReturn($content);
958
959
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_PUBLISH_VERSION, function (BeforePublishVersionEvent $event) use ($eventContent) {
960
            $event->setContent($eventContent);
961
            $event->stopPropagation();
962
        }, 10);
963
964
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
965
        $result = $service->publishVersion(...$parameters);
966
967
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
968
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
969
970
        $this->assertSame($eventContent, $result);
971
        $this->assertSame($calledListeners, [
972
            [ContentEvents::BEFORE_PUBLISH_VERSION, 10],
973
        ]);
974
        $this->assertSame($notCalledListeners, [
975
            [ContentEvents::PUBLISH_VERSION, 0],
976
            [ContentEvents::BEFORE_PUBLISH_VERSION, 0],
977
        ]);
978
    }
979
980 View Code Duplication
    public function testCreateContentDraftEvents()
981
    {
982
        $traceableEventDispatcher = $this->getEventDispatcher(
983
            ContentEvents::BEFORE_CREATE_CONTENT_DRAFT,
984
            ContentEvents::CREATE_CONTENT_DRAFT
985
        );
986
987
        $parameters = [
988
            $this->createMock(ContentInfo::class),
989
            $this->createMock(VersionInfo::class),
990
            $this->createMock(User::class),
991
        ];
992
993
        $contentDraft = $this->createMock(Content::class);
994
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
995
        $innerServiceMock->method('createContentDraft')->willReturn($contentDraft);
996
997
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
998
        $result = $service->createContentDraft(...$parameters);
999
1000
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1001
1002
        $this->assertSame($contentDraft, $result);
1003
        $this->assertSame($calledListeners, [
1004
            [ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, 0],
1005
            [ContentEvents::CREATE_CONTENT_DRAFT, 0],
1006
        ]);
1007
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1008
    }
1009
1010 View Code Duplication
    public function testReturnCreateContentDraftResultInBeforeEvents()
1011
    {
1012
        $traceableEventDispatcher = $this->getEventDispatcher(
1013
            ContentEvents::BEFORE_CREATE_CONTENT_DRAFT,
1014
            ContentEvents::CREATE_CONTENT_DRAFT
1015
        );
1016
1017
        $parameters = [
1018
            $this->createMock(ContentInfo::class),
1019
            $this->createMock(VersionInfo::class),
1020
            $this->createMock(User::class),
1021
        ];
1022
1023
        $contentDraft = $this->createMock(Content::class);
1024
        $eventContentDraft = $this->createMock(Content::class);
1025
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
1026
        $innerServiceMock->method('createContentDraft')->willReturn($contentDraft);
1027
1028
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, function (BeforeCreateContentDraftEvent $event) use ($eventContentDraft) {
1029
            $event->setContentDraft($eventContentDraft);
1030
        }, 10);
1031
1032
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
1033
        $result = $service->createContentDraft(...$parameters);
1034
1035
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1036
1037
        $this->assertSame($eventContentDraft, $result);
1038
        $this->assertSame($calledListeners, [
1039
            [ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, 10],
1040
            [ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, 0],
1041
            [ContentEvents::CREATE_CONTENT_DRAFT, 0],
1042
        ]);
1043
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1044
    }
1045
1046 View Code Duplication
    public function testCreateContentDraftStopPropagationInBeforeEvents()
1047
    {
1048
        $traceableEventDispatcher = $this->getEventDispatcher(
1049
            ContentEvents::BEFORE_CREATE_CONTENT_DRAFT,
1050
            ContentEvents::CREATE_CONTENT_DRAFT
1051
        );
1052
1053
        $parameters = [
1054
            $this->createMock(ContentInfo::class),
1055
            $this->createMock(VersionInfo::class),
1056
            $this->createMock(User::class),
1057
        ];
1058
1059
        $contentDraft = $this->createMock(Content::class);
1060
        $eventContentDraft = $this->createMock(Content::class);
1061
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
1062
        $innerServiceMock->method('createContentDraft')->willReturn($contentDraft);
1063
1064
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, function (BeforeCreateContentDraftEvent $event) use ($eventContentDraft) {
1065
            $event->setContentDraft($eventContentDraft);
1066
            $event->stopPropagation();
1067
        }, 10);
1068
1069
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
1070
        $result = $service->createContentDraft(...$parameters);
1071
1072
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1073
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1074
1075
        $this->assertSame($eventContentDraft, $result);
1076
        $this->assertSame($calledListeners, [
1077
            [ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, 10],
1078
        ]);
1079
        $this->assertSame($notCalledListeners, [
1080
            [ContentEvents::CREATE_CONTENT_DRAFT, 0],
1081
            [ContentEvents::BEFORE_CREATE_CONTENT_DRAFT, 0],
1082
        ]);
1083
    }
1084
1085
    public function testRevealContentEvents()
1086
    {
1087
        $traceableEventDispatcher = $this->getEventDispatcher(
1088
            ContentEvents::BEFORE_REVEAL_CONTENT,
1089
            ContentEvents::REVEAL_CONTENT
1090
        );
1091
1092
        $parameters = [
1093
            $this->createMock(ContentInfo::class),
1094
        ];
1095
1096
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
1097
1098
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
1099
        $service->revealContent(...$parameters);
1100
1101
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1102
1103
        $this->assertSame($calledListeners, [
1104
            [ContentEvents::BEFORE_REVEAL_CONTENT, 0],
1105
            [ContentEvents::REVEAL_CONTENT, 0],
1106
        ]);
1107
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
1108
    }
1109
1110
    public function testRevealContentStopPropagationInBeforeEvents()
1111
    {
1112
        $traceableEventDispatcher = $this->getEventDispatcher(
1113
            ContentEvents::BEFORE_REVEAL_CONTENT,
1114
            ContentEvents::REVEAL_CONTENT
1115
        );
1116
1117
        $parameters = [
1118
            $this->createMock(ContentInfo::class),
1119
        ];
1120
1121
        $innerServiceMock = $this->createMock(ContentServiceInterface::class);
1122
1123
        $traceableEventDispatcher->addListener(ContentEvents::BEFORE_REVEAL_CONTENT, function (BeforeRevealContentEvent $event) {
1124
            $event->stopPropagation();
1125
        }, 10);
1126
1127
        $service = new ContentService($innerServiceMock, $traceableEventDispatcher);
1128
        $service->revealContent(...$parameters);
1129
1130
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
1131
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
1132
1133
        $this->assertSame($calledListeners, [
1134
            [ContentEvents::BEFORE_REVEAL_CONTENT, 10],
1135
        ]);
1136
        $this->assertSame($notCalledListeners, [
1137
            [ContentEvents::REVEAL_CONTENT, 0],
1138
            [ContentEvents::BEFORE_REVEAL_CONTENT, 0],
1139
        ]);
1140
    }
1141
}
1142