2121namespace MongoDB \Bundle \Tests \Unit \DependencyInjection ;
2222
2323use InvalidArgumentException ;
24+ use MongoDB \Bundle \DependencyInjection \Compiler \DataCollectorPass ;
2425use MongoDB \Bundle \DependencyInjection \MongoDBExtension ;
2526use MongoDB \Client ;
2627use MongoDB \Driver \ServerApi ;
2728use PHPUnit \Framework \TestCase ;
2829use Symfony \Component \DependencyInjection \ContainerBuilder ;
30+ use Symfony \Component \DependencyInjection \Definition ;
2931use Symfony \Component \DependencyInjection \ParameterBag \EnvPlaceholderParameterBag ;
3032
3133/** @covers \MongoDB\Bundle\DependencyInjection\MongoDBExtension */
@@ -50,7 +52,8 @@ public function testLoadWithSingleClient(): void
5052 'clients ' => [
5153 ['id ' => 'default ' , 'uri ' => 'mongodb://localhost:27017 ' ],
5254 ],
53- ],
55+ ]], [
56+ 'profiler ' => new Definition (\stdClass::class),
5457 ]);
5558
5659 $ this ->assertTrue ($ container ->hasDefinition ('mongodb.client.default ' ));
@@ -61,10 +64,33 @@ public function testLoadWithSingleClient(): void
6164 $ definition = $ container ->getDefinition ('mongodb.client.default ' );
6265 $ this ->assertTrue (is_a ($ definition ->getClass (), Client::class, true ), sprintf ('Expected "%s" to be a "%s" ' , $ definition ->getClass (), Client::class));
6366 $ this ->assertSame ('mongodb://localhost:27017 ' , $ definition ->getArgument ('$uri ' ));
67+ $ this ->assertTrue ($ definition ->hasMethodCall ('addSubscriber ' ));
6468
6569 // Check alias definition
6670 $ alias = $ container ->getAlias (Client::class);
6771 $ this ->assertSame ('mongodb.client.default ' , (string ) $ alias );
72+
73+ // Check data collector
74+ $ definition = $ container ->getDefinition ('mongodb.data_collector ' );
75+ $ this ->assertTrue ($ definition ->hasMethodCall ('addClient ' ));
76+ $ this ->assertSame ('default ' , $ definition ->getMethodCalls ()[0 ][1 ][0 ]);
77+ }
78+
79+ public function testLoadWithoutProfiler (): void
80+ {
81+ $ container = $ this ->getContainer ([[
82+ 'clients ' => [
83+ ['id ' => 'default ' , 'uri ' => 'mongodb://localhost:27017 ' ],
84+ ],
85+ ]]);
86+
87+ // Check service definition
88+ $ definition = $ container ->getDefinition ('mongodb.client.default ' );
89+ $ this ->assertFalse ($ definition ->hasMethodCall ('addSubscriber ' ));
90+
91+ // Check data collector
92+ $ definition = $ container ->getDefinition ('mongodb.data_collector ' );
93+ $ this ->assertFalse ($ definition ->hasMethodCall ('addClient ' ));
6894 }
6995
7096 public function testLoadWithMultipleClients (): void
@@ -83,7 +109,8 @@ public function testLoadWithMultipleClients(): void
83109 'driverOptions ' => ['serverApi ' => new ServerApi ((string ) ServerApi::V1 )],
84110 ],
85111 ],
86- ],
112+ ]], [
113+ 'profiler ' => new Definition (\stdClass::class),
87114 ]);
88115
89116 $ this ->assertTrue ($ container ->hasDefinition ('mongodb.client.default ' ));
@@ -96,11 +123,19 @@ public function testLoadWithMultipleClients(): void
96123 $ this ->assertTrue (is_a ($ definition ->getClass (), Client::class, true ), sprintf ('Expected "%s" to be a "%s" ' , $ definition ->getClass (), Client::class));
97124 $ this ->assertSame ('mongodb://localhost:27017 ' , $ definition ->getArgument ('$uri ' ));
98125 $ this ->assertSame (['readPreference ' => 'primary ' ], $ definition ->getArgument ('$uriOptions ' ));
126+ $ this ->assertTrue ($ definition ->hasMethodCall ('addSubscriber ' ));
99127
100128 $ definition = $ container ->getDefinition ('mongodb.client.secondary ' );
101129 $ this ->assertTrue (is_a ($ definition ->getClass (), Client::class, true ), sprintf ('Expected "%s" to be a "%s" ' , $ definition ->getClass (), Client::class));
102130 $ this ->assertSame ('mongodb://localhost:27018 ' , $ definition ->getArgument ('$uri ' ));
103131 $ this ->assertEquals (['serverApi ' => new ServerApi ((string ) ServerApi::V1 )], $ definition ->getArgument ('$driverOptions ' ));
132+ $ this ->assertTrue ($ definition ->hasMethodCall ('addSubscriber ' ));
133+
134+ // Check data collector
135+ $ definition = $ container ->getDefinition ('mongodb.data_collector ' );
136+ $ this ->assertCount (2 , $ definition ->getMethodCalls ());
137+ $ this ->assertTrue ($ definition ->hasMethodCall ('addClient ' ));
138+ $ this ->assertSame (['default ' , 'secondary ' ], array_column (array_column ($ definition ->getMethodCalls (), 1 ), 0 ));
104139 }
105140
106141 private function getContainer (array $ config = [], array $ thirdPartyDefinitions = []): ContainerBuilder
@@ -113,6 +148,7 @@ private function getContainer(array $config = [], array $thirdPartyDefinitions =
113148
114149 $ container ->getCompilerPassConfig ()->setOptimizationPasses ([]);
115150 $ container ->getCompilerPassConfig ()->setRemovingPasses ([]);
151+ $ container ->addCompilerPass (new DataCollectorPass ());
116152
117153 $ loader = new MongoDBExtension ();
118154 $ loader ->load ($ config , $ container );
0 commit comments