|
39 | 39 | use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
|
40 | 40 | use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
|
41 | 41 | use Symfony\Component\Messenger\Middleware\StackInterface;
|
| 42 | +use Symfony\Component\Messenger\Tests\Fixtures\ChildDummyMessage; |
42 | 43 | use Symfony\Component\Messenger\Tests\Fixtures\DummyCommand;
|
43 | 44 | use Symfony\Component\Messenger\Tests\Fixtures\DummyCommandHandler;
|
44 | 45 | use Symfony\Component\Messenger\Tests\Fixtures\DummyHandlerWithCustomMethods;
|
|
50 | 51 | use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
|
51 | 52 | use Symfony\Component\Messenger\Tests\Fixtures\TaggedDummyHandler;
|
52 | 53 | use Symfony\Component\Messenger\Tests\Fixtures\TaggedDummyHandlerWithUnionTypes;
|
| 54 | +use Symfony\Component\Messenger\Tests\Fixtures\UnionBuiltinTypeArgumentHandler; |
| 55 | +use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeArgumentHandler; |
53 | 56 | use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeOneMessage;
|
54 | 57 | use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeTwoMessage;
|
55 | 58 | use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
|
@@ -635,6 +638,37 @@ public function testBuiltinArgumentTypeHandler()
|
635 | 638 | (new MessengerPass())->process($container);
|
636 | 639 | }
|
637 | 640 |
|
| 641 | + public function testUnionTypeArgumentsTypeHandler() |
| 642 | + { |
| 643 | + $container = $this->getContainerBuilder($busId = 'message_bus'); |
| 644 | + $container |
| 645 | + ->register(UnionTypeArgumentHandler::class, UnionTypeArgumentHandler::class) |
| 646 | + ->addTag('messenger.message_handler') |
| 647 | + ; |
| 648 | + |
| 649 | + (new MessengerPass())->process($container); |
| 650 | + |
| 651 | + $handlersMapping = $container->getDefinition($busId.'.messenger.handlers_locator')->getArgument(0); |
| 652 | + |
| 653 | + $this->assertArrayHasKey(ChildDummyMessage::class, $handlersMapping); |
| 654 | + $this->assertArrayHasKey(DummyMessage::class, $handlersMapping); |
| 655 | + $this->assertHandlerDescriptor($container, $handlersMapping, ChildDummyMessage::class, [UnionTypeArgumentHandler::class]); |
| 656 | + $this->assertHandlerDescriptor($container, $handlersMapping, DummyMessage::class, [UnionTypeArgumentHandler::class]); |
| 657 | + } |
| 658 | + |
| 659 | + public function testUnionBuiltinArgumentTypeHandler() |
| 660 | + { |
| 661 | + $this->expectException(RuntimeException::class); |
| 662 | + $this->expectExceptionMessage(sprintf('Invalid handler service "%s": type-hint of argument "$message" in method "%s::__invoke()" must be a class , "string|int" given.', UnionBuiltinTypeArgumentHandler::class, UnionBuiltinTypeArgumentHandler::class)); |
| 663 | + $container = $this->getContainerBuilder(); |
| 664 | + $container |
| 665 | + ->register(UnionBuiltinTypeArgumentHandler::class, UnionBuiltinTypeArgumentHandler::class) |
| 666 | + ->addTag('messenger.message_handler') |
| 667 | + ; |
| 668 | + |
| 669 | + (new MessengerPass())->process($container); |
| 670 | + } |
| 671 | + |
638 | 672 | public function testNeedsToHandleAtLeastOneMessage()
|
639 | 673 | {
|
640 | 674 | $this->expectException(RuntimeException::class);
|
|
0 commit comments