7
7
use PHPUnit \Framework \MockObject \MockObject ;
8
8
use PHPUnit \Framework \TestCase ;
9
9
use Sentry \ClientInterface ;
10
+ use Sentry \Event ;
10
11
use Sentry \SentryBundle \EventListener \MessengerListener ;
11
12
use Sentry \SentryBundle \Tests \End2End \App \Kernel ;
12
13
use Sentry \State \HubInterface ;
14
+ use Sentry \State \Scope ;
13
15
use Symfony \Component \Messenger \Envelope ;
14
16
use Symfony \Component \Messenger \Event \WorkerMessageFailedEvent ;
15
17
use Symfony \Component \Messenger \Event \WorkerMessageHandledEvent ;
16
18
use Symfony \Component \Messenger \Exception \HandlerFailedException ;
17
19
use Symfony \Component \Messenger \MessageBusInterface ;
20
+ use Symfony \Component \Messenger \Stamp \BusNameStamp ;
18
21
19
22
final class MessengerListenerTest extends TestCase
20
23
{
@@ -37,14 +40,23 @@ protected function setUp(): void
37
40
/**
38
41
* @dataProvider handleWorkerMessageFailedEventDataProvider
39
42
*
40
- * @param \Throwable[] $exceptions
43
+ * @param \Throwable[] $exceptions
44
+ * @param array<string, string> $expectedTags
41
45
*/
42
- public function testHandleWorkerMessageFailedEvent (array $ exceptions , WorkerMessageFailedEvent $ event ): void
46
+ public function testHandleWorkerMessageFailedEvent (array $ exceptions , WorkerMessageFailedEvent $ event, array $ expectedTags ): void
43
47
{
44
48
if (!$ this ->supportsMessenger ()) {
45
49
$ this ->markTestSkipped ('Messenger not supported in this environment. ' );
46
50
}
47
51
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
+
48
60
$ this ->hub ->expects ($ this ->exactly (\count ($ exceptions )))
49
61
->method ('captureException ' )
50
62
->withConsecutive (...array_map (static function (\Throwable $ exception ): array {
@@ -57,6 +69,10 @@ public function testHandleWorkerMessageFailedEvent(array $exceptions, WorkerMess
57
69
58
70
$ listener = new MessengerListener ($ this ->hub );
59
71
$ listener ->handleWorkerMessageFailedEvent ($ event );
72
+
73
+ $ sentryEvent = $ scope ->applyToEvent (Event::createEvent ());
74
+
75
+ $ this ->assertSame ($ expectedTags , $ sentryEvent ->getTags ());
60
76
}
61
77
62
78
/**
@@ -74,18 +90,34 @@ public function handleWorkerMessageFailedEventDataProvider(): \Generator
74
90
new \Exception (),
75
91
];
76
92
77
- yield [
93
+ yield ' envelope.throwable INSTANCEOF HandlerFailedException ' => [
78
94
$ exceptions ,
79
95
$ this ->getMessageFailedEvent ($ envelope , 'receiver ' , new HandlerFailedException ($ envelope , $ exceptions ), false ),
96
+ [
97
+ 'messenger.receiver_name ' => 'receiver ' ,
98
+ 'messenger.message_class ' => \get_class ($ envelope ->getMessage ()),
99
+ ],
80
100
];
81
101
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
+ ],
84
109
];
85
110
86
- yield [
87
- $ exceptions ,
111
+ $ envelope = new Envelope ((object ) [], [new BusNameStamp ('bus.foo ' )]);
112
+
113
+ yield 'envelope.stamps CONTAINS BusNameStamp ' => [
114
+ [$ exceptions [0 ]],
88
115
$ 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
+ ],
89
121
];
90
122
}
91
123
0 commit comments