Passed
Branch master (e8fd46)
by Alexey
03:15
created

DispatcherTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 81
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 81
rs 10
c 0
b 0
f 0
wmc 4
1
<?php
2
3
use PHPUnit\Framework\TestCase;
4
use Venta\Event\AbstractEvent;
5
6
/**
7
 * Class DispatcherTest
8
 */
9
class DispatcherTest extends TestCase
10
{
11
    /**
12
     * @test
13
     */
14
    public function canAttachAndDispatchAnEvent()
15
    {
16
        $event = $this->createEvent();
17
        $eventName = ltrim(get_class($event), '\\');
18
        $dispatcher = new \Venta\Event\EventDispatcher;
19
20
        $dispatcher->addListener($eventName, function (\Venta\Contracts\Event\Event $event) {
21
            $event->setData('foo', 'bar');
22
        });
23
24
        $dispatcher->addListener($eventName, function (\Venta\Contracts\Event\Event $event) {
25
            $event->setData('boo', 'far');
26
        });
27
28
        $dispatcher->dispatch($event);
29
30
        $this->assertInternalType('array', $event->getData());
31
        $this->assertContains('bar', $event->getData());
32
        $this->assertContains('far', $event->getData());
33
    }
34
35
    /**
36
     * @test
37
     */
38
    public function canStopPropagation()
39
    {
40
        $event = $this->createEvent();
41
        $eventName = ltrim(get_class($event), '\\');
42
        $dispatcher = new \Venta\Event\EventDispatcher;
43
44
        $dispatcher->addListener($eventName, function (\Venta\Contracts\Event\Event $event) {
45
            $event->setData('foo', 'bar');
46
        });
47
48
        $dispatcher->addListener($eventName, function (\Venta\Contracts\Event\Event $event) {
49
            $event->stopPropagation();
50
        });
51
52
        $dispatcher->addListener($eventName, function (\Venta\Contracts\Event\Event $event) {
53
            $event->setData('boo', 'far');
54
        });
55
56
        $dispatcher->dispatch($event);
57
58
        $this->assertTrue($event->isPropagationStopped());
59
        $this->assertNotContains('far', $event->getData());
60
    }
61
62
    /**
63
     * Returns fresh event instance
64
     *
65
     * @return \Venta\Contracts\Event\Event
66
     */
67
    protected function createEvent()
68
    {
69
        return new class extends AbstractEvent
70
        {
71
            protected $data;
72
73
            public function __construct()
74
            {
75
                $this->data = [];
76
            }
77
78
            public function getData()
79
            {
80
                return $this->data;
81
            }
82
83
            public function setData($key, $item)
84
            {
85
                $this->data[$key] = $item;
86
            }
87
        };
88
    }
89
}