Code Duplication    Length = 137-138 lines in 2 locations

Tests/DependencyInjection/Compiler/RegisterPagerProvidersPassTest.php 1 location

@@ 12-148 (lines=137) @@
9
use Symfony\Component\DependencyInjection\Definition;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
12
class RegisterPagerProvidersPassTest extends \PHPUnit_Framework_TestCase
13
{
14
    public function testShouldImplementCompilerPassInterface()
15
    {
16
        $rc = new \ReflectionClass(RegisterPagerProvidersPass::class);
17
18
        $this->assertTrue($rc->implementsInterface(CompilerPassInterface::class));
19
    }
20
21
    public function testCouldBeConstructedWithoutAnyArguments()
22
    {
23
        new RegisterPagerProvidersPass();
24
    }
25
26
    public function testShouldDoNothingIfPagerProviderRegistryServiceIsMissing()
27
    {
28
        $container = new ContainerBuilder();
29
        $pass = new RegisterPagerProvidersPass();
30
31
        $container->setDefinition('foo_provider', $this->createProviderDefinition(array('type' => 'a')));
32
        $container->setDefinition('bar_provider', $this->createProviderDefinition(array('index' => 'foo', 'type' => 'b')));
33
        $container->setDefinition('baz_provider', $this->createProviderDefinition(array('index' => 'bar', 'type' => 'a')));
34
35
        $pass->process($container);
36
    }
37
38
    public function testShouldRegisterTaggedPagerProviders()
39
    {
40
        $container = new ContainerBuilder();
41
        $pass = new RegisterPagerProvidersPass();
42
43
        $registry = new Definition(PagerProviderRegistry::class);
44
        $registry->addArgument([]);
45
46
        $container->setParameter('fos_elastica.default_index', 'foo');
47
        $container->setDefinition('fos_elastica.pager_provider_registry', $registry);
48
49
        $container->setDefinition('foo_provider', $this->createProviderDefinition(array('type' => 'a')));
50
        $container->setDefinition('bar_provider', $this->createProviderDefinition(array('index' => 'foo', 'type' => 'b')));
51
        $container->setDefinition('baz_provider', $this->createProviderDefinition(array('index' => 'bar', 'type' => 'a')));
52
53
        $pass->process($container);
54
55
        $this->assertEquals([
56
            'foo' => [
57
                'a' => 'foo_provider',
58
                'b' => 'bar_provider',
59
            ],
60
            'bar' => [
61
                'a' => 'baz_provider'
62
            ],
63
        ], $registry->getArgument(0));
64
    }
65
66
    public function testThrowsIfTagMissesTypeAttribute()
67
    {
68
        $container = new ContainerBuilder();
69
        $pass = new RegisterPagerProvidersPass();
70
71
        $container->setDefinition('fos_elastica.pager_provider_registry', new Definition());
72
        $container->setParameter('fos_elastica.default_index', 'foo');
73
74
        $container->setDefinition('a_provider', $this->createProviderDefinition([]));
75
76
        $this->setExpectedException(\InvalidArgumentException::class, 'Elastica provider "a_provider" must specify the "type" attribute.');
77
78
        $pass->process($container);
79
    }
80
81
    public function testThrowsIfProviderForSuchIndexTypeHasBeenAlreadyRegistered()
82
    {
83
        $container = new ContainerBuilder();
84
        $pass = new RegisterPagerProvidersPass();
85
86
        $container->setDefinition('fos_elastica.pager_provider_registry', new Definition());
87
        $container->setParameter('fos_elastica.default_index', 'foo');
88
89
        $container->setDefinition('a_foo_provider', $this->createProviderDefinition(['index' => 'foo', 'type' => 'bar']));
90
        $container->setDefinition('a_bar_provider', $this->createProviderDefinition(['index' => 'foo', 'type' => 'bar']));
91
92
        $this->setExpectedException(\InvalidArgumentException::class, 'Cannot register provider "a_bar_provider". The provider "a_foo_provider" has been registered for same index "foo" and type "bar"');
93
        $pass->process($container);
94
    }
95
96
    public function testThrowsIfProviderServiceDoesNotImplementPagerProviderInterface()
97
    {
98
        $container = new ContainerBuilder();
99
        $pass = new RegisterPagerProvidersPass();
100
101
        $container->setDefinition('fos_elastica.pager_provider_registry', new Definition());
102
        $container->setParameter('fos_elastica.default_index', 'foo');
103
104
        $provider = $this->createProviderDefinition(['index' => 'foo', 'type' => 'bar']);
105
        $provider->setClass(\stdClass::class);
106
107
        $container->setDefinition('a_foo_provider', $provider);
108
109
        $this->setExpectedException(\InvalidArgumentException::class, 'Elastica provider "a_foo_provider" with class "stdClass" must implement "FOS\ElasticaBundle\Provider\PagerProviderInterface".');
110
111
        $pass->process($container);
112
    }
113
114
    public function testShouldSkipClassCheckIfDefinitionHasFactory()
115
    {
116
        $container = new ContainerBuilder();
117
        $pass = new RegisterPagerProvidersPass();
118
119
        $registry = new Definition(PagerProviderRegistry::class);
120
        $registry->addArgument([]);
121
122
        $container->setParameter('fos_elastica.default_index', 'foo');
123
        $container->setDefinition('fos_elastica.pager_provider_registry', $registry);
124
125
        $provider = $this->createProviderDefinition(['index' => 'foo', 'type' => 'bar']);
126
        $provider->setClass(\stdClass::class);
127
        $provider->setFactory('a_factory_function');
128
129
        $container->setDefinition('a_foo_provider', $provider);
130
131
        $pass->process($container);
132
133
        $this->assertEquals(['foo' => ['bar' => 'a_foo_provider']], $registry->getArgument(0));
134
    }
135
136
    /**
137
     * @param array $attributes
138
     * 
139
     * @return Definition
140
     */
141
    private function createProviderDefinition(array $attributes = array())
142
    {
143
        $definition = new Definition(PagerProviderInterface::class);
144
        $definition->addTag('fos_elastica.pager_provider', $attributes);
145
146
        return $definition;
147
    }
148
}
149

