Skip to content

Commit 966ebb1

Browse files
committed
Fixed return senders based on the message interface
1 parent c3d4536 commit 966ebb1

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

src/Symfony/Component/Messenger/Asynchronous/Routing/SenderLocator.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,14 @@ public function __construct(ContainerInterface $senderServiceLocator, array $mes
3232
*/
3333
public function getSendersForMessage($message): array
3434
{
35-
$senderIds = $this->messageToSenderIdsMapping[\get_class($message)] ?? $this->messageToSenderIdsMapping['*'] ?? array();
35+
$senderIds = array();
36+
if (isset($this->messageToSenderIdsMapping[\get_class($message)])) {
37+
$senderIds = $this->messageToSenderIdsMapping[\get_class($message)];
38+
} elseif ($messageToSenderIdsMapping = array_intersect_key($this->messageToSenderIdsMapping, class_implements($message, false))) {
39+
$senderIds = current($messageToSenderIdsMapping);
40+
} elseif (isset($this->messageToSenderIdsMapping['*'])) {
41+
$senderIds = $this->messageToSenderIdsMapping['*'];
42+
}
3643

3744
$senders = array();
3845
foreach ($senderIds as $senderId) {

src/Symfony/Component/Messenger/Tests/Asynchronous/Routing/SenderLocatorTest.php

+17
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\DependencyInjection\Container;
1616
use Symfony\Component\Messenger\Asynchronous\Routing\SenderLocator;
1717
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
18+
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessageInterface;
1819
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
1920
use Symfony\Component\Messenger\Transport\SenderInterface;
2021

@@ -36,6 +37,22 @@ public function testItReturnsTheSenderBasedOnTheMessageClass()
3637
$this->assertEquals(array(), $locator->getSendersForMessage(new SecondMessage()));
3738
}
3839

40+
public function testItReturnsTheSenderBasedOnTheMessageInterface()
41+
{
42+
$sender = $this->getMockBuilder(SenderInterface::class)->getMock();
43+
$container = new Container();
44+
$container->set('my_amqp_sender', $sender);
45+
46+
$locator = new SenderLocator($container, array(
47+
DummyMessageInterface::class => array(
48+
'my_amqp_sender',
49+
),
50+
));
51+
52+
$this->assertEquals(array($sender), $locator->getSendersForMessage(new DummyMessage('Hello')));
53+
$this->assertEquals(array(), $locator->getSendersForMessage(new SecondMessage()));
54+
}
55+
3956
public function testItSupportsAWildcardInsteadOfTheMessageClass()
4057
{
4158
$container = new Container();

src/Symfony/Component/Messenger/Tests/Fixtures/DummyMessage.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Symfony\Component\Messenger\Tests\Fixtures;
44

5-
class DummyMessage
5+
class DummyMessage implements DummyMessageInterface
66
{
77
private $message;
88

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Symfony\Component\Messenger\Tests\Fixtures;
4+
5+
interface DummyMessageInterface
6+
{
7+
}

0 commit comments

Comments
 (0)