EventManagerFactoryTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 4
dl 0
loc 111
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A testWillInstantiateFromFQCN() 0 27 1
A testWillAttachEventListenersFromConfiguredInstances() 0 28 1
A testWillAttachEventListenersFromServiceManagerAlias() 0 29 1
A testWillRefuseNonExistingSubscriber() 0 21 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DoctrineModuleTest\Service;
6
7
use DoctrineModule\Service\EventManagerFactory;
8
use DoctrineModuleTest\Service\TestAsset\DummyEventSubscriber;
9
use Laminas\ServiceManager\ServiceManager;
10
use PHPUnit\Framework\TestCase as BaseTestCase;
11
12
/**
13
 * Base test case to be used when a service manager instance is required
14
 */
15
class EventManagerFactoryTest extends BaseTestCase
16
{
17
    public function testWillInstantiateFromFQCN() : void
18
    {
19
        $name           = 'eventManagerFactory';
20
        $factory        = new EventManagerFactory($name);
21
        $serviceManager = new ServiceManager();
22
        $serviceManager->setService(
23
            'config',
24
            [
25
                'doctrine' => [
26
                    'eventmanager' => [
27
                        $name => [
28
                            'subscribers' => [
29
                                __NAMESPACE__ . '\TestAsset\DummyEventSubscriber',
30
                            ],
31
                        ],
32
                    ],
33
                ],
34
            ]
35
        );
36
37
        /* $var $eventManager \Doctrine\Common\EventManager */
38
        $eventManager = $factory->createService($serviceManager);
39
        $this->assertInstanceOf('Doctrine\Common\EventManager', $eventManager);
40
41
        $listeners = $eventManager->getListeners('dummy');
42
        $this->assertCount(1, $listeners);
43
    }
44
45
    public function testWillAttachEventListenersFromConfiguredInstances() : void
46
    {
47
        $name           = 'eventManagerFactory';
48
        $factory        = new EventManagerFactory($name);
49
        $subscriber     = new DummyEventSubscriber();
50
        $serviceManager = new ServiceManager();
51
        $serviceManager->setService(
52
            'config',
53
            [
54
                'doctrine' => [
55
                    'eventmanager' => [
56
                        $name => [
57
                            'subscribers' => [$subscriber],
58
                        ],
59
                    ],
60
                ],
61
            ]
62
        );
63
64
        /* $var $eventManager \Doctrine\Common\EventManager */
65
        $eventManager = $factory->createService($serviceManager);
66
        $this->assertInstanceOf('Doctrine\Common\EventManager', $eventManager);
67
68
        $listeners = $eventManager->getListeners();
69
        $this->assertArrayHasKey('dummy', $listeners);
70
        $listeners = $eventManager->getListeners('dummy');
71
        $this->assertContains($subscriber, $listeners);
72
    }
73
74
    public function testWillAttachEventListenersFromServiceManagerAlias() : void
75
    {
76
        $name           = 'eventManagerFactory';
77
        $factory        = new EventManagerFactory($name);
78
        $subscriber     = new DummyEventSubscriber();
79
        $serviceManager = new ServiceManager();
80
        $serviceManager->setService('dummy-subscriber', $subscriber);
81
        $serviceManager->setService(
82
            'config',
83
            [
84
                'doctrine' => [
85
                    'eventmanager' => [
86
                        $name => [
87
                            'subscribers' => ['dummy-subscriber'],
88
                        ],
89
                    ],
90
                ],
91
            ]
92
        );
93
94
        /* $var $eventManager \Doctrine\Common\EventManager */
95
        $eventManager = $factory->createService($serviceManager);
96
        $this->assertInstanceOf('Doctrine\Common\EventManager', $eventManager);
97
98
        $listeners = $eventManager->getListeners();
99
        $this->assertArrayHasKey('dummy', $listeners);
100
        $listeners = $eventManager->getListeners('dummy');
101
        $this->assertContains($subscriber, $listeners);
102
    }
103
104
    public function testWillRefuseNonExistingSubscriber() : void
105
    {
106
        $name           = 'eventManagerFactory';
107
        $factory        = new EventManagerFactory($name);
108
        $serviceManager = new ServiceManager();
109
        $serviceManager->setService(
110
            'config',
111
            [
112
                'doctrine' => [
113
                    'eventmanager' => [
114
                        $name => [
115
                            'subscribers' => ['non-existing-subscriber'],
116
                        ],
117
                    ],
118
                ],
119
            ]
120
        );
121
122
        $this->expectException('InvalidArgumentException');
123
        $factory->createService($serviceManager);
124
    }
125
}
126