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

testCreateBookmarkStopPropagationInBeforeEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 31
rs 9.424
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\BookmarkService as BookmarkServiceInterface;
10
use eZ\Publish\API\Repository\Values\Content\Location;
11
use eZ\Publish\Core\Event\BookmarkService;
12
use eZ\Publish\Core\Event\Bookmark\BeforeCreateBookmarkEvent;
13
use eZ\Publish\Core\Event\Bookmark\BeforeDeleteBookmarkEvent;
14
use eZ\Publish\Core\Event\Bookmark\BookmarkEvents;
15
16
class BookmarkServiceTest extends AbstractServiceTest
17
{
18
    public function testCreateBookmarkEvents()
19
    {
20
        $traceableEventDispatcher = $this->getEventDispatcher(
21
            BookmarkEvents::BEFORE_CREATE_BOOKMARK,
22
            BookmarkEvents::CREATE_BOOKMARK
23
        );
24
25
        $parameters = [
26
            $this->createMock(Location::class),
27
        ];
28
29
        $innerServiceMock = $this->createMock(BookmarkServiceInterface::class);
30
31
        $service = new BookmarkService($innerServiceMock, $traceableEventDispatcher);
32
        $service->createBookmark(...$parameters);
33
34
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
35
36
        $this->assertSame($calledListeners, [
37
            [BookmarkEvents::BEFORE_CREATE_BOOKMARK, 0],
38
            [BookmarkEvents::CREATE_BOOKMARK, 0],
39
        ]);
40
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
41
    }
42
43
    public function testCreateBookmarkStopPropagationInBeforeEvents()
44
    {
45
        $traceableEventDispatcher = $this->getEventDispatcher(
46
            BookmarkEvents::BEFORE_CREATE_BOOKMARK,
47
            BookmarkEvents::CREATE_BOOKMARK
48
        );
49
50
        $parameters = [
51
            $this->createMock(Location::class),
52
        ];
53
54
        $innerServiceMock = $this->createMock(BookmarkServiceInterface::class);
55
56
        $traceableEventDispatcher->addListener(BookmarkEvents::BEFORE_CREATE_BOOKMARK, function (BeforeCreateBookmarkEvent $event) {
57
            $event->stopPropagation();
58
        }, 10);
59
60
        $service = new BookmarkService($innerServiceMock, $traceableEventDispatcher);
61
        $service->createBookmark(...$parameters);
62
63
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
64
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
65
66
        $this->assertSame($calledListeners, [
67
            [BookmarkEvents::BEFORE_CREATE_BOOKMARK, 10],
68
        ]);
69
        $this->assertSame($notCalledListeners, [
70
            [BookmarkEvents::CREATE_BOOKMARK, 0],
71
            [BookmarkEvents::BEFORE_CREATE_BOOKMARK, 0],
72
        ]);
73
    }
74
75
    public function testDeleteBookmarkEvents()
76
    {
77
        $traceableEventDispatcher = $this->getEventDispatcher(
78
            BookmarkEvents::BEFORE_DELETE_BOOKMARK,
79
            BookmarkEvents::DELETE_BOOKMARK
80
        );
81
82
        $parameters = [
83
            $this->createMock(Location::class),
84
        ];
85
86
        $innerServiceMock = $this->createMock(BookmarkServiceInterface::class);
87
88
        $service = new BookmarkService($innerServiceMock, $traceableEventDispatcher);
89
        $service->deleteBookmark(...$parameters);
90
91
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
92
93
        $this->assertSame($calledListeners, [
94
            [BookmarkEvents::BEFORE_DELETE_BOOKMARK, 0],
95
            [BookmarkEvents::DELETE_BOOKMARK, 0],
96
        ]);
97
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
98
    }
99
100
    public function testDeleteBookmarkStopPropagationInBeforeEvents()
101
    {
102
        $traceableEventDispatcher = $this->getEventDispatcher(
103
            BookmarkEvents::BEFORE_DELETE_BOOKMARK,
104
            BookmarkEvents::DELETE_BOOKMARK
105
        );
106
107
        $parameters = [
108
            $this->createMock(Location::class),
109
        ];
110
111
        $innerServiceMock = $this->createMock(BookmarkServiceInterface::class);
112
113
        $traceableEventDispatcher->addListener(BookmarkEvents::BEFORE_DELETE_BOOKMARK, function (BeforeDeleteBookmarkEvent $event) {
114
            $event->stopPropagation();
115
        }, 10);
116
117
        $service = new BookmarkService($innerServiceMock, $traceableEventDispatcher);
118
        $service->deleteBookmark(...$parameters);
119
120
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
121
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
122
123
        $this->assertSame($calledListeners, [
124
            [BookmarkEvents::BEFORE_DELETE_BOOKMARK, 10],
125
        ]);
126
        $this->assertSame($notCalledListeners, [
127
            [BookmarkEvents::DELETE_BOOKMARK, 0],
128
            [BookmarkEvents::BEFORE_DELETE_BOOKMARK, 0],
129
        ]);
130
    }
131
}
132