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

testUpdateUrlStopPropagationInBeforeEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 37

Duplication

Lines 37
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 37
loc 37
rs 9.328
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\URLService as URLServiceInterface;
10
use eZ\Publish\API\Repository\Values\URL\URL;
11
use eZ\Publish\API\Repository\Values\URL\URLUpdateStruct;
12
use eZ\Publish\Core\Event\URLService;
13
use eZ\Publish\Core\Event\URL\BeforeUpdateUrlEvent;
14
use eZ\Publish\Core\Event\URL\URLEvents;
15
16
class URLServiceTest extends AbstractServiceTest
17
{
18 View Code Duplication
    public function testUpdateUrlEvents()
19
    {
20
        $traceableEventDispatcher = $this->getEventDispatcher(
21
            URLEvents::BEFORE_UPDATE_URL,
22
            URLEvents::UPDATE_URL
23
        );
24
25
        $parameters = [
26
            $this->createMock(URL::class),
27
            $this->createMock(URLUpdateStruct::class),
28
        ];
29
30
        $updatedUrl = $this->createMock(URL::class);
31
        $innerServiceMock = $this->createMock(URLServiceInterface::class);
32
        $innerServiceMock->method('updateUrl')->willReturn($updatedUrl);
33
34
        $service = new URLService($innerServiceMock, $traceableEventDispatcher);
35
        $result = $service->updateUrl(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUrl() misses a required argument $struct.

This check looks for function calls that miss required arguments.

Loading history...
36
37
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
38
39
        $this->assertSame($updatedUrl, $result);
40
        $this->assertSame($calledListeners, [
41
            [URLEvents::BEFORE_UPDATE_URL, 0],
42
            [URLEvents::UPDATE_URL, 0],
43
        ]);
44
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
45
    }
46
47 View Code Duplication
    public function testReturnUpdateUrlResultInBeforeEvents()
48
    {
49
        $traceableEventDispatcher = $this->getEventDispatcher(
50
            URLEvents::BEFORE_UPDATE_URL,
51
            URLEvents::UPDATE_URL
52
        );
53
54
        $parameters = [
55
            $this->createMock(URL::class),
56
            $this->createMock(URLUpdateStruct::class),
57
        ];
58
59
        $updatedUrl = $this->createMock(URL::class);
60
        $eventUpdatedUrl = $this->createMock(URL::class);
61
        $innerServiceMock = $this->createMock(URLServiceInterface::class);
62
        $innerServiceMock->method('updateUrl')->willReturn($updatedUrl);
63
64
        $traceableEventDispatcher->addListener(URLEvents::BEFORE_UPDATE_URL, function (BeforeUpdateUrlEvent $event) use ($eventUpdatedUrl) {
65
            $event->setUpdatedUrl($eventUpdatedUrl);
66
        }, 10);
67
68
        $service = new URLService($innerServiceMock, $traceableEventDispatcher);
69
        $result = $service->updateUrl(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUrl() misses a required argument $struct.

This check looks for function calls that miss required arguments.

Loading history...
70
71
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
72
73
        $this->assertSame($eventUpdatedUrl, $result);
74
        $this->assertSame($calledListeners, [
75
            [URLEvents::BEFORE_UPDATE_URL, 10],
76
            [URLEvents::BEFORE_UPDATE_URL, 0],
77
            [URLEvents::UPDATE_URL, 0],
78
        ]);
79
        $this->assertSame([], $traceableEventDispatcher->getNotCalledListeners());
80
    }
81
82 View Code Duplication
    public function testUpdateUrlStopPropagationInBeforeEvents()
83
    {
84
        $traceableEventDispatcher = $this->getEventDispatcher(
85
            URLEvents::BEFORE_UPDATE_URL,
86
            URLEvents::UPDATE_URL
87
        );
88
89
        $parameters = [
90
            $this->createMock(URL::class),
91
            $this->createMock(URLUpdateStruct::class),
92
        ];
93
94
        $updatedUrl = $this->createMock(URL::class);
95
        $eventUpdatedUrl = $this->createMock(URL::class);
96
        $innerServiceMock = $this->createMock(URLServiceInterface::class);
97
        $innerServiceMock->method('updateUrl')->willReturn($updatedUrl);
98
99
        $traceableEventDispatcher->addListener(URLEvents::BEFORE_UPDATE_URL, function (BeforeUpdateUrlEvent $event) use ($eventUpdatedUrl) {
100
            $event->setUpdatedUrl($eventUpdatedUrl);
101
            $event->stopPropagation();
102
        }, 10);
103
104
        $service = new URLService($innerServiceMock, $traceableEventDispatcher);
105
        $result = $service->updateUrl(...$parameters);
0 ignored issues
show
Bug introduced by
The call to updateUrl() misses a required argument $struct.

This check looks for function calls that miss required arguments.

Loading history...
106
107
        $calledListeners = $this->getListenersStack($traceableEventDispatcher->getCalledListeners());
108
        $notCalledListeners = $this->getListenersStack($traceableEventDispatcher->getNotCalledListeners());
109
110
        $this->assertSame($eventUpdatedUrl, $result);
111
        $this->assertSame($calledListeners, [
112
            [URLEvents::BEFORE_UPDATE_URL, 10],
113
        ]);
114
        $this->assertSame($notCalledListeners, [
115
            [URLEvents::UPDATE_URL, 0],
116
            [URLEvents::BEFORE_UPDATE_URL, 0],
117
        ]);
118
    }
119
}
120