Tests/DependencyInjection/Compiler/RegisterPersistersPassTest.php 1 location

@@ 12-149 (lines=138) @@
9
use Symfony\Component\DependencyInjection\Definition;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
12
class RegisterPersistersPassTest extends \PHPUnit_Framework_TestCase
13
{
14
    public function testShouldImplementCompilerPassInterface()
15
    {
16
        $rc = new \ReflectionClass(RegisterPersistersPass::class);
17
18
        $this->assertTrue($rc->implementsInterface(CompilerPassInterface::class));
19
    }
20
21
    public function testCouldBeConstructedWithoutAnyArguments()
22
    {
23
        new RegisterPersistersPass();
24
    }
25
26
    public function testShouldDoNothingIfPersisterRegistryServiceIsMissing()
27
    {
28
        $container = new ContainerBuilder();
29
        $pass = new RegisterPersistersPass();
30
31
        $container->setDefinition('foo_persister', $this->createPersisterDefinition(array('type' => 'a')));
32
        $container->setDefinition('bar_persister', $this->createPersisterDefinition(array('index' => 'foo', 'type' => 'b')));
33
        $container->setDefinition('baz_persister', $this->createPersisterDefinition(array('index' => 'bar', 'type' => 'a')));
34
35
        $pass->process($container);
36
    }
37
38
    public function testShouldRegisterTaggedPagerPersisters()
39
    {
40
        $container = new ContainerBuilder();
41
        $pass = new RegisterPersistersPass();
42
43
        $registry = new Definition(PersisterRegistry::class);
44
        $registry->addArgument([]);
45
46
        $container->setParameter('fos_elastica.default_index', 'foo');
47
        $container->setDefinition('fos_elastica.persister_registry', $registry);
48
49
        $container->setDefinition('foo_persister', $this->createPersisterDefinition(array('type' => 'a')));
50
        $container->setDefinition('bar_persister', $this->createPersisterDefinition(array('index' => 'foo', 'type' => 'b')));
51
        $container->setDefinition('baz_persister', $this->createPersisterDefinition(array('index' => 'bar', 'type' => 'a')));
52
53
        $pass->process($container);
54
55
        $this->assertEquals([
56
            'foo' => [
57
                'a' => 'foo_persister',
58
                'b' => 'bar_persister',
59
            ],
60
            'bar' => [
61
                'a' => 'baz_persister'
62
            ],
63
        ], $registry->getArgument(0));
64
    }
65
66
    public function testThrowsIfTagMissesTypeAttribute()
67
    {
68
        $container = new ContainerBuilder();
69
        $pass = new RegisterPersistersPass();
70
71
        $container->setDefinition('fos_elastica.persister_registry', new Definition());
72
        $container->setParameter('fos_elastica.default_index', 'foo');
73
74
        $container->setDefinition('a_persister', $this->createPersisterDefinition([]));
75
76
        $this->setExpectedException(\InvalidArgumentException::class, 'Elastica persister "a_persister" must specify the "type" attribute.');
77
78
        $pass->process($container);
79
    }
80
81
    public function testThrowsIfPersisterForSuchIndexTypeHasBeenAlreadyRegistered()
82
    {
83
        $container = new ContainerBuilder();
84
        $pass = new RegisterPersistersPass();
85
86
        $container->setDefinition('fos_elastica.persister_registry', new Definition());
87
        $container->setParameter('fos_elastica.default_index', 'foo');
88
89
        $container->setDefinition('a_foo_persister', $this->createPersisterDefinition(['index' => 'foo', 'type' => 'bar']));
90
        $container->setDefinition('a_bar_persister', $this->createPersisterDefinition(['index' => 'foo', 'type' => 'bar']));
91
92
        $this->setExpectedException(\InvalidArgumentException::class, 'Cannot register persister "a_bar_persister". The persister "a_foo_persister" has been registered for same index "foo" and type "bar"');
93
94
        $pass->process($container);
95
    }
96
97
    public function testThrowsIfPersisterServiceDoesNotImplementPagerPersisterInterface()
98
    {
99
        $container = new ContainerBuilder();
100
        $pass = new RegisterPersistersPass();
101
102
        $container->setDefinition('fos_elastica.persister_registry', new Definition());
103
        $container->setParameter('fos_elastica.default_index', 'foo');
104
105
        $persister = $this->createPersisterDefinition(['index' => 'foo', 'type' => 'bar']);
106
        $persister->setClass(\stdClass::class);
107
108
        $container->setDefinition('a_foo_persister', $persister);
109
110
        $this->setExpectedException(\InvalidArgumentException::class, 'Elastica persister "a_foo_persister" with class "stdClass" must implement "FOS\ElasticaBundle\Persister\ObjectPersisterInterface".');
111
112
        $pass->process($container);
113
    }
114
115
    public function testShouldSkipClassCheckIfDefinitionHasFactory()
116
    {
117
        $container = new ContainerBuilder();
118
        $pass = new RegisterPersistersPass();
119
120
        $registry = new Definition(PersisterRegistry::class);
121
        $registry->addArgument([]);
122
123
        $container->setParameter('fos_elastica.default_index', 'foo');
124
        $container->setDefinition('fos_elastica.persister_registry', $registry);
125
126
        $persister = $this->createPersisterDefinition(['index' => 'foo', 'type' => 'bar']);
127
        $persister->setClass(\stdClass::class);
128
        $persister->setFactory('a_factory_function');
129
130
        $container->setDefinition('a_foo_persister', $persister);
131
132
        $pass->process($container);
133
134
        $this->assertEquals(['foo' => ['bar' => 'a_foo_persister']], $registry->getArgument(0));
135
    }
136
137
    /**
138
     * @param array $attributes
139
     * 
140
     * @return Definition
141
     */
142
    private function createPersisterDefinition(array $attributes = array())
143
    {
144
        $definition = new Definition(ObjectPersisterInterface::class);
145
        $definition->addTag('fos_elastica.persister', $attributes);
146
147
        return $definition;
148
    }
149
}
150