Skip to content

Commit 641b350

Browse files
committed
Merge branch '7.1' into 7.2
* 7.1: fix merge [AssetMapper] Split test dirs in tests Fix typo Change incorrect check for the `stateless` request attribute [Validator] add setGroupProvider to AttributeLoader use copy() instead of rename() on Windows test: kebab-case to snake_case [PropertyInfo] Handle collection in PhpStan same as PhpDoc [Messenger] Passing to `WorkerMessageRetriedEvent` envelope with actual stamps after sent
2 parents af1d241 + 604e182 commit 641b350

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

EventListener/SendFailedMessageForRetryListener.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public function onMessageFailed(WorkerMessageFailedEvent $event): void
7171
$retryEnvelope = $this->withLimitedHistory($envelope, new DelayStamp($delay), new RedeliveryStamp($retryCount));
7272

7373
// re-send the message for retry
74-
$this->getSenderForTransport($event->getReceiverName())->send($retryEnvelope);
74+
$retryEnvelope = $this->getSenderForTransport($event->getReceiverName())->send($retryEnvelope);
7575

7676
$this->eventDispatcher?->dispatch(new WorkerMessageRetriedEvent($retryEnvelope, $event->getReceiverName()));
7777
} else {

Tests/EventListener/SendFailedMessageForRetryListenerTest.php

+45
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
use Symfony\Component\DependencyInjection\Container;
1717
use Symfony\Component\Messenger\Envelope;
1818
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
19+
use Symfony\Component\Messenger\Event\WorkerMessageRetriedEvent;
1920
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
2021
use Symfony\Component\Messenger\Exception\RecoverableMessageHandlingException;
2122
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
2223
use Symfony\Component\Messenger\Stamp\DelayStamp;
2324
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
25+
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
2426
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
2527

2628
class SendFailedMessageForRetryListenerTest extends TestCase
@@ -180,4 +182,47 @@ public function testEnvelopeKeepOnlyTheLast10Stamps()
180182

181183
$listener->onMessageFailed($event);
182184
}
185+
186+
public function testRetriedEnvelopePassesToRetriedEvent()
187+
{
188+
$exception = new \Exception('no!');
189+
$envelope = new Envelope(new \stdClass());
190+
191+
$sender = $this->createMock(SenderInterface::class);
192+
$sender->expects($this->once())->method('send')->willReturnCallback(static function (Envelope $envelope) {
193+
return $envelope->with(new TransportMessageIdStamp(123));
194+
});
195+
196+
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
197+
$eventDispatcher->expects($this->once())->method('dispatch')->willReturnCallback(
198+
function (WorkerMessageRetriedEvent $retriedEvent) {
199+
$envelope = $retriedEvent->getEnvelope();
200+
201+
$transportIdStamp = $envelope->last(TransportMessageIdStamp::class);
202+
$this->assertNotNull($transportIdStamp);
203+
204+
return $retriedEvent;
205+
});
206+
207+
$senderLocator = new Container();
208+
$senderLocator->set('my_receiver', $sender);
209+
210+
$retryStrategy = $this->createMock(RetryStrategyInterface::class);
211+
$retryStrategy->expects($this->once())->method('isRetryable')->willReturn(true);
212+
$retryStrategy->expects($this->once())->method('getWaitingTime')->willReturn(1000);
213+
214+
$retryStrategyLocator = new Container();
215+
$retryStrategyLocator->set('my_receiver', $retryStrategy);
216+
217+
$listener = new SendFailedMessageForRetryListener(
218+
$senderLocator,
219+
$retryStrategyLocator,
220+
null,
221+
$eventDispatcher
222+
);
223+
224+
$event = new WorkerMessageFailedEvent($envelope, 'my_receiver', $exception);
225+
226+
$listener->onMessageFailed($event);
227+
}
183228
}

0 commit comments

Comments
 (0)