|
13 | 13 |
|
14 | 14 | use PHPUnit\Framework\TestCase;
|
15 | 15 | use Symfony\Component\DependencyInjection\ChildDefinition;
|
| 16 | +use Symfony\Component\DependencyInjection\Compiler\AttributeAutoconfigurationPass; |
16 | 17 | use Symfony\Component\DependencyInjection\Compiler\ResolveChildDefinitionsPass;
|
17 | 18 | use Symfony\Component\DependencyInjection\Compiler\ResolveClassPass;
|
| 19 | +use Symfony\Component\DependencyInjection\Compiler\ResolveInstanceofConditionalsPass; |
18 | 20 | use Symfony\Component\DependencyInjection\ContainerBuilder;
|
19 | 21 | use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
20 | 22 | use Symfony\Component\DependencyInjection\Reference;
|
21 | 23 | use Symfony\Component\DependencyInjection\ServiceLocator;
|
| 24 | +use Symfony\Component\Messenger\Attribute\AsMessageHandler; |
22 | 25 | use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceiver;
|
23 | 26 | use Symfony\Component\Messenger\Command\ConsumeMessagesCommand;
|
24 | 27 | use Symfony\Component\Messenger\Command\DebugCommand;
|
|
43 | 46 | use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessage;
|
44 | 47 | use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessageHandler;
|
45 | 48 | use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
|
| 49 | +use Symfony\Component\Messenger\Tests\Fixtures\TaggedDummyHandler; |
46 | 50 | use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
|
47 | 51 |
|
48 | 52 | class MessengerPassTest extends TestCase
|
@@ -101,6 +105,37 @@ public function testFromTransportViaTagAttribute()
|
101 | 105 | $this->assertHandlerDescriptor($container, $handlerDescriptionMapping, DummyMessage::class, [DummyHandler::class], [['from_transport' => 'async']]);
|
102 | 106 | }
|
103 | 107 |
|
| 108 | + /** |
| 109 | + * @requires PHP 8 |
| 110 | + */ |
| 111 | + public function testTaggedMessageHandler() |
| 112 | + { |
| 113 | + $container = $this->getContainerBuilder($busId = 'message_bus'); |
| 114 | + $container->registerAttributeForAutoconfiguration(AsMessageHandler::class, static function (ChildDefinition $definition, AsMessageHandler $attribute): void { |
| 115 | + $tagAttributes = get_object_vars($attribute); |
| 116 | + $tagAttributes['from_transport'] = $tagAttributes['fromTransport']; |
| 117 | + unset($tagAttributes['fromTransport']); |
| 118 | + |
| 119 | + $definition->addTag('messenger.message_handler', $tagAttributes); |
| 120 | + }); |
| 121 | + $container |
| 122 | + ->register(TaggedDummyHandler::class, TaggedDummyHandler::class) |
| 123 | + ->setAutoconfigured(true) |
| 124 | + ; |
| 125 | + |
| 126 | + (new AttributeAutoconfigurationPass())->process($container); |
| 127 | + (new ResolveInstanceofConditionalsPass())->process($container); |
| 128 | + (new MessengerPass())->process($container); |
| 129 | + |
| 130 | + $handlersLocatorDefinition = $container->getDefinition($busId.'.messenger.handlers_locator'); |
| 131 | + $this->assertSame(HandlersLocator::class, $handlersLocatorDefinition->getClass()); |
| 132 | + |
| 133 | + $handlerDescriptionMapping = $handlersLocatorDefinition->getArgument(0); |
| 134 | + $this->assertCount(1, $handlerDescriptionMapping); |
| 135 | + |
| 136 | + $this->assertHandlerDescriptor($container, $handlerDescriptionMapping, DummyMessage::class, [TaggedDummyHandler::class], [[]]); |
| 137 | + } |
| 138 | + |
104 | 139 | public function testProcessHandlersByBus()
|
105 | 140 | {
|
106 | 141 | $container = $this->getContainerBuilder($commandBusId = 'command_bus');
|
|
0 commit comments