diff --git a/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php b/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php index 94441a3ae2378..2ae669b102611 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php +++ b/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php @@ -27,6 +27,7 @@ use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\HttpKernelInterface; +use Symfony\Component\Messenger\Envelope; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Csrf\CsrfToken; @@ -394,7 +395,7 @@ protected function isCsrfTokenValid(string $id, ?string $token): bool * * @final */ - protected function dispatchMessage($message) + protected function dispatchMessage($message): Envelope { if (!$this->container->has('message_bus')) { throw new \LogicException('The message bus is not enabled in your application. Try running "composer require symfony/messenger".'); diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index ac74e4309e3dd..366d0f519651a 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -6,7 +6,7 @@ CHANGELOG * The component is not experimental anymore * All the changes below are BC BREAKS - * `MessageBusInterface::dispatch()` and `MiddlewareInterface::handle()` now return `void` + * `MessageBusInterface::dispatch()`, `MiddlewareInterface::handle()` and `SenderInterface::send()` return `Envelope` * `MiddlewareInterface::handle()` now require an `Envelope` as first argument and a `StackInterface` as second * `EnvelopeAwareInterface` has been removed * The signature of `Amqp*` classes changed to take a `Connection` as a first argument and an optional @@ -31,7 +31,6 @@ CHANGELOG * `AbstractHandlerLocator` is now internal * `HandlerLocatorInterface::resolve()` has been replaced by `getHandler(Envelope $envelope): ?callable` and shouldn't throw when no handlers are found * `SenderLocatorInterface::getSenderForMessage()` has been replaced by `getSender(Envelope $envelope)` - * `SenderInterface::send()` returns `void` * Classes in the `Middleware\Enhancers` sub-namespace have been moved to the `Middleware` one * Classes in the `Asynchronous\Routing` sub-namespace have been moved to the `Transport\Sender\Locator` sub-namespace * The `Asynchronous/Middleware/SendMessageMiddleware` class has been moved to the `Middleware` namespace diff --git a/src/Symfony/Component/Messenger/MessageBus.php b/src/Symfony/Component/Messenger/MessageBus.php index 8cbcf2bf0e05f..2e4b3daa9a3c2 100644 --- a/src/Symfony/Component/Messenger/MessageBus.php +++ b/src/Symfony/Component/Messenger/MessageBus.php @@ -50,11 +50,12 @@ public function getIterator() /** * {@inheritdoc} */ - public function dispatch($message): void + public function dispatch($message): Envelope { if (!\is_object($message)) { throw new \TypeError(sprintf('Invalid argument provided to "%s()": expected object, but got %s.', __METHOD__, \gettype($message))); } + $envelope = $message instanceof Envelope ? $message : new Envelope($message); $middlewareIterator = $this->middlewareAggregate->getIterator(); while ($middlewareIterator instanceof \IteratorAggregate) { @@ -63,10 +64,10 @@ public function dispatch($message): void $middlewareIterator->rewind(); if (!$middlewareIterator->valid()) { - return; + return $envelope; } $stack = new StackMiddleware($middlewareIterator); - $middlewareIterator->current()->handle($message instanceof Envelope ? $message : new Envelope($message), $stack); + return $middlewareIterator->current()->handle($envelope, $stack); } } diff --git a/src/Symfony/Component/Messenger/MessageBusInterface.php b/src/Symfony/Component/Messenger/MessageBusInterface.php index ea715feb58fd5..ae7930883abba 100644 --- a/src/Symfony/Component/Messenger/MessageBusInterface.php +++ b/src/Symfony/Component/Messenger/MessageBusInterface.php @@ -21,5 +21,5 @@ interface MessageBusInterface * * @param object|Envelope $message The message or the message pre-wrapped in an envelope */ - public function dispatch($message): void; + public function dispatch($message): Envelope; } diff --git a/src/Symfony/Component/Messenger/Middleware/ActivationMiddleware.php b/src/Symfony/Component/Messenger/Middleware/ActivationMiddleware.php index 1c86b8a94a599..8d101e4e470dd 100644 --- a/src/Symfony/Component/Messenger/Middleware/ActivationMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/ActivationMiddleware.php @@ -35,12 +35,12 @@ public function __construct(MiddlewareInterface $inner, $activated) /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { if (\is_callable($this->activated) ? ($this->activated)($envelope) : $this->activated) { - $this->inner->handle($envelope, $stack); - } else { - $stack->next()->handle($envelope, $stack); + return $this->inner->handle($envelope, $stack); } + + return $stack->next()->handle($envelope, $stack); } } diff --git a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php index 820f6f1f27378..11d86b6107ebe 100644 --- a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php @@ -34,13 +34,14 @@ public function __construct(HandlerLocatorInterface $messageHandlerLocator, bool * * @throws NoHandlerForMessageException When no handler is found and $allowNoHandlers is false */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { if (null !== $handler = $this->messageHandlerLocator->getHandler($envelope)) { $handler($envelope->getMessage()); - $stack->next()->handle($envelope, $stack); } elseif (!$this->allowNoHandlers) { throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', \get_class($envelope->getMessage()))); } + + return $stack->next()->handle($envelope, $stack); } } diff --git a/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php b/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php index 0ba046c2708aa..a5af35dd0591d 100644 --- a/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/LoggingMiddleware.php @@ -29,7 +29,7 @@ public function __construct(LoggerInterface $logger) /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { $message = $envelope->getMessage(); $context = array( @@ -39,7 +39,7 @@ public function handle(Envelope $envelope, StackInterface $stack): void $this->logger->debug('Starting handling message {name}', $context); try { - $stack->next()->handle($envelope, $stack); + $envelope = $stack->next()->handle($envelope, $stack); } catch (\Throwable $e) { $context['exception'] = $e; $this->logger->warning('An exception occurred while handling message {name}', $context); @@ -48,5 +48,7 @@ public function handle(Envelope $envelope, StackInterface $stack): void } $this->logger->debug('Finished handling message {name}', $context); + + return $envelope; } } diff --git a/src/Symfony/Component/Messenger/Middleware/MiddlewareInterface.php b/src/Symfony/Component/Messenger/Middleware/MiddlewareInterface.php index b42d795f5fb24..9826611f0c145 100644 --- a/src/Symfony/Component/Messenger/Middleware/MiddlewareInterface.php +++ b/src/Symfony/Component/Messenger/Middleware/MiddlewareInterface.php @@ -18,5 +18,5 @@ */ interface MiddlewareInterface { - public function handle(Envelope $envelope, StackInterface $stack): void; + public function handle(Envelope $envelope, StackInterface $stack): Envelope; } diff --git a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php index 2e323a8e69ffd..f927592976c49 100644 --- a/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php @@ -34,26 +34,24 @@ public function __construct(SenderLocatorInterface $senderLocator, array $messag /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { if ($envelope->get(ReceivedStamp::class)) { // It's a received message. Do not send it back: - $stack->next()->handle($envelope, $stack); - - return; + return $stack->next()->handle($envelope, $stack); } $sender = $this->senderLocator->getSender($envelope); if ($sender) { - $sender->send($envelope); + $envelope = $sender->send($envelope); if (!AbstractSenderLocator::getValueFromMessageRouting($this->messagesToSendAndHandleMapping, $envelope)) { // message has no corresponding handler - return; + return $envelope; } } - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); } } diff --git a/src/Symfony/Component/Messenger/Middleware/StackMiddleware.php b/src/Symfony/Component/Messenger/Middleware/StackMiddleware.php index 51da5d4d1a3e4..7474db8936c7e 100644 --- a/src/Symfony/Component/Messenger/Middleware/StackMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/StackMiddleware.php @@ -41,8 +41,8 @@ public function next(): MiddlewareInterface return $iterator->current(); } - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { - // no-op: this is the last null middleware + return $envelope; } } diff --git a/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php b/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php index 65eb8d539ef12..cfed99d282d2a 100644 --- a/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/TraceableMiddleware.php @@ -37,7 +37,7 @@ public function __construct(MiddlewareInterface $inner, Stopwatch $stopwatch, st /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { $class = \get_class($this->inner); $eventName = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class; @@ -49,7 +49,7 @@ public function handle(Envelope $envelope, StackInterface $stack): void $this->stopwatch->start($eventName, $this->eventCategory); try { - $this->inner->handle($envelope, new TraceableInnerMiddleware($stack, $this->stopwatch, $eventName, $this->eventCategory)); + return $this->inner->handle($envelope, new TraceableInnerMiddleware($stack, $this->stopwatch, $eventName, $this->eventCategory)); } finally { if ($this->stopwatch->isStarted($eventName)) { $this->stopwatch->stop($eventName); @@ -79,15 +79,17 @@ public function __construct(StackInterface $stack, Stopwatch $stopwatch, string /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { $this->stopwatch->stop($this->eventName); if ($this === $stack) { - $this->stack->next()->handle($envelope, $this->stack); + $envelope = $this->stack->next()->handle($envelope, $this->stack); } else { - $stack->next()->handle($envelope, $stack); + $envelope = $stack->next()->handle($envelope, $stack); } $this->stopwatch->start($this->eventName, $this->eventCategory); + + return $envelope; } /** diff --git a/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php b/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php index e70415a1ac82c..88bbb094080fe 100644 --- a/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/ValidationMiddleware.php @@ -31,7 +31,7 @@ public function __construct(ValidatorInterface $validator) /** * {@inheritdoc} */ - public function handle(Envelope $envelope, StackInterface $stack): void + public function handle(Envelope $envelope, StackInterface $stack): Envelope { $message = $envelope->getMessage(); $groups = null; @@ -45,6 +45,6 @@ public function handle(Envelope $envelope, StackInterface $stack): void throw new ValidationFailedException($message, $violations); } - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); } } diff --git a/src/Symfony/Component/Messenger/Tests/DataCollector/MessengerDataCollectorTest.php b/src/Symfony/Component/Messenger/Tests/DataCollector/MessengerDataCollectorTest.php index 79beab93f88d0..048fae4016e72 100644 --- a/src/Symfony/Component/Messenger/Tests/DataCollector/MessengerDataCollectorTest.php +++ b/src/Symfony/Component/Messenger/Tests/DataCollector/MessengerDataCollectorTest.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Messenger\DataCollector\MessengerDataCollector; +use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage; use Symfony\Component\Messenger\TraceableMessageBus; @@ -36,9 +37,10 @@ protected function setUp() public function testHandle() { $message = new DummyMessage('dummy message'); + $envelope = new Envelope($message); $bus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); - $bus->method('dispatch')->with($message); + $bus->method('dispatch')->with($message)->willReturn($envelope); $bus = new TraceableMessageBus($bus); $collector = new MessengerDataCollector(); @@ -124,9 +126,11 @@ public function testHandleWithException() public function testKeepsOrderedDispatchCalls() { $firstBus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); + $firstBus->method('dispatch')->willReturn(new Envelope(new \stdClass())); $firstBus = new TraceableMessageBus($firstBus); $secondBus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); + $secondBus->method('dispatch')->willReturn(new Envelope(new \stdClass())); $secondBus = new TraceableMessageBus($secondBus); $collector = new MessengerDataCollector(); diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index 415329ea0d4d3..2c4d60602a99b 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -847,8 +847,8 @@ public function dummyMethodForSomeBus() class UselessMiddleware implements MiddlewareInterface { - public function handle(Envelope $message, StackInterface $stack): void + public function handle(Envelope $message, StackInterface $stack): Envelope { - $stack->next()->handle($message, $stack); + return $stack->next()->handle($message, $stack); } } diff --git a/src/Symfony/Component/Messenger/Tests/MessageBusTest.php b/src/Symfony/Component/Messenger/Tests/MessageBusTest.php index 59480711ef97a..6d8311e4759a0 100644 --- a/src/Symfony/Component/Messenger/Tests/MessageBusTest.php +++ b/src/Symfony/Component/Messenger/Tests/MessageBusTest.php @@ -49,13 +49,14 @@ public function testItCallsMiddleware() ->method('handle') ->with($envelope, $this->anything()) ->will($this->returnCallback(function ($envelope, $stack) { - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); })); $secondMiddleware = $this->getMockBuilder(MiddlewareInterface::class)->getMock(); $secondMiddleware->expects($this->once()) ->method('handle') ->with($envelope, $this->anything()) + ->willReturn($envelope) ; $bus = new MessageBus(array( @@ -77,7 +78,7 @@ public function testThatAMiddlewareCanAddSomeStampsToTheEnvelope() ->method('handle') ->with($envelope, $this->anything()) ->will($this->returnCallback(function ($envelope, $stack) { - $stack->next()->handle($envelope->with(new AnEnvelopeStamp()), $stack); + return $stack->next()->handle($envelope->with(new AnEnvelopeStamp()), $stack); })); $secondMiddleware = $this->getMockBuilder(MiddlewareInterface::class)->getMock(); @@ -85,13 +86,14 @@ public function testThatAMiddlewareCanAddSomeStampsToTheEnvelope() ->method('handle') ->with($envelopeWithAnotherStamp, $this->anything()) ->will($this->returnCallback(function ($envelope, $stack) { - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); })); $thirdMiddleware = $this->getMockBuilder(MiddlewareInterface::class)->getMock(); $thirdMiddleware->expects($this->once()) ->method('handle') ->with($envelopeWithAnotherStamp, $this->anything()) + ->willReturn($envelopeWithAnotherStamp) ; $bus = new MessageBus(array( @@ -116,13 +118,14 @@ public function testThatAMiddlewareCanUpdateTheMessageWhileKeepingTheEnvelopeSta ->method('handle') ->with($envelope, $this->anything()) ->will($this->returnCallback(function ($envelope, $stack) use ($expectedEnvelope) { - $stack->next()->handle($expectedEnvelope, $stack); + return $stack->next()->handle($expectedEnvelope, $stack); })); $secondMiddleware = $this->getMockBuilder(MiddlewareInterface::class)->getMock(); $secondMiddleware->expects($this->once()) ->method('handle') ->with($expectedEnvelope, $this->anything()) + ->willReturn($envelope) ; $bus = new MessageBus(array( diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/ActivationMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/ActivationMiddlewareTest.php index c020a05548f48..872c218517879 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/ActivationMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/ActivationMiddlewareTest.php @@ -31,7 +31,7 @@ public function testExecuteMiddlewareOnActivated() $stack->expects($this->never())->method('next'); $middleware = $this->createMock(MiddlewareInterface::class); - $middleware->expects($this->once())->method('handle')->with($envelope, $stack); + $middleware->expects($this->once())->method('handle')->with($envelope, $stack)->willReturn($envelope); $decorator = new ActivationMiddleware($middleware, true); @@ -50,7 +50,7 @@ public function testExecuteMiddlewareOnActivatedWithCallable() $stack->expects($this->never())->method('next'); $middleware = $this->createMock(MiddlewareInterface::class); - $middleware->expects($this->once())->method('handle')->with($envelope, $stack); + $middleware->expects($this->once())->method('handle')->with($envelope, $stack)->willReturn($envelope); $decorator = new ActivationMiddleware($middleware, $activated); diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php index f038784b08a60..5fd4038d9a046 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php @@ -50,6 +50,6 @@ public function testAllowNoHandlers() { $middleware = new HandleMessageMiddleware(new HandlerLocator(array()), true); - $this->assertNull($middleware->handle(new Envelope(new DummyMessage('Hey')), new StackMiddleware())); + $this->assertInstanceOf(Envelope::class, $middleware->handle(new Envelope(new DummyMessage('Hey')), new StackMiddleware())); } } diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/MiddlewareTestCase.php b/src/Symfony/Component/Messenger/Tests/Middleware/MiddlewareTestCase.php index f6934adb6a91b..7fcbdcabe36dd 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/MiddlewareTestCase.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/MiddlewareTestCase.php @@ -23,6 +23,9 @@ protected function getStackMock(bool $nextIsCalled = true) $nextMiddleware ->expects($nextIsCalled ? $this->once() : $this->never()) ->method('handle') + ->will($this->returnCallback(function ($envelope, StackInterface $stack) { + return $envelope; + })) ; $stack = $this->createMock(StackInterface::class); diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php index 2c13d32feca03..ddfa381b03129 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php @@ -31,7 +31,7 @@ public function testItSendsTheMessageToAssignedSender() $middleware = new SendMessageMiddleware(new InMemorySenderLocator($sender)); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock(false)); } @@ -43,7 +43,7 @@ public function testItSendsTheMessageToAssignedSenderWithPreWrappedMessage() $middleware = new SendMessageMiddleware(new InMemorySenderLocator($sender)); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock(false)); } @@ -58,7 +58,7 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageClass() DummyMessage::class => true, )); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock()); } @@ -73,7 +73,7 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageParentClass() DummyMessage::class => true, )); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock()); } @@ -88,7 +88,7 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnTheMessageInterface() DummyMessageInterface::class => true, )); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock()); } @@ -103,7 +103,7 @@ public function testItAlsoCallsTheNextMiddlewareBasedOnWildcard() '*' => true, )); - $sender->expects($this->once())->method('send')->with($envelope); + $sender->expects($this->once())->method('send')->with($envelope)->willReturn($envelope); $middleware->handle($envelope, $this->getStackMock()); } diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/TraceableMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/TraceableMiddlewareTest.php index 12b5ade2222c0..d1519b62fe128 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/TraceableMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/TraceableMiddlewareTest.php @@ -33,7 +33,7 @@ public function testHandle() ->method('handle') ->with($envelope, $this->anything()) ->will($this->returnCallback(function ($envelope, StackInterface $stack) { - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); })) ; @@ -67,7 +67,7 @@ public function testHandleWithException() ->method('handle') ->with($envelope, $this->anything()) ->will($this->returnCallback(function ($envelope, StackInterface $stack) { - $stack->next()->handle($envelope, $stack); + return $stack->next()->handle($envelope, $stack); })) ; diff --git a/src/Symfony/Component/Messenger/Tests/TraceableMessageBusTest.php b/src/Symfony/Component/Messenger/Tests/TraceableMessageBusTest.php index 36299d29c93aa..a2c4e0b8c6bf4 100644 --- a/src/Symfony/Component/Messenger/Tests/TraceableMessageBusTest.php +++ b/src/Symfony/Component/Messenger/Tests/TraceableMessageBusTest.php @@ -25,10 +25,11 @@ public function testItTracesDispatch() $message = new DummyMessage('Hello'); $bus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); + $bus->expects($this->once())->method('dispatch')->with($message)->willReturn(new Envelope($message)); $traceableBus = new TraceableMessageBus($bus); $line = __LINE__ + 1; - $this->assertNull($traceableBus->dispatch($message)); + $this->assertInstanceOf(Envelope::class, $traceableBus->dispatch($message)); $this->assertCount(1, $tracedMessages = $traceableBus->getDispatchedMessages()); $this->assertArraySubset(array( 'message' => $message, @@ -47,10 +48,11 @@ public function testItTracesDispatchWithEnvelope() $envelope = (new Envelope($message))->with($stamp = new AnEnvelopeStamp()); $bus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); + $bus->expects($this->once())->method('dispatch')->with($envelope)->willReturn($envelope); $traceableBus = new TraceableMessageBus($bus); $line = __LINE__ + 1; - $this->assertNull($traceableBus->dispatch($envelope)); + $this->assertInstanceOf(Envelope::class, $traceableBus->dispatch($envelope)); $this->assertCount(1, $tracedMessages = $traceableBus->getDispatchedMessages()); $this->assertArraySubset(array( 'message' => $message, diff --git a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/Fixtures/long_receiver.php b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/Fixtures/long_receiver.php index 7ee1730c70a7c..3f8612262e068 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/Fixtures/long_receiver.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/Fixtures/long_receiver.php @@ -12,6 +12,7 @@ require_once $autoload; +use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Messenger\Transport\AmqpExt\AmqpReceiver; use Symfony\Component\Messenger\Transport\AmqpExt\Connection; @@ -29,13 +30,15 @@ $receiver = new AmqpReceiver($connection, $serializer); $worker = new Worker($receiver, new class() implements MessageBusInterface { - public function dispatch($envelope): void + public function dispatch($envelope): Envelope { echo 'Get envelope with message: '.get_class($envelope->getMessage())."\n"; echo sprintf("with stamps: %s\n", json_encode(array_keys($envelope->all()), JSON_PRETTY_PRINT)); sleep(30); echo "Done.\n"; + + return $envelope; } }); diff --git a/src/Symfony/Component/Messenger/Tests/WorkerTest.php b/src/Symfony/Component/Messenger/Tests/WorkerTest.php index 041e46327c745..29a834b70364f 100644 --- a/src/Symfony/Component/Messenger/Tests/WorkerTest.php +++ b/src/Symfony/Component/Messenger/Tests/WorkerTest.php @@ -33,8 +33,8 @@ public function testWorkerDispatchTheReceivedMessage() $bus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); - $bus->expects($this->at(0))->method('dispatch')->with((new Envelope($apiMessage))->with(new ReceivedStamp())); - $bus->expects($this->at(1))->method('dispatch')->with((new Envelope($ipaMessage))->with(new ReceivedStamp())); + $bus->expects($this->at(0))->method('dispatch')->with(($envelope = new Envelope($apiMessage))->with(new ReceivedStamp()))->willReturn($envelope); + $bus->expects($this->at(1))->method('dispatch')->with(($envelope = new Envelope($ipaMessage))->with(new ReceivedStamp()))->willReturn($envelope); $worker = new Worker($receiver, $bus); $worker->run(); @@ -42,14 +42,13 @@ public function testWorkerDispatchTheReceivedMessage() public function testWorkerDoesNotWrapMessagesAlreadyWrappedWithReceivedMessage() { - $envelop = (new Envelope(new DummyMessage('API')))->with(new ReceivedStamp()); - $receiver = new CallbackReceiver(function ($handler) use ($envelop) { - $handler($envelop); + $envelope = (new Envelope(new DummyMessage('API')))->with(new ReceivedStamp()); + $receiver = new CallbackReceiver(function ($handler) use ($envelope) { + $handler($envelope); }); $bus = $this->getMockBuilder(MessageBusInterface::class)->getMock(); - - $bus->expects($this->at(0))->method('dispatch')->with($envelop); + $bus->expects($this->at(0))->method('dispatch')->with($envelope)->willReturn($envelope); $worker = new Worker($receiver, $bus); $worker->run(); diff --git a/src/Symfony/Component/Messenger/TraceableMessageBus.php b/src/Symfony/Component/Messenger/TraceableMessageBus.php index 741339052a7c3..b030cef498266 100644 --- a/src/Symfony/Component/Messenger/TraceableMessageBus.php +++ b/src/Symfony/Component/Messenger/TraceableMessageBus.php @@ -27,7 +27,7 @@ public function __construct(MessageBusInterface $decoratedBus) /** * {@inheritdoc} */ - public function dispatch($message): void + public function dispatch($message): Envelope { $envelope = $message instanceof Envelope ? $message : new Envelope($message); $context = array( @@ -38,7 +38,7 @@ public function dispatch($message): void ); try { - $this->decoratedBus->dispatch($message); + return $this->decoratedBus->dispatch($message); } catch (\Throwable $e) { $context['exception'] = $e; diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php index 9b7f1e3dfe0e8..a011b99ca77de 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpSender.php @@ -35,10 +35,12 @@ public function __construct(Connection $connection, SerializerInterface $seriali /** * {@inheritdoc} */ - public function send(Envelope $envelope): void + public function send(Envelope $envelope): Envelope { $encodedMessage = $this->serializer->encode($envelope); $this->connection->publish($encodedMessage['body'], $encodedMessage['headers']); + + return $envelope; } } diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php index 0a93d1955a96c..92a82c5f0d16d 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/AmqpTransport.php @@ -51,9 +51,9 @@ public function stop(): void /** * {@inheritdoc} */ - public function send(Envelope $envelope): void + public function send(Envelope $envelope): Envelope { - ($this->sender ?? $this->getSender())->send($envelope); + return ($this->sender ?? $this->getSender())->send($envelope); } private function getReceiver() diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php index 5fef71cd39470..124051d15e2f9 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php @@ -17,6 +17,8 @@ * An AMQP connection. * * @author Samuel Roze + * + * @final */ class Connection { diff --git a/src/Symfony/Component/Messenger/Transport/Sender/ChainSender.php b/src/Symfony/Component/Messenger/Transport/Sender/ChainSender.php index e0f4ae41d7bf7..1235a4a82daec 100644 --- a/src/Symfony/Component/Messenger/Transport/Sender/ChainSender.php +++ b/src/Symfony/Component/Messenger/Transport/Sender/ChainSender.php @@ -31,10 +31,12 @@ public function __construct(iterable $senders) /** * {@inheritdoc} */ - public function send(Envelope $message): void + public function send(Envelope $envelope): Envelope { foreach ($this->senders as $sender) { - $sender->send($message); + $envelope = $sender->send($envelope); } + + return $envelope; } } diff --git a/src/Symfony/Component/Messenger/Transport/Sender/SenderInterface.php b/src/Symfony/Component/Messenger/Transport/Sender/SenderInterface.php index 7a325a97529da..aacf43db79957 100644 --- a/src/Symfony/Component/Messenger/Transport/Sender/SenderInterface.php +++ b/src/Symfony/Component/Messenger/Transport/Sender/SenderInterface.php @@ -21,5 +21,5 @@ interface SenderInterface /** * Sends the given envelope. */ - public function send(Envelope $envelope): void; + public function send(Envelope $envelope): Envelope; }