77use PHPUnit \Framework \MockObject \MockObject ;
88use PHPUnit \Framework \TestCase ;
99use Sentry \ClientInterface ;
10+ use Sentry \Event ;
1011use Sentry \SentryBundle \EventListener \MessengerListener ;
1112use Sentry \SentryBundle \Tests \End2End \App \Kernel ;
1213use Sentry \State \HubInterface ;
14+ use Sentry \State \Scope ;
1315use Symfony \Component \Messenger \Envelope ;
1416use Symfony \Component \Messenger \Event \WorkerMessageFailedEvent ;
1517use Symfony \Component \Messenger \Event \WorkerMessageHandledEvent ;
1618use Symfony \Component \Messenger \Exception \HandlerFailedException ;
1719use Symfony \Component \Messenger \MessageBusInterface ;
20+ use Symfony \Component \Messenger \Stamp \BusNameStamp ;
1821
1922final class MessengerListenerTest extends TestCase
2023{
@@ -37,14 +40,23 @@ protected function setUp(): void
3740 /**
3841 * @dataProvider handleWorkerMessageFailedEventDataProvider
3942 *
40- * @param \Throwable[] $exceptions
43+ * @param \Throwable[] $exceptions
44+ * @param array<string, string> $expectedTags
4145 */
42- public function testHandleWorkerMessageFailedEvent (array $ exceptions , WorkerMessageFailedEvent $ event ): void
46+ public function testHandleWorkerMessageFailedEvent (array $ exceptions , WorkerMessageFailedEvent $ event, array $ expectedTags ): void
4347 {
4448 if (!$ this ->supportsMessenger ()) {
4549 $ this ->markTestSkipped ('Messenger not supported in this environment. ' );
4650 }
4751
52+ $ scope = new Scope ();
53+
54+ $ this ->hub ->expects ($ this ->once ())
55+ ->method ('withScope ' )
56+ ->willReturnCallback (function (callable $ callback ) use ($ scope ): void {
57+ $ callback ($ scope );
58+ });
59+
4860 $ this ->hub ->expects ($ this ->exactly (\count ($ exceptions )))
4961 ->method ('captureException ' )
5062 ->withConsecutive (...array_map (static function (\Throwable $ exception ): array {
@@ -57,6 +69,10 @@ public function testHandleWorkerMessageFailedEvent(array $exceptions, WorkerMess
5769
5870 $ listener = new MessengerListener ($ this ->hub );
5971 $ listener ->handleWorkerMessageFailedEvent ($ event );
72+
73+ $ sentryEvent = $ scope ->applyToEvent (Event::createEvent ());
74+
75+ $ this ->assertSame ($ expectedTags , $ sentryEvent ->getTags ());
6076 }
6177
6278 /**
@@ -74,18 +90,34 @@ public function handleWorkerMessageFailedEventDataProvider(): \Generator
7490 new \Exception (),
7591 ];
7692
77- yield [
93+ yield ' envelope.throwable INSTANCEOF HandlerFailedException ' => [
7894 $ exceptions ,
7995 $ this ->getMessageFailedEvent ($ envelope , 'receiver ' , new HandlerFailedException ($ envelope , $ exceptions ), false ),
96+ [
97+ 'messenger.receiver_name ' => 'receiver ' ,
98+ 'messenger.message_class ' => \get_class ($ envelope ->getMessage ()),
99+ ],
80100 ];
81101
82- $ exceptions = [
83- new \Exception (),
102+ yield 'envelope.throwable INSTANCEOF Exception ' => [
103+ [$ exceptions [0 ]],
104+ $ this ->getMessageFailedEvent ($ envelope , 'receiver ' , $ exceptions [0 ], false ),
105+ [
106+ 'messenger.receiver_name ' => 'receiver ' ,
107+ 'messenger.message_class ' => \get_class ($ envelope ->getMessage ()),
108+ ],
84109 ];
85110
86- yield [
87- $ exceptions ,
111+ $ envelope = new Envelope ((object ) [], [new BusNameStamp ('bus.foo ' )]);
112+
113+ yield 'envelope.stamps CONTAINS BusNameStamp ' => [
114+ [$ exceptions [0 ]],
88115 $ this ->getMessageFailedEvent ($ envelope , 'receiver ' , $ exceptions [0 ], false ),
116+ [
117+ 'messenger.receiver_name ' => 'receiver ' ,
118+ 'messenger.message_class ' => \get_class ($ envelope ->getMessage ()),
119+ 'messenger.message_bus ' => 'bus.foo ' ,
120+ ],
89121 ];
90122 }
91123
0 commit comments