@@ 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 |
@@ 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 |