Skip to content

Commit 2ca8a6b

Browse files
committed
Merge branch '6.0' into 6.1
* 6.0: remove no longer needed PHP version requirements from tests [Validator] [Security] Add Norwegian translations add tests covering union types in MessengerPass [HttpFoundation] Prevent BinaryFileResponse::prepare from adding content type if no content is sent
2 parents 49d402e + 5e444e7 commit 2ca8a6b

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

DependencyInjection/MessengerPass.php

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

225225
if ($type instanceof \ReflectionUnionType) {
226226
$types = [];
227+
$invalidTypes = [];
227228
foreach ($type->getTypes() as $type) {
228229
if (!$type->isBuiltin()) {
229230
$types[] = (string) $type;
231+
} else {
232+
$invalidTypes[] = (string) $type;
230233
}
231234
}
232235

233236
if ($types) {
234237
return ('__invoke' === $methodName) ? $types : array_fill_keys($types, $methodName);
235238
}
239+
240+
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)));
236241
}
237242

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

Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware;
4040
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
4141
use Symfony\Component\Messenger\Middleware\StackInterface;
42+
use Symfony\Component\Messenger\Tests\Fixtures\ChildDummyMessage;
4243
use Symfony\Component\Messenger\Tests\Fixtures\DummyCommand;
4344
use Symfony\Component\Messenger\Tests\Fixtures\DummyCommandHandler;
4445
use Symfony\Component\Messenger\Tests\Fixtures\DummyHandlerWithCustomMethods;
@@ -50,6 +51,8 @@
5051
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
5152
use Symfony\Component\Messenger\Tests\Fixtures\TaggedDummyHandler;
5253
use Symfony\Component\Messenger\Tests\Fixtures\TaggedDummyHandlerWithUnionTypes;
54+
use Symfony\Component\Messenger\Tests\Fixtures\UnionBuiltinTypeArgumentHandler;
55+
use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeArgumentHandler;
5356
use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeOneMessage;
5457
use Symfony\Component\Messenger\Tests\Fixtures\UnionTypeTwoMessage;
5558
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
@@ -635,6 +638,37 @@ public function testBuiltinArgumentTypeHandler()
635638
(new MessengerPass())->process($container);
636639
}
637640

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+
638672
public function testNeedsToHandleAtLeastOneMessage()
639673
{
640674
$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)