28
28
use Symfony \Component \Messenger \Transport \Serialization \Serializer ;
29
29
use Symfony \Component \Serializer as SerializerComponent ;
30
30
use Symfony \Component \Serializer \Encoder \JsonEncoder ;
31
+ use Symfony \Component \Serializer \Normalizer \ArrayDenormalizer ;
32
+ use Symfony \Component \Serializer \Normalizer \DateTimeNormalizer ;
31
33
use Symfony \Component \Serializer \Normalizer \ObjectNormalizer ;
32
34
33
35
class DoctrineReceiverTest extends TestCase
@@ -100,6 +102,23 @@ public function testOccursRetryableExceptionFromConnection()
100
102
$ receiver ->get ();
101
103
}
102
104
105
+ public function testGetReplacesExistingTransportMessageIdStamps ()
106
+ {
107
+ $ serializer = $ this ->createSerializer ();
108
+
109
+ $ doctrineEnvelope = $ this ->createRetriedDoctrineEnvelope ();
110
+ $ connection = $ this ->createMock (Connection::class);
111
+ $ connection ->method ('get ' )->willReturn ($ doctrineEnvelope );
112
+
113
+ $ receiver = new DoctrineReceiver ($ connection , $ serializer );
114
+ $ actualEnvelopes = $ receiver ->get ();
115
+ /** @var Envelope $actualEnvelope */
116
+ $ actualEnvelope = $ actualEnvelopes [0 ];
117
+ $ messageIdStamps = $ actualEnvelope ->all (TransportMessageIdStamp::class);
118
+
119
+ $ this ->assertCount (1 , $ messageIdStamps );
120
+ }
121
+
103
122
public function testAll ()
104
123
{
105
124
$ serializer = $ this ->createSerializer ();
@@ -115,6 +134,24 @@ public function testAll()
115
134
$ this ->assertEquals (new DummyMessage ('Hi ' ), $ actualEnvelopes [0 ]->getMessage ());
116
135
}
117
136
137
+ public function testAllReplacesExistingTransportMessageIdStamps ()
138
+ {
139
+ $ serializer = $ this ->createSerializer ();
140
+
141
+ $ doctrineEnvelope1 = $ this ->createRetriedDoctrineEnvelope ();
142
+ $ doctrineEnvelope2 = $ this ->createRetriedDoctrineEnvelope ();
143
+ $ connection = $ this ->createMock (Connection::class);
144
+ $ connection ->method ('findAll ' )->willReturn ([$ doctrineEnvelope1 , $ doctrineEnvelope2 ]);
145
+
146
+ $ receiver = new DoctrineReceiver ($ connection , $ serializer );
147
+ $ actualEnvelopes = $ receiver ->all ();
148
+ foreach ($ actualEnvelopes as $ actualEnvelope ) {
149
+ $ messageIdStamps = $ actualEnvelope ->all (TransportMessageIdStamp::class);
150
+
151
+ $ this ->assertCount (1 , $ messageIdStamps );
152
+ }
153
+ }
154
+
118
155
public function testFind ()
119
156
{
120
157
$ serializer = $ this ->createSerializer ();
@@ -128,6 +165,21 @@ public function testFind()
128
165
$ this ->assertEquals (new DummyMessage ('Hi ' ), $ actualEnvelope ->getMessage ());
129
166
}
130
167
168
+ public function testFindReplacesExistingTransportMessageIdStamps ()
169
+ {
170
+ $ serializer = $ this ->createSerializer ();
171
+
172
+ $ doctrineEnvelope = $ this ->createRetriedDoctrineEnvelope ();
173
+ $ connection = $ this ->createMock (Connection::class);
174
+ $ connection ->method ('find ' )->with (3 )->willReturn ($ doctrineEnvelope );
175
+
176
+ $ receiver = new DoctrineReceiver ($ connection , $ serializer );
177
+ $ actualEnvelope = $ receiver ->find (3 );
178
+ $ messageIdStamps = $ actualEnvelope ->all (TransportMessageIdStamp::class);
179
+
180
+ $ this ->assertCount (1 , $ messageIdStamps );
181
+ }
182
+
131
183
public function testAck ()
132
184
{
133
185
$ serializer = $ this ->createSerializer ();
@@ -195,7 +247,7 @@ public function testAckThrowsRetryableExceptionAndRetriesFail()
195
247
->with ('1 ' )
196
248
->willThrowException ($ deadlockException );
197
249
198
- self :: expectException (TransportException::class);
250
+ $ this -> expectException (TransportException::class);
199
251
$ receiver ->ack ($ envelope );
200
252
}
201
253
@@ -215,7 +267,7 @@ public function testAckThrowsException()
215
267
->with ('1 ' )
216
268
->willThrowException ($ exception );
217
269
218
- self :: expectException ($ exception ::class);
270
+ $ this -> expectException ($ exception ::class);
219
271
$ receiver ->ack ($ envelope );
220
272
}
221
273
@@ -286,7 +338,7 @@ public function testRejectThrowsRetryableExceptionAndRetriesFail()
286
338
->with ('1 ' )
287
339
->willThrowException ($ deadlockException );
288
340
289
- self :: expectException (TransportException::class);
341
+ $ this -> expectException (TransportException::class);
290
342
$ receiver ->reject ($ envelope );
291
343
}
292
344
@@ -306,7 +358,7 @@ public function testRejectThrowsException()
306
358
->with ('1 ' )
307
359
->willThrowException ($ exception );
308
360
309
- self :: expectException ($ exception ::class);
361
+ $ this -> expectException ($ exception ::class);
310
362
$ receiver ->reject ($ envelope );
311
363
}
312
364
@@ -321,12 +373,27 @@ private function createDoctrineEnvelope(): array
321
373
];
322
374
}
323
375
376
+ private function createRetriedDoctrineEnvelope (): array
377
+ {
55F
378
+ return [
379
+ 'id ' => 3 ,
380
+ 'body ' => '{"message": "Hi"} ' ,
381
+ 'headers ' => [
382
+ 'type ' => DummyMessage::class,
383
+ 'X-Message-Stamp-Symfony\Component\Messenger\Stamp\BusNameStamp ' => '[{"busName":"messenger.bus.default"}] ' ,
384
+ 'X-Message-Stamp-Symfony\Component\Messenger\Stamp\TransportMessageIdStamp ' => '[{"id":1},{"id":2}] ' ,
385
+ 'X-Message-Stamp-Symfony\Component\Messenger\Stamp\ErrorDetailsStamp ' => '[{"exceptionClass":"Symfony \\\\Component \\\\Messenger \\\\Exception \\\\RecoverableMessageHandlingException","exceptionCode":0,"exceptionMessage":"","flattenException":null}] ' ,
386
+ 'X-Message-Stamp-Symfony\Component\Messenger\Stamp\DelayStamp ' => '[{"delay":1000},{"delay":1000}] ' ,
387
+ 'X-Message-Stamp-Symfony\Component\Messenger\Stamp\RedeliveryStamp ' => '[{"retryCount":1,"redeliveredAt":"2025-01-05T13:58:25+00:00"},{"retryCount":2,"redeliveredAt":"2025-01-05T13:59:26+00:00"}] ' ,
388
+ 'Content-Type ' => 'application/json ' ,
389
+ ],
390
+ ];
391
+ }
392
+
324
393
private function createSerializer (): Serializer
325
394
{
326
- $ serializer = new Serializer (
327
- new SerializerComponent \Serializer ([new ObjectNormalizer ()], ['json ' => new JsonEncoder ()])
395
+ return new Serializer (
396
+ new SerializerComponent \Serializer ([new DateTimeNormalizer (), new ArrayDenormalizer (), new ObjectNormalizer ()], ['json ' => new JsonEncoder ()])
328
397
);
329
-
330
- return $ serializer ;
331
398
}
332
399
}
0 commit comments