|
31 | 31 | use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
|
32 | 32 | use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
|
33 | 33 | use Symfony\Component\Messenger\Middleware\StackInterface;
|
| 34 | +use Symfony\Component\Messenger\Tests\Fixtures\ChildDummyMessage; |
34 | 35 | use Symfony\Component\Messenger\Tests\Fixtures\DummyCommand;
|
35 | 36 | use Symfony\Component\Messenger\Tests\Fixtures\DummyCommandHandler;
|
36 | 37 | use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
|
|
39 | 40 | use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessage;
|
40 | 41 | use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessageHandler;
|
41 | 42 | use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
|
| 43 | +use Symfony\Component\Messenger\Tests\Fixtures\UnionBuiltinTypeArgumentHandler; |
| 44 | +use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeArgumentHandler; |
42 | 45 | use Symfony\Component\Messenger\Transport\AmqpExt\AmqpReceiver;
|
43 | 46 | use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
|
44 | 47 |
|
@@ -474,6 +477,43 @@ public function testBuiltinArgumentTypeHandler()
|
474 | 477 | (new MessengerPass())->process($container);
|
475 | 478 | }
|
476 | 479 |
|
| 480 | + /** |
| 481 | + * @requires PHP 8 |
| 482 | + */ |
| 483 | + public function testUnionTypeArgumentsTypeHandler() |
| 484 | + { |
| 485 | + $container = $this->getContainerBuilder($busId = 'message_bus'); |
| 486 | + $container |
| 487 | + ->register(UnionTypeArgumentHandler::class, UnionTypeArgumentHandler::class) |
| 488 | + ->addTag('messenger.message_handler') |
| 489 | + ; |
| 490 | + |
| 491 | + (new MessengerPass())->process($container); |
| 492 | + |
| 493 | + $handlersMapping = $container->getDefinition($busId.'.messenger.handlers_locator')->getArgument(0); |
| 494 | + |
| 495 | + $this->assertArrayHasKey(ChildDummyMessage::class, $handlersMapping); |
| 496 | + $this->assertArrayHasKey(DummyMessage::class, $handlersMapping); |
| 497 | + $this->assertHandlerDescriptor($container, $handlersMapping, ChildDummyMessage::class, [UnionTypeArgumentHandler::class]); |
| 498 | + $this->assertHandlerDescriptor($container, $handlersMapping, DummyMessage::class, [UnionTypeArgumentHandler::class]); |
| 499 | + } |
| 500 | + |
| 501 | + /** |
| 502 | + * @requires PHP 8 |
| 503 | + */ |
| 504 | + public function testUnionBuiltinArgumentTypeHandler() |
| 505 | + { |
| 506 | + $this->expectException(RuntimeException::class); |
| 507 | + $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)); |
| 508 | + $container = $this->getContainerBuilder(); |
| 509 | + $container |
| 510 | + ->register(UnionBuiltinTypeArgumentHandler::class, UnionBuiltinTypeArgumentHandler::class) |
| 511 | + ->addTag('messenger.message_handler') |
| 512 | + ; |
| 513 | + |
| 514 | + (new MessengerPass())->process($container); |
| 515 | + } |
| 516 | + |
477 | 517 | public function testNeedsToHandleAtLeastOneMessage()
|
478 | 518 | {
|
479 | 519 | $this->expectException(RuntimeException::class);
|
|
0 commit comments