99use PHPUnit \Framework \Assert ;
1010use Symfony \Component \DependencyInjection \ContainerBuilder ;
1111use Symfony \Component \DependencyInjection \Extension \PrependExtensionInterface ;
12+ use Symfony \Component \DependencyInjection \ParameterBag \ParameterBag ;
1213use VasekPurchart \RabbitMqDatabaseTransactionProducerBundle \Doctrine \Connection \Connection ;
1314
14- class RabbitMqDatabaseTransactionProducerExtensionTest extends \Matthias \ SymfonyDependencyInjectionTest \ PhpUnit \AbstractExtensionTestCase
15+ class RabbitMqDatabaseTransactionProducerExtensionTest extends \PHPUnit \ Framework \TestCase
1516{
1617
17- public function setUp (): void
18- {
19- parent ::setUp ();
20- $ this ->setParameter ('kernel.debug ' , true );
21- }
22-
23- /**
24- * @return \Symfony\Component\DependencyInjection\Extension\ExtensionInterface[]
25- */
26- protected function getContainerExtensions (): array
27- {
28- return [
29- new DoctrineExtension (),
30- new RabbitMqDatabaseTransactionProducerExtension (),
31- ];
32- }
33-
3418 public function testDependsOnDoctrineBundle (): void
3519 {
36- $ containerBuilder = new ContainerBuilder ();
20+ $ container = self ::createContainer ();
21+ $ container ->setParameter ('kernel.debug ' , true );
3722 $ extension = new RabbitMqDatabaseTransactionProducerExtension ();
3823 $ this ->expectException (
3924 \VasekPurchart \RabbitMqDatabaseTransactionProducerBundle \DependencyInjection \DoctrineExtensionNotFoundException::class
4025 );
41- $ extension ->prepend ($ containerBuilder );
26+ $ extension ->prepend ($ container );
4227 }
4328
4429 public function testRegisterCustomConnectionClass (): void
4530 {
46- $ this ->loadExtensions ();
31+ $ container = self ::createContainer ();
32+ $ container ->setParameter ('kernel.debug ' , true );
33+ $ container ->registerExtension (new DoctrineExtension ());
34+ $ container ->registerExtension (new RabbitMqDatabaseTransactionProducerExtension ());
35+
36+ self ::loadRegisteredExtensionsUsingConfigurationByAlias ($ container );
4737
48- $ doctrineConfig = $ this ->container ->getExtensionConfig ('doctrine ' );
49- if (!isset ($ doctrineConfig [0 ]) || !isset ($ doctrineConfig [0 ]['dbal ' ]) || !isset ($ doctrineConfig [0 ]['dbal ' ]['wrapper_class ' ])) {
38+ $ doctrineConfig = $ container ->getExtensionConfig ('doctrine ' );
39+ if (!isset ($ doctrineConfig [0 ]) || !isset ($ doctrineConfig [0 ]['dbal ' ])
40+ || !isset ($ doctrineConfig [0 ]['dbal ' ]['wrapper_class ' ])) {
5041 Assert::fail ();
5142 }
5243
@@ -78,7 +69,7 @@ public function configureContainerParameterDataProvider(): Generator
7869 /**
7970 * @dataProvider configureContainerParameterDataProvider
8071 *
81- * @param mixed[][] $configuration
72+ * @param mixed[][]|array $configuration
8273 * @param string $parameterName
8374 * @param bool $expectedParameterValue
8475 */
@@ -88,39 +79,62 @@ public function testConfigureContainerParameter(
8879 bool $ expectedParameterValue
8980 ): void
9081 {
91- $ this ->loadExtensions ($ configuration );
82+ $ container = self ::createContainer ();
83+ $ container ->setParameter ('kernel.debug ' , true );
84+ $ container ->registerExtension (new DoctrineExtension ());
85+ $ container ->registerExtension (new RabbitMqDatabaseTransactionProducerExtension ());
9286
93- $ this ->assertContainerBuilderHasParameter (
94- $ parameterName ,
95- $ expectedParameterValue
96- );
87+ self ::loadRegisteredExtensionsUsingConfigurationByAlias ($ container , $ configuration );
88+
89+ self ::assertContainerHasParameter ($ container , $ parameterName );
90+ Assert::assertSame ($ expectedParameterValue , $ container ->getParameter ($ parameterName ));
91+ }
92+
93+ private static function createContainer (): ContainerBuilder
94+ {
95+ $ container = new ContainerBuilder (new ParameterBag ([]));
96+ $ container ->getCompilerPassConfig ()->setOptimizationPasses ([]);
97+ $ container ->getCompilerPassConfig ()->setRemovingPasses ([]);
98+ $ container ->getCompilerPassConfig ()->setAfterRemovingPasses ([]);
99+
100+ return $ container ;
97101 }
98102
99103 /**
100- * @param mixed[] $configuration format: extensionAlias(string) => configuration(mixed[])
104+ * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
105+ * @param mixed[][]|array $configurationsByAlias format: extensionAlias(string) => configuration(mixed[])
101106 */
102- private function loadExtensions (array $ configuration = []): void
107+ private static function loadRegisteredExtensionsUsingConfigurationByAlias (
108+ ContainerBuilder $ container ,
109+ array $ configurationsByAlias = []
110+ ): void
103111 {
104- $ configurations = [];
105- foreach ($ this ->container ->getExtensions () as $ extensionAlias => $ extension ) {
106- $ configurations [$ extensionAlias ] = [];
107- if (array_key_exists ($ extensionAlias , $ this ->getMinimalConfiguration ())) {
108- $ this ->container ->loadFromExtension ($ extensionAlias , $ this ->getMinimalConfiguration ()[$ extensionAlias ]);
109- $ configurations [$ extensionAlias ][] = $ this ->getMinimalConfiguration ()[$ extensionAlias ];
110- }
111- if (array_key_exists ($ extensionAlias , $ configuration )) {
112- $ this ->container ->loadFromExtension ($ extensionAlias , $ configuration [$ extensionAlias ]);
113- $ configurations [$ extensionAlias ][] = $ configuration [$ extensionAlias ];
114- }
115- }
116- foreach ($ this ->container ->getExtensions () as $ extensionAlias => $ extension ) {
112+ foreach ($ container ->getExtensions () as $ extension ) {
117113 if ($ extension instanceof PrependExtensionInterface) {
118- $ extension ->prepend ($ this -> container );
114+ $ extension ->prepend ($ container );
119115 }
120116 }
121- foreach ($ this ->container ->getExtensions () as $ extensionAlias => $ extension ) {
122- $ extension ->load ($ configurations [$ extensionAlias ], $ this ->container );
117+
118+ foreach ($ container ->getExtensions () as $ extensionAlias => $ extension ) {
119+ $ configuration = [];
120+
121+ if (array_key_exists ($ extensionAlias , $ configurationsByAlias )) {
122+ $ configuration = $ configurationsByAlias [$ extensionAlias ];
123+ }
124+
125+ $ extension ->load ([$ configuration ], $ container );
123126 }
124127 }
125128
129+ private static function assertContainerHasParameter (
130+ ContainerBuilder $ container ,
131+ string $ parameterName
132+ ): void
133+ {
134+ Assert::assertTrue (
135+ $ container ->hasParameter ($ parameterName ),
136+ sprintf ('Expecting the container to have parameter `%s`. ' , $ parameterName )
137+ );
138+ }
139+
126140}
0 commit comments