diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon deleted file mode 100644 index f509d41..0000000 --- a/phpstan-baseline.neon +++ /dev/null @@ -1,21 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Class Macpaw\\\\SchemaContextBundle\\\\Messenger\\\\Transport\\\\DoctrineTransportFactoryDecorator implements generic interface Symfony\\\\Component\\\\Messenger\\\\Transport\\\\TransportFactoryInterface but does not specify its types\\: TTransport$#" - count: 1 - path: src/Messenger/Transport/DoctrineTransportFactoryDecorator.php - - - - message: "#^Method Macpaw\\\\SchemaContextBundle\\\\Messenger\\\\Transport\\\\DoctrineTransportFactoryDecorator\\:\\:__construct\\(\\) has parameter \\$decoratedFactory with generic interface Symfony\\\\Component\\\\Messenger\\\\Transport\\\\TransportFactoryInterface but does not specify its types\\: TTransport$#" - count: 1 - path: src/Messenger/Transport/DoctrineTransportFactoryDecorator.php - - - - message: "#^Method Macpaw\\\\SchemaContextBundle\\\\Messenger\\\\Transport\\\\DoctrineTransportFactoryDecorator\\:\\:createTransport\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Messenger/Transport/DoctrineTransportFactoryDecorator.php - - - - message: "#^Method Macpaw\\\\SchemaContextBundle\\\\Messenger\\\\Transport\\\\DoctrineTransportFactoryDecorator\\:\\:supports\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Messenger/Transport/DoctrineTransportFactoryDecorator.php diff --git a/phpstan.neon b/phpstan.neon index 4fd315c..f6ecc8a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,6 +1,3 @@ -includes: - - phpstan-baseline.neon - parameters: level: max paths: diff --git a/src/DependencyInjection/SchemaContextCompilerPass.php b/src/DependencyInjection/SchemaContextCompilerPass.php index 5e439c4..5ce7836 100644 --- a/src/DependencyInjection/SchemaContextCompilerPass.php +++ b/src/DependencyInjection/SchemaContextCompilerPass.php @@ -4,36 +4,12 @@ namespace Macpaw\SchemaContextBundle\DependencyInjection; -use Macpaw\SchemaContextBundle\Messenger\Transport\DoctrineTransportFactoryDecorator; -use Macpaw\SchemaContextBundle\Service\BaggageSchemaResolver; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Reference; final class SchemaContextCompilerPass implements CompilerPassInterface { - public const TARGET_ID = 'messenger.transport.doctrine.factory'; - public const DECORATOR_ID = 'messenger.doctrine_transport_factory.decorator'; - public function process(ContainerBuilder $container): void { - if ($container->hasDefinition(self::TARGET_ID) === false) { - return; - } - - $def = new Definition(DoctrineTransportFactoryDecorator::class); - $def->setAutowired(true); // avoid pulling the chain or adding tags - $def->setAutoconfigured(true); - $def->setPublic(false); - - // Decorate the *target* id; explicit inner id is ".inner" - $def->setDecoratedService(self::TARGET_ID, self::DECORATOR_ID . '.inner'); - - // Inject the inner/original factory + your resolver - $def->setArgument('$decoratedFactory', new Reference(self::DECORATOR_ID . '.inner')); - $def->setArgument('$baggageSchemaResolver', new Reference(BaggageSchemaResolver::class)); - - $container->setDefinition(self::DECORATOR_ID, $def); } } diff --git a/src/Messenger/Transport/DoctrineTransportFactoryDecorator.php b/src/Messenger/Transport/DoctrineTransportFactoryDecorator.php deleted file mode 100644 index d6c9a66..0000000 --- a/src/Messenger/Transport/DoctrineTransportFactoryDecorator.php +++ /dev/null @@ -1,47 +0,0 @@ -baggageSchemaResolver->getSchema(); - - $originalTableName = sprintf( - '"%s"."%s"', - $currentSchema, - $options['table_name'] ?? 'messenger_messages', - ); - - // Create transport with schema-prefixed table name - $options['table_name'] = $originalTableName; - - // Create transport with the original factory - return $this->decoratedFactory->createTransport($dsn, $options, $serializer); - } - - public function supports(string $dsn, array $options): bool - { - return $this->decoratedFactory->supports($dsn, $options); - } -} diff --git a/tests/Messenger/Transport/DoctrineTransportFactoryDecoratorTest.php b/tests/Messenger/Transport/DoctrineTransportFactoryDecoratorTest.php deleted file mode 100644 index 99df647..0000000 --- a/tests/Messenger/Transport/DoctrineTransportFactoryDecoratorTest.php +++ /dev/null @@ -1,139 +0,0 @@ -createMock(ContainerBuilder::class); - - $containerBuilder->expects(self::once()) - ->method('hasDefinition') - ->willReturn(false); - - $containerBuilder->expects(self::never()) - ->method('setDefinition'); - - $compilerPass->process($containerBuilder); - } - - public function testCompilerPassRegisterDecoratorService(): void - { - $compilerPass = new SchemaContextCompilerPass(); - - $containerBuilder = $this->createMock(ContainerBuilder::class); - - $containerBuilder->expects(self::once()) - ->method('hasDefinition') - ->willReturn(true); - - $containerBuilder->expects(self::once()) - ->method('setDefinition') - ->with( - self::equalTo(SchemaContextCompilerPass::DECORATOR_ID), - self::callback(function (Definition $definition): bool { - // You can assert partial properties here - self::assertSame( - DoctrineTransportFactoryDecorator::class, - $definition->getClass(), - ); - - self::assertFalse($definition->isPublic()); - self::assertTrue($definition->isAutowired()); - self::assertTrue($definition->isAutoconfigured()); - self::assertIsArray($definition->getDecoratedService()); - self::assertArrayHasKey(0, $definition->getDecoratedService()); - self::assertEquals( - SchemaContextCompilerPass::TARGET_ID, - $definition->getDecoratedService()[0], - ); - - // Optional: check arguments only if needed - $args = $definition->getArguments(); - self::assertArrayHasKey('$decoratedFactory', $args); - - return true; - }), - ); - - $compilerPass->process($containerBuilder); - } - - public function testSchemaIsOverride(): void - { - $environmentSchema = 'default'; - $environmentName = 'dev'; - $schemaOverridableEnvironments = ['dev', 'test']; - - $doctrineTransportMock = $this->createMock(TransportFactoryInterface::class); - $baggage = new BaggageSchemaResolver($environmentSchema, $environmentName, $schemaOverridableEnvironments); - $baggage->setSchema('test_schema'); - - $decorator = new DoctrineTransportFactoryDecorator( - $doctrineTransportMock, - $baggage, - ); - - $doctrineTransportMock->expects(self::once()) - ->method('createTransport') - ->with( - self::equalTo(''), - self::callback(function (array $options): bool { - self::assertArrayHasKey('table_name', $options); - self::assertEquals('"test_schema"."messenger_messages"', $options['table_name']); - - return true; - }), - ); - - $decorator->createTransport('', [], $this->createMock(SerializerInterface::class)); - } - - public function testSchemaIsDefault(): void - { - $environmentSchema = 'default'; - $environmentName = 'dev'; - $schemaOverridableEnvironments = ['dev', 'test']; - - $doctrineTransportMock = $this->createMock(TransportFactoryInterface::class); - $baggage = new BaggageSchemaResolver($environmentSchema, $environmentName, $schemaOverridableEnvironments); - $baggage->setSchema('default'); - - $decorator = new DoctrineTransportFactoryDecorator( - $doctrineTransportMock, - $baggage, - ); - - $doctrineTransportMock->expects(self::once()) - ->method('createTransport') - ->with( - self::equalTo(''), - self::callback(function (array $options): bool { - self::assertArrayHasKey('table_name', $options); - self::assertEquals('"default"."messenger_messages"', $options['table_name']); - - return true; - }), - ); - - $decorator->createTransport( - '', - ['table_name' => 'messenger_messages'], - $this->createMock(SerializerInterface::class), - ); - } -}