8000 bug #27651 [Messenger] Fixed MessengerPass::guessHandledClasses retur… · symfony/symfony@389fa4d · GitHub
[go: up one dir, main page]

Skip to content

Commit 389fa4d

Browse files
bug #27651 [Messenger] Fixed MessengerPass::guessHandledClasses return type (massimilianobraglia)
This PR was merged into the 4.1 branch. Discussion ---------- [Messenger] Fixed MessengerPass::guessHandledClasses return type | Q | A | ------------- | --- | Branch? | 4.1 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | no | Fixed tickets | #27633 | License | MIT | Doc PR | ø #27633 should have been merged to 4.1. Commits ------- d6b6e96 [Messenger] Fixed MessengerPass::guessHandledClasses return type
2 parents 20147fc + d6b6e96 commit 389fa4d

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ private function registerHandlers(ContainerBuilder $container, array $busIds)
185185
}
186186
}
187187

188-
private function guessHandledClasses(\ReflectionClass $handlerClass, string $serviceId): array
188+
private function guessHandledClasses(\ReflectionClass $handlerClass, string $serviceId): iterable
189189
{
190190
if ($handlerClass->implementsInterface(MessageSubscriberInterface::class)) {
191191
if (!$handledMessages = $handlerClass->getName()::getHandledMessages()) {

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,23 @@ public function testItRegistersSenderWithoutTagName()
274274
$this->assertEquals(array(AmqpSender::class => new Reference(AmqpSender::class)), $container->getDefinition('messenger.sender_locator')->getArgument(0));
275275
}
276276

277+
public function testItShouldNotThrowIfGeneratorIsReturnedInsteadOfArray()
278+
{
279+
$container = $this->getContainerBuilder($busId = 'message_bus');
280+
$container
281+
->register(HandlerWithGenerators::class, HandlerWithGenerators::class)
282+
->addTag('messenger.message_handler')
283+
;
284+
285+
(new MessengerPass())->process($container);
286+
287+
$handlerLocatorDefinition = $container->getDefinition($container->getDefinition("$busId.messenger.handler_resolver")->getArgument(0));
288+
$handlerMapping = $handlerLocatorDefinition->getArgument(0);
289+
290+
$this->assertArrayHasKey('handler.'.DummyMessage::class, $handlerMapping);
291+
$this->assertArrayHasKey('handler.'.SecondMessage::class, $handlerMapping);
292+
}
293+
277294
/**
278295
* @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
279296
* @expectedExceptionMessage Invalid sender "app.messenger.sender": class "Symfony\Component\Messenger\Tests\DependencyInjection\InvalidSender" must implement interface "Symfony\Component\Messenger\Transport\SenderInterface".
@@ -685,6 +702,23 @@ public function __invoke()
685702
}
686703
}
687704

705+
class HandlerWithGenerators implements MessageSubscriberInterface
706+
{
707+
public static function getHandledMessages(): iterable
708+
{
709+
yield DummyMessage::class => 'dummyMethod';
710+
yield SecondMessage::class => 'secondMessage';
711+
}
712+
713+
public function dummyMethod()
714+
{
715+
}
716+
717+
public function secondMessage()
718+
{
719+
}
720+
}
721+
688722
class UselessMiddleware implements MiddlewareInterface
689723
{
690724
public function handle($message, callable $next)

0 commit comments

Comments
 (0)
0