Skip to content

Commit

Permalink
Merge branch '7.0' into 7.1
Browse files Browse the repository at this point in the history
* 7.0:
  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
  • Loading branch information
xabbuh committed Jul 9, 2024
2 parents 8cafca5 + f3a9d96 commit 604e182
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion EventListener/SendFailedMessageForRetryListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public function onMessageFailed(WorkerMessageFailedEvent $event): void
$retryEnvelope = $this->withLimitedHistory($envelope, new DelayStamp($delay), new RedeliveryStamp($retryCount));

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

$this->eventDispatcher?->dispatch(new WorkerMessageRetriedEvent($retryEnvelope, $event->getReceiverName()));
} else {
Expand Down
45 changes: 45 additions & 0 deletions Tests/EventListener/SendFailedMessageForRetryListenerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\Event\WorkerMessageRetriedEvent;
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
use Symfony\Component\Messenger\Exception\RecoverableMessageHandlingException;
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;

class SendFailedMessageForRetryListenerTest extends TestCase
Expand Down Expand Up @@ -180,4 +182,47 @@ public function testEnvelopeKeepOnlyTheLast10Stamps()

$listener->onMessageFailed($event);
}

public function testRetriedEnvelopePassesToRetriedEvent()
{
$exception = new \Exception('no!');
$envelope = new Envelope(new \stdClass());

$sender = $this->createMock(SenderInterface::class);
$sender->expects($this->once())->method('send')->willReturnCallback(static function (Envelope $envelope) {
return $envelope->with(new TransportMessageIdStamp(123));
});

$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
$eventDispatcher->expects($this->once())->method('dispatch')->willReturnCallback(
function (WorkerMessageRetriedEvent $retriedEvent) {
$envelope = $retriedEvent->getEnvelope();

$transportIdStamp = $envelope->last(TransportMessageIdStamp::class);
$this->assertNotNull($transportIdStamp);

return $retriedEvent;
});

$senderLocator = new Container();
$senderLocator->set('my_receiver', $sender);

$retryStrategy = $this->createMock(RetryStrategyInterface::class);
$retryStrategy->expects($this->once())->method('isRetryable')->willReturn(true);
$retryStrategy->expects($this->once())->method('getWaitingTime')->willReturn(1000);

$retryStrategyLocator = new Container();
$retryStrategyLocator->set('my_receiver', $retryStrategy);

$listener = new SendFailedMessageForRetryListener(
$senderLocator,
$retryStrategyLocator,
null,
$eventDispatcher
);

$event = new WorkerMessageFailedEvent($envelope, 'my_receiver', $exception);

$listener->onMessageFailed($event);
}
}

0 comments on commit 604e182

Please sign in to comment.