diff --git a/Classes/Repository/FailedMessageRepository.php b/Classes/Repository/FailedMessageRepository.php index fdaa7bc..97d41d1 100644 --- a/Classes/Repository/FailedMessageRepository.php +++ b/Classes/Repository/FailedMessageRepository.php @@ -12,6 +12,7 @@ namespace Ssch\T3Messenger\Repository; use Ssch\T3Messenger\Domain\Dto\FailedMessage; +use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Transport\Receiver\ListableReceiverInterface; use Symfony\Contracts\Service\ServiceProviderInterface; use TYPO3\CMS\Core\SingletonInterface; @@ -37,7 +38,7 @@ public function list(): array continue; } - $failedMessages = $failureTransport->all(); + $failedMessages = $this->inReverseOrder($failureTransport->all()); foreach ($failedMessages as $failedMessage) { $allFailedMessages[] = FailedMessage::createFromEnvelope($failedMessage); @@ -46,4 +47,18 @@ public function list(): array return $allFailedMessages; } + + /** + * @param Envelope[] $failedMessages + * + * @return Envelope[]; + */ + private function inReverseOrder(iterable $failedMessages): array + { + if (! is_array($failedMessages)) { + $failedMessages = iterator_to_array($failedMessages); + } + + return array_reverse($failedMessages); + } } diff --git a/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Command/MyOtherFailingCommand.php b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Command/MyOtherFailingCommand.php new file mode 100644 index 0000000..dee5e2d --- /dev/null +++ b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Command/MyOtherFailingCommand.php @@ -0,0 +1,27 @@ +note = $note; + } + + public function getNote(): string + { + return $this->note; + } +} diff --git a/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Handlers/MyMessengerHandler.php b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Handlers/MyMessengerHandler.php index 097cc66..f6a15d5 100644 --- a/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Handlers/MyMessengerHandler.php +++ b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Classes/Handlers/MyMessengerHandler.php @@ -16,6 +16,7 @@ use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyCommand; use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyFailingCommand; use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyOtherCommand; +use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyOtherFailingCommand; use Symfony\Component\Messenger\Handler\MessageSubscriberInterface; final class MyMessengerHandler implements MessageSubscriberInterface, LoggerAwareInterface @@ -42,6 +43,11 @@ public function thirdMessageMethod(MyFailingCommand $command): void throw new \InvalidArgumentException('Failing by intention'); } + public function fourthMessageMethod(MyOtherFailingCommand $command): void + { + throw new \InvalidArgumentException('Failing by intention'); + } + public static function getHandledMessages(): iterable { yield MyCommand::class => [ @@ -55,5 +61,9 @@ public static function getHandledMessages(): iterable yield MyFailingCommand::class => [ 'method' => 'thirdMessageMethod', ]; + + yield MyOtherFailingCommand::class => [ + 'method' => 'fourthMessageMethod', + ]; } } diff --git a/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Configuration/test/Messenger.php b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Configuration/test/Messenger.php index c21b937..ddd86ad 100644 --- a/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Configuration/test/Messenger.php +++ b/Tests/Functional/Fixtures/Extensions/t3_messenger_test/Configuration/test/Messenger.php @@ -11,6 +11,7 @@ use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyCommand; use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyFailingCommand; +use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyOtherFailingCommand; return [ 'routing' => [ @@ -20,5 +21,8 @@ MyFailingCommand::class => [ 'senders' => ['async'], ], + MyOtherFailingCommand::class => [ + 'senders' => ['async'], + ], ], ]; diff --git a/Tests/Functional/Repository/FailedMessageRepositoryTest.php b/Tests/Functional/Repository/FailedMessageRepositoryTest.php index 239d35b..0ed7483 100644 --- a/Tests/Functional/Repository/FailedMessageRepositoryTest.php +++ b/Tests/Functional/Repository/FailedMessageRepositoryTest.php @@ -13,6 +13,7 @@ use Ssch\T3Messenger\Repository\FailedMessageRepository; use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyFailingCommand; +use Ssch\T3Messenger\Tests\Functional\Fixtures\Extensions\t3_messenger_test\Classes\Command\MyOtherFailingCommand; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\Messenger\EventListener\StopWorkerOnFailureLimitListener; use Symfony\Component\Messenger\MessageBusInterface; @@ -42,13 +43,32 @@ public function test(): void // Arrange $this->messageBus->dispatch(new MyFailingCommand('Add to failed queue')); $this->runWorker(); + $this->messageBus->dispatch(new MyOtherFailingCommand('Add to failed queue')); + $this->runWorker(); // Act $failedMessages = $this->subject->list(); // Assert - self::assertSame(MyFailingCommand::class, $failedMessages[0]->getMessage()); - self::assertSame('Failing by intention', $failedMessages[0]->getErrorMessage()); + $failedMessagesInAssertion = []; + foreach ($failedMessages as $failedMessage) { + $failedMessagesInAssertion[] = [ + 'class' => $failedMessage->getMessage(), + 'error_message' => $failedMessage->getErrorMessage(), + ]; + } + + self::assertCount(2, $failedMessages); + self::assertSame([ + [ + 'class' => MyOtherFailingCommand::class, + 'error_message' => 'Failing by intention', + ], + [ + 'class' => MyFailingCommand::class, + 'error_message' => 'Failing by intention', + ], + ], $failedMessagesInAssertion); } private function runWorker(): void