diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 50ac8d124d2a1..d69730aafe10a 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -15,7 +15,7 @@ jobs: runs-on: Ubuntu-20.04 env: - extensions: amqp,apcu,igbinary,intl,mbstring,memcached,mongodb,redis + extensions: amqp,apcu,igbinary,intl,mbstring,memcached,mongodb,redis-5.3.4 strategy: matrix: diff --git a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php index 836228e5f0c88..36cdb1bb418e2 100644 --- a/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php @@ -78,7 +78,7 @@ public function testFromDsnWithTls() $redis->expects($this->once()) ->method('connect') ->with('tls://127.0.0.1', 6379) - ->willReturn(null); + ->willReturn(true); Connection::fromDsn('redis://127.0.0.1?tls=1', [], $redis); } @@ -92,7 +92,7 @@ public function testFromDsnWithTlsOption() $redis->expects($this->once()) ->method('connect') ->with('tls://127.0.0.1', 6379) - ->willReturn(null); + ->willReturn(true); Connection::fromDsn('redis://127.0.0.1', ['tls' => true], $redis); } @@ -103,7 +103,7 @@ public function testFromDsnWithRedissScheme() $redis->expects($this->once()) ->method('connect') ->with('tls://127.0.0.1', 6379) - ->willReturn(null); + ->willReturn(true); Connection::fromDsn('rediss://127.0.0.1?delete_after_ack=true', [], $redis); } @@ -315,7 +315,7 @@ public function testMaxEntries() $redis->expects($this->exactly(1))->method('xadd') ->with('queue', '*', ['message' => '{"body":"1","headers":[]}'], 20000, true) - ->willReturn(1); + ->willReturn('1'); $connection = Connection::fromDsn('redis://localhost/queue?stream_max_entries=20000', ['delete_after_ack' => true], $redis); $connection->add('1', []); @@ -365,7 +365,7 @@ public function testLastErrorGetsCleared() { $redis = $this->createMock(\Redis::class); - $redis->expects($this->once())->method('xadd')->willReturn(0); + $redis->expects($this->once())->method('xadd')->willReturn('0'); $redis->expects($this->once())->method('xack')->willReturn(0); $redis->method('getLastError')->willReturnOnConsecutiveCalls('xadd error', 'xack error'); diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 889207a17400d..cda45c9a34d85 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -6,6 +6,7 @@ CHANGELOG * Add `StopWorkerExceptionInterface` and its implementation `StopWorkerException` to stop the worker. * Add support for resetting container services after each messenger message. + * Add message envelope to handler `__invoke()` calls 5.3 --- diff --git a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php index eaf6b9508017b..f83ff96e18d5f 100644 --- a/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php +++ b/src/Symfony/Component/Messenger/Middleware/HandleMessageMiddleware.php @@ -60,7 +60,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope try { $handler = $handlerDescriptor->getHandler(); - $handledStamp = HandledStamp::fromDescriptor($handlerDescriptor, $handler($message)); + $handledStamp = HandledStamp::fromDescriptor($handlerDescriptor, $handler($message, $envelope)); $envelope = $envelope->with($handledStamp); $this->logger->info('Message {class} handled by {handler}', $context + ['handler' => $handledStamp->getHandlerName()]); } catch (\Throwable $e) { diff --git a/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php b/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php index c33bad5137d8c..2c57aebff2c80 100644 --- a/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php +++ b/src/Symfony/Component/Messenger/Tests/Middleware/HandleMessageMiddlewareTest.php @@ -40,6 +40,22 @@ public function testItCallsTheHandlerAndNextMiddleware() $middleware->handle($envelope, $this->getStackMock()); } + public function testHandlerWithEnvelopeInConstructor() + { + $message = new DummyMessage('Hey'); + $envelope = new Envelope($message); + + $handler = $this->createPartialMock(HandleMessageMiddlewareTestCallable::class, ['__invoke']); + + $middleware = new HandleMessageMiddleware(new HandlersLocator([ + DummyMessage::class => [$handler], + ])); + + $handler->expects($this->once())->method('__invoke')->with($message, $envelope); + + $middleware->handle($envelope, $this->getStackMock()); + } + /** * @dataProvider itAddsHandledStampsProvider */