diff --git a/src/DI/Pass/TransportFactoryPass.php b/src/DI/Pass/TransportFactoryPass.php index b09b738..887a04b 100644 --- a/src/DI/Pass/TransportFactoryPass.php +++ b/src/DI/Pass/TransportFactoryPass.php @@ -72,7 +72,7 @@ public function beforePassCompile(): void { $builder = $this->getContainerBuilder(); - // Register Doctrine transport factory when ConnectionRegistry is available + // Register Doctrine transport factory when ConnectionRegistry is available (unless already defined via config) if (class_exists(DoctrineTransportFactory::class) && interface_exists(ConnectionRegistry::class)) { if ( $builder->getByType(ConnectionRegistry::class, false) !== null diff --git a/tests/Cases/DI/MessengerExtension.transport.phpt b/tests/Cases/DI/MessengerExtension.transport.phpt index 137128f..b8c18cc 100644 --- a/tests/Cases/DI/MessengerExtension.transport.phpt +++ b/tests/Cases/DI/MessengerExtension.transport.phpt @@ -147,6 +147,27 @@ Toolkit::test(function (): void { Assert::count(1, $container->findByTag(MessengerExtension::FAILURE_TRANSPORT_TAG)); }); +// Doctrine transport factory registered when explicitly defined in NEON +Toolkit::test(static function (): void { + $container = Container::of() + ->withDefaults() + ->withCompiler(static function (Compiler $compiler): void { + $compiler->addConfig(Helpers::neon(<<<'NEON' + messenger: + transportFactory: + doctrine: Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransportFactory + services: + connectionRegistry: Tests\Mocks\Doctrine\DummyConnectionRegistry + NEON + )); + }) + ->build(); + + // 6 = sync + inMemory + amqp + redis + doctrine + main TransportFactory + Assert::count(6, $container->findByType(TransportFactoryInterface::class)); + Assert::true($container->hasService('messenger.transportFactory.doctrine')); +}); + // Doctrine transport factory not registered without ConnectionRegistry Toolkit::test(static function (): void { $container = Container::of()