Skip to content

Commit 85f0f7a

Browse files
authored
Merge pull request #32 from PcComponentes/feature/symfony-7.4-support
Fix Symfony 7 exception unwrapping and require Symfony 6.4+
2 parents 8f6fff5 + 7096520 commit 85f0f7a

File tree

3 files changed

+55
-3
lines changed

3 files changed

+55
-3
lines changed

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
"pccomponentes/ddd": "^4.0",
3131
"beberlei/assert": "^3.3",
3232
"ramsey/uuid": "^4.5",
33-
"symfony/framework-bundle": "^6.0 || ^7.0",
34-
"symfony/amqp-messenger": "^6.0 || ^7.0"
33+
"symfony/framework-bundle": "^6.4 || ^7.0",
34+
"symfony/amqp-messenger": "^6.4 || ^7.0"
3535
},
3636
"require-dev": {
3737
"pccomponentes/coding-standard": "^2.0",

src/Middleware/HandlerExceptionCatcherMiddleware.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
1515
try {
1616
return $stack->next()->handle($envelope, $stack);
1717
} catch (HandlerFailedException $exception) {
18-
throw $exception->getNestedExceptions()[0];
18+
$wrappedExceptions = $exception->getWrappedExceptions();
19+
20+
throw \array_values($wrappedExceptions)[0];
1921
}
2022
}
2123
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace PcComponentes\SymfonyMessengerBundle\Tests\Middleware;
5+
6+
use PcComponentes\SymfonyMessengerBundle\Middleware\HandlerExceptionCatcherMiddleware;
7+
use PHPUnit\Framework\TestCase;
8+
use Symfony\Component\Messenger\Envelope;
9+
use Symfony\Component\Messenger\Exception\HandlerFailedException;
10+
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
11+
use Symfony\Component\Messenger\Middleware\StackInterface;
12+
13+
final class HandlerExceptionCatcherMiddlewareTest extends TestCase
14+
{
15+
public function test_given_a_handler_failed_exception_with_named_wrapped_exceptions_then_it_throws_the_first_wrapped_exception(): void
16+
{
17+
$wrappedException = new \RuntimeException('expected');
18+
$middleware = new HandlerExceptionCatcherMiddleware();
19+
$envelope = new Envelope(new \stdClass());
20+
$nextMiddleware = new class($envelope, $wrappedException) implements MiddlewareInterface {
21+
public function __construct(
22+
private readonly Envelope $envelope,
23+
private readonly \RuntimeException $wrappedException,
24+
) {
25+
}
26+
27+
public function handle(Envelope $envelope, StackInterface $stack): Envelope
28+
{
29+
throw new HandlerFailedException(
30+
$this->envelope,
31+
['handler_name' => $this->wrappedException],
32+
);
33+
}
34+
};
35+
$stack = new class($nextMiddleware) implements StackInterface {
36+
public function __construct(private readonly MiddlewareInterface $middleware)
37+
{
38+
}
39+
40+
public function next(): MiddlewareInterface
41+
{
42+
return $this->middleware;
43+
}
44+
};
45+
46+
$this->expectExceptionObject($wrappedException);
47+
48+
$middleware->handle($envelope, $stack);
49+
}
50+
}

0 commit comments

Comments
 (0)