From c4e5e83b56506758c82109425f472049835bb586 Mon Sep 17 00:00:00 2001 From: Dirk39 Date: Sat, 27 Apr 2019 12:52:21 +0200 Subject: [PATCH] [Messenger] RoutableMessageBus route to default bus --- .../Messenger/RoutableMessageBus.php | 10 +++---- .../Tests/RoutableMessageBusTest.php | 28 ++++++++++++++++--- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/Messenger/RoutableMessageBus.php b/src/Symfony/Component/Messenger/RoutableMessageBus.php index aa5421eeb7b1c..1cdd5f38df938 100644 --- a/src/Symfony/Component/Messenger/RoutableMessageBus.php +++ b/src/Symfony/Component/Messenger/RoutableMessageBus.php @@ -45,14 +45,12 @@ public function dispatch($envelope, array $stamps = []): Envelope /** @var BusNameStamp $busNameStamp */ $busNameStamp = $envelope->last(BusNameStamp::class); - if (null === $busNameStamp) { - throw new InvalidArgumentException('Envelope does not contain a BusNameStamp.'); - } + $busName = null !== $busNameStamp ? $busNameStamp->getBusName() : MessageBusInterface::class; - if (!$this->busLocator->has($busNameStamp->getBusName())) { - throw new InvalidArgumentException(sprintf('Invalid bus name "%s" on BusNameStamp.', $busNameStamp->getBusName())); + if (!$this->busLocator->has($busName)) { + throw new InvalidArgumentException(sprintf('Bus name "%s" does not exists.', $busName)); } - return $this->busLocator->get($busNameStamp->getBusName())->dispatch($envelope, $stamps); + return $this->busLocator->get($busName)->dispatch($envelope, $stamps); } } diff --git a/src/Symfony/Component/Messenger/Tests/RoutableMessageBusTest.php b/src/Symfony/Component/Messenger/Tests/RoutableMessageBusTest.php index 2f6d9fed33fbf..ba9d5b9c22588 100644 --- a/src/Symfony/Component/Messenger/Tests/RoutableMessageBusTest.php +++ b/src/Symfony/Component/Messenger/Tests/RoutableMessageBusTest.php @@ -41,15 +41,35 @@ public function testItRoutesToTheCorrectBus() $this->assertSame($envelope, $routableBus->dispatch($envelope, [$stamp])); } - public function testItExceptionOnMissingStamp() + public function testItRoutesToDefaultBus() + { + $envelope = new Envelope(new \stdClass()); + $stamp = new DelayStamp(5); + $defaultBus = $this->createMock(MessageBusInterface::class); + $defaultBus->expects($this->once())->method('dispatch')->with($envelope, [$stamp]) + ->willReturn($envelope); + + $container = $this->createMock(ContainerInterface::class); + $container->expects($this->once())->method('has')->with(MessageBusInterface::class) + ->willReturn(true); + $container->expects($this->once())->method('get')->with(MessageBusInterface::class) + ->willReturn($defaultBus); + + $routableBus = new RoutableMessageBus($container); + + $this->assertSame($envelope, $routableBus->dispatch($envelope, [$stamp])); + } + + public function testItExceptionOnDefaultBusNotFound() { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('does not contain a BusNameStamp'); + $this->expectExceptionMessage(sprintf('Bus name "%s" does not exists.', MessageBusInterface::class)); $envelope = new Envelope(new \stdClass()); $container = $this->createMock(ContainerInterface::class); - $container->expects($this->never())->method('has'); + $container->expects($this->once())->method('has')->with(MessageBusInterface::class) + ->willReturn(false); $routableBus = new RoutableMessageBus($container); $routableBus->dispatch($envelope); @@ -58,7 +78,7 @@ public function testItExceptionOnMissingStamp() public function testItExceptionOnBusNotFound() { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Invalid bus name'); + $this->expectExceptionMessage(sprintf('Bus name "%s" does not exists.', 'foo_bus')); $envelope = new Envelope(new \stdClass(), [new BusNameStamp('foo_bus')]);