8000 add tests covering union types in MessengerPass · symfony/symfony@0bb3d84 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0bb3d84

Browse files
committed
add tests covering union types in MessengerPass
1 parent 7023db1 commit 0bb3d84

File tree

4 files changed

+83
-0
lines changed

4 files changed

+83
-0
lines changed

src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,20 @@ private function guessHandledClasses(\ReflectionClass $handlerClass, string $ser
230230

231231
if ($type instanceof \ReflectionUnionType) {
232232
$types = [];
233+
$invalidTypes = [];
233234
foreach ($type->getTypes() as $type) {
234235
if (!$type->isBuiltin()) {
235236
$types[] = (string) $type;
237+
} else {
238+
$invalidTypes[] = (string) $type;
236239
}
237240
}
238241

239242
if ($types) {
240243
return $types;
241244
}
245+
246+
throw new RuntimeException(sprintf('Invalid handler service "%s": type-hint of argument "$%s" in method "%s::__invoke()" must be a class , "%s" given.', $serviceId, $parameters[0]->getName(), $handlerClass->getName(), implode('|', $invalidTypes)));
242247
}
243248

244249
if ($type->isBuiltin()) {

src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
3232
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
3333
use Symfony\Component\Messenger\Middleware\StackInterface;
34+
use Symfony\Component\Messenger\Tests\Fixtures\ChildDummyMessage;
3435
use Symfony\Component\Messenger\Tests\Fixtures\DummyCommand;
3536
use Symfony\Component\Messenger\Tests\Fixtures\DummyCommandHandler;
3637
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
@@ -39,6 +40,8 @@
3940
use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessage;
4041
use Symfony\Component\Messenger\Tests\Fixtures\MultipleBusesMessageHandler;
4142
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
43+
use Symfony\Component\Messenger\Tests\Fixtures\UnionBuiltinTypeArgumentHandler;
44+
use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeArgumentHandler;
4245
use Symfony\Component\Messenger\Transport\AmqpExt\AmqpReceiver;
4346
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
4447

@@ -474,6 +477,43 @@ public function testBuiltinArgumentTypeHandler()
474477
(new MessengerPass())->process($container);
475478
}
476479

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+
477517
public function testNeedsToHandleAtLeastOneMessage()
478518
{
479519
$this->expectException(RuntimeException::class);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Tests\Fixtures;
13+
14+
class UnionBuiltinTypeArgumentHandler
15+
{
16+
public function __invoke(string|int $message): void
17+
{
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Messenger\Tests\Fixtures;
13+
14+
class UnionTypeArgumentHandler
15+
{
16+
public function __invoke(ChildDummyMessage|DummyMessage $message): void
17+
{
18+
}
19+
}

0 commit comments

Comments
 (0)
0