File tree Expand file tree Collapse file tree 5 files changed +113
-0
lines changed Expand file tree Collapse file tree 5 files changed +113
-0
lines changed Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Gember \MessageBusSymfony ;
6+
7+ use Gember \EventSourcing \Util \Messaging \MessageBus \EventBus ;
8+ use Gember \EventSourcing \Util \Messaging \MessageBus \HandlingMessageFailedException ;
9+ use Symfony \Component \Messenger \Exception \ExceptionInterface ;
10+ use Symfony \Component \Messenger \MessageBusInterface ;
11+
12+ final readonly class SymfonyEventBus implements EventBus
13+ {
14+ public function __construct (
15+ private MessageBusInterface $ eventBus ,
16+ ) {}
17+
18+ public function handle (object $ event ): void
19+ {
20+ try {
21+ $ this ->eventBus ->dispatch ($ event );
22+ } catch (ExceptionInterface $ exception ) {
23+ throw HandlingMessageFailedException::withException ($ exception );
24+ }
25+ }
26+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Gember \MessageBusSymfony \Test ;
6+
7+ use Gember \EventSourcing \Util \Messaging \MessageBus \HandlingMessageFailedException ;
8+ use Gember \MessageBusSymfony \SymfonyEventBus ;
9+ use Gember \MessageBusSymfony \Test \TestDoubles \TestEvent ;
10+ use Gember \MessageBusSymfony \Test \TestDoubles \TestEventThrowingException ;
11+ use Gember \MessageBusSymfony \Test \TestDoubles \TestSymfonyEventBus ;
12+ use PHPUnit \Framework \Attributes \Test ;
13+ use PHPUnit \Framework \TestCase ;
14+
15+ /**
16+ * @internal
17+ */
18+ final class SymfonyEventBusTest extends TestCase
19+ {
20+ private SymfonyEventBus $ eventBus ;
21+ private TestSymfonyEventBus $ symfonyEventBus ;
22+
23+ protected function setUp (): void
24+ {
25+ parent ::setUp ();
26+
27+ $ this ->eventBus = new SymfonyEventBus (
28+ $ this ->symfonyEventBus = new TestSymfonyEventBus (),
29+ );
30+ }
31+
32+ #[Test]
33+ public function itShouldHandleEvent (): void
34+ {
35+ $ this ->eventBus ->handle (new TestEvent ());
36+
37+ self ::assertTrue ($ this ->symfonyEventBus ->isCalled );
38+ }
39+
40+ #[Test]
41+ public function itShouldThrowExceptionWhenHandlingEventFailed (): void
42+ {
43+ self ::expectException (HandlingMessageFailedException::class);
44+
45+ $ this ->eventBus ->handle (new TestEventThrowingException ());
46+ }
47+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Gember \MessageBusSymfony \Test \TestDoubles ;
6+
7+ final readonly class TestEvent {}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Gember \MessageBusSymfony \Test \TestDoubles ;
6+
7+ final readonly class TestEventThrowingException {}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Gember \MessageBusSymfony \Test \TestDoubles ;
6+
7+ use Symfony \Component \Messenger \Envelope ;
8+ use Symfony \Component \Messenger \Exception \ExceptionInterface ;
9+ use Symfony \Component \Messenger \MessageBusInterface ;
10+ use Exception ;
11+
12+ final class TestSymfonyEventBus implements MessageBusInterface
13+ {
14+ public bool $ isCalled ;
15+
16+ public function dispatch (object $ message , array $ stamps = []): Envelope
17+ {
18+ $ this ->isCalled = true ;
19+
20+ if ($ message instanceof TestEventThrowingException) {
21+ throw new class extends Exception implements ExceptionInterface {};
22+ }
23+
24+ return new Envelope ($ message );
25+ }
26+ }
You can’t perform that action at this time.
0 commit comments