Failed Conditions
Push — master ( 3a6c46...2fbe69 )
by Luís
36s queued 11s
created

TestManagerRegistry   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 10
dl 0
loc 43
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A resetService() 0 3 1
A getAliasNamespace() 0 3 1
A getService() 0 7 2
A __construct() 0 12 1
1
<?php
2
3
namespace Doctrine\Tests\Persistence;
4
5
use Doctrine\Persistence\AbstractManagerRegistry;
6
use Doctrine\Persistence\Mapping\ClassMetadata;
7
use Doctrine\Persistence\Mapping\Driver\MappingDriver;
8
use Doctrine\Persistence\ObjectManager;
9
use Doctrine\Persistence\ObjectManagerAware;
10
use Doctrine\Tests\DoctrineTestCase;
11
use Doctrine\Tests\Persistence\Mapping\TestClassMetadataFactory;
12
use ReflectionException;
13
use function call_user_func;
14
15
/**
16
 * @uses Doctrine\Tests\Persistence\TestObject
17
 *
18
 * @groups DCOM-270
19
 */
20
class ManagerRegistryTest extends DoctrineTestCase
21
{
22
    /** @var TestManagerRegistry */
23
    private $mr;
24
25
    /**
26
     * {@inheritdoc}
27
     */
28
    public function setUp()
29
    {
30
        $this->mr = new TestManagerRegistry(
31
            'ORM',
32
            ['default' => 'default_connection'],
33
            ['default' => 'default_manager'],
34
            'default',
35
            'default',
36
            ObjectManagerAware::class,
37
            $this->getManagerFactory()
38
        );
39
    }
40
41
    public function testGetManagerForClass()
42
    {
43
        self::assertNull($this->mr->getManagerForClass(TestObject::class));
44
    }
45
46
    public function testGetManagerForProxyInterface()
47
    {
48
        self::assertNull($this->mr->getManagerForClass(ObjectManagerAware::class));
49
    }
50
51
    public function testGetManagerForInvalidClass()
52
    {
53
        $this->expectException(ReflectionException::class);
54
        $this->expectExceptionMessage('Class Doctrine\Tests\Persistence\TestObjectInexistent does not exist');
55
56
        $this->mr->getManagerForClass('prefix:TestObjectInexistent');
57
    }
58
59
    public function testGetManagerForAliasedClass()
60
    {
61
        self::assertNull($this->mr->getManagerForClass('prefix:TestObject'));
62
    }
63
64
    public function testGetManagerForInvalidAliasedClass()
65
    {
66
        $this->expectException(ReflectionException::class);
67
        $this->expectExceptionMessage('Class Doctrine\Tests\Persistence\TestObject:Foo does not exist');
68
69
        $this->mr->getManagerForClass('prefix:TestObject:Foo');
70
    }
71
72
    public function testResetManager()
73
    {
74
        $manager    = $this->mr->getManager();
75
        $newManager = $this->mr->resetManager();
76
77
        self::assertInstanceOf(ObjectManager::class, $newManager);
78
        self::assertNotSame($manager, $newManager);
79
    }
80
81
    private function getManagerFactory()
82
    {
83
        return function () {
84
            $mock     = $this->createMock(ObjectManager::class);
85
            $driver   = $this->createMock(MappingDriver::class);
86
            $metadata = $this->createMock(ClassMetadata::class);
87
            $mock->method('getMetadataFactory')->willReturn(new TestClassMetadataFactory($driver, $metadata));
88
89
            return $mock;
90
        };
91
    }
92
}
93
94
class TestManagerRegistry extends AbstractManagerRegistry
95
{
96
    /** @var object[] */
97
    private $services;
98
99
    /** @var callable */
100
    private $managerFactory;
101
102
    /**
103
     * @param string[] $connections
104
     * @param string[] $managers
105
     */
106
    public function __construct(
107
        $name,
108
        array $connections,
109
        array $managers,
110
        $defaultConnection,
111
        $defaultManager,
112
        $proxyInterfaceName,
113
        callable $managerFactory
114
    ) {
115
        $this->managerFactory = $managerFactory;
116
117
        parent::__construct($name, $connections, $managers, $defaultConnection, $defaultManager, $proxyInterfaceName);
118
    }
119
120
    protected function getService($name)
121
    {
122
        if (! isset($this->services[$name])) {
123
            $this->services[$name] = call_user_func($this->managerFactory);
124
        }
125
126
        return $this->services[$name];
127
    }
128
129
    protected function resetService($name)
130
    {
131
        unset($this->services[$name]);
132
    }
133
134
    public function getAliasNamespace($alias)
135
    {
136
        return __NAMESPACE__;
137
    }
138
}
139