22
33namespace Stof \DoctrineExtensionsBundle \Tests \DependencyInjection ;
44
5+ use Doctrine \Common \Annotations \AnnotationReader ;
6+ use Doctrine \Common \EventSubscriber ;
57use Stof \DoctrineExtensionsBundle \DependencyInjection \StofDoctrineExtensionsExtension ;
68use PHPUnit \Framework \TestCase ;
79use Symfony \Component \DependencyInjection \ContainerBuilder ;
@@ -43,11 +45,12 @@ public function testLoadORMConfig($listener)
4345
4446 $ def = $ container ->getDefinition ('stof_doctrine_extensions.listener. ' .$ listener );
4547
46- $ this ->assertTrue ($ def ->hasTag ('doctrine.event_subscriber ' ));
48+ $ this ->assertTrue ($ def ->hasTag ('doctrine.event_listener ' ));
4749
48- $ tags = $ def ->getTag ('doctrine.event_subscriber ' );
50+ $ tags = $ def ->getTag ('doctrine.event_listener ' );
51+ $ configuredManagers = array_unique (array_column ($ tags , 'connection ' ));
4952
50- $ this ->assertCount (2 , $ tags );
53+ $ this ->assertCount (2 , $ configuredManagers );
5154 }
5255
5356 /**
@@ -69,11 +72,12 @@ public function testLoadMongodbConfig($listener)
6972
7073 $ def = $ container ->getDefinition ('stof_doctrine_extensions.listener. ' .$ listener );
7174
72- $ this ->assertTrue ($ def ->hasTag ('doctrine_mongodb.odm.event_subscriber ' ));
75+ $ this ->assertTrue ($ def ->hasTag ('doctrine_mongodb.odm.event_listener ' ));
7376
74- $ tags = $ def ->getTag ('doctrine_mongodb.odm.event_subscriber ' );
77+ $ tags = $ def ->getTag ('doctrine_mongodb.odm.event_listener ' );
78+ $ configuredManagers = array_unique (array_column ($ tags , 'connection ' ));
7579
76- $ this ->assertCount (2 , $ tags );
80+ $ this ->assertCount (2 , $ configuredManagers );
7781 }
7882
7983 /**
@@ -95,10 +99,37 @@ public function testLoadBothConfig($listener)
9599
96100 $ def = $ container ->getDefinition ('stof_doctrine_extensions.listener. ' .$ listener );
97101
98- $ this ->assertTrue ($ def ->hasTag ('doctrine.event_subscriber ' ));
99- $ this ->assertTrue ($ def ->hasTag ('doctrine_mongodb.odm.event_subscriber ' ));
102+ $ this ->assertTrue ($ def ->hasTag ('doctrine.event_listener ' ));
103+ $ this ->assertTrue ($ def ->hasTag ('doctrine_mongodb.odm.event_listener ' ));
100104
101- $ this ->assertCount (1 , $ def ->getTag ('doctrine.event_subscriber ' ));
102- $ this ->assertCount (1 , $ def ->getTag ('doctrine_mongodb.odm.event_subscriber ' ));
105+ $ this ->assertCount (1 , array_unique (array_column ($ def ->getTag ('doctrine.event_listener ' ), 'connection ' )));
106+ $ this ->assertCount (1 , array_unique (array_column ($ def ->getTag ('doctrine_mongodb.odm.event_listener ' ), 'connection ' )));
107+ }
108+
109+ /**
110+ * @dataProvider provideExtensions
111+ */
112+ public function testEventConsistency (string $ listener )
113+ {
114+ $ extension = new StofDoctrineExtensionsExtension ();
115+ $ container = new ContainerBuilder ();
116+ $ container ->register ('annotation_reader ' , AnnotationReader::class);
117+
118+ $ config = array ('orm ' => array (
119+ 'default ' => array ($ listener => true ),
120+ ));
121+
122+ $ extension ->load (array ($ config ), $ container );
123+
124+ $ def = $ container ->getDefinition ('stof_doctrine_extensions.listener. ' .$ listener );
125+ $ configuredEvents = array_column ($ def ->getTag ('doctrine.event_listener ' ), 'event ' );
126+
127+ $ listenerInstance = $ container ->get ('stof_doctrine_extensions.listener. ' .$ listener );
128+
129+ if (!$ listenerInstance instanceof EventSubscriber) {
130+ $ this ->markTestSkipped (sprintf ('The listener for "%s" is not a Doctrine event subscriber. ' , $ listener ));
131+ }
132+
133+ $ this ->assertEqualsCanonicalizing ($ listenerInstance ->getSubscribedEvents (), $ configuredEvents );
103134 }
104135}
0 commit comments