Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5db2ba1

Browse files
committed
Allow using user's serializer for message do not fit the expected JSON structure
1 parent88c5349 commit5db2ba1

File tree

11 files changed

+239
-79
lines changed

11 files changed

+239
-79
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespaceSymfony\Component\Messenger\Bridge\Redis\Tests\Fixtures;
4+
5+
class ExternalMessage
6+
{
7+
private$foo;
8+
private$bar = [];
9+
10+
publicfunction__construct(string$foo)
11+
{
12+
$this->foo =$foo;
13+
}
14+
15+
publicfunctiongetFoo():string
16+
{
17+
return$this->foo;
18+
}
19+
20+
publicfunctionsetBar(array$bar):self
21+
{
22+
$this->bar =$bar;
23+
24+
return$this;
25+
}
26+
27+
publicfunctiongetBar():array
28+
{
29+
return$this->bar;
30+
}
31+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespaceSymfony\Component\Messenger\Bridge\Redis\Tests\Fixtures;
4+
5+
useSymfony\Component\Messenger\Envelope;
6+
useSymfony\Component\Messenger\Transport\Serialization\SerializerInterface;
7+
8+
class ExternalMessageSerializerimplements SerializerInterface
9+
{
10+
publicfunctiondecode(array$encodedEnvelope):Envelope
11+
{
12+
$message =newExternalMessage($encodedEnvelope['foo']);
13+
$message->setBar($encodedEnvelope['bar']);
14+
15+
returnnewEnvelope($message);
16+
}
17+
18+
publicfunctionencode(Envelope$envelope):array
19+
{
20+
return [
21+
'body' =>$envelope->getMessage(),
22+
'headers' => [],
23+
];
24+
}
25+
}

‎src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/ConnectionTest.php‎

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,17 @@ public function testGetPendingMessageFirst()
292292
->willReturn(['queue' => [['message' =>'{"body":"1","headers":[]}']]]);
293293

294294
$connection = Connection::fromDsn('redis://localhost/queue', [],$redis);
295-
$connection->get();
295+
$message =$connection->get();
296+
297+
$this->assertSame([
298+
'id' =>0,
299+
'message' => [
300+
'message' =>json_encode([
301+
'body' =>'1',
302+
'headers' => [],
303+
]),
304+
],
305+
],$message);
296306
}
297307

298308
publicfunctiontestClaimAbandonedMessageWithRaceCondition()
@@ -479,7 +489,12 @@ public function testLazy()
479489

480490
$connection->add('1', []);
481491
$this->assertNotEmpty($message =$connection->get());
482-
$this->assertSame('1',$message['body']);
492+
$this->assertSame([
493+
'message' =>json_encode([
494+
'body' =>'1',
495+
'headers' => [],
496+
]),
497+
],$message['message']);
483498
$connection->reject($message['id']);
484499
$redis->del('messenger-lazy');
485500
}
@@ -495,7 +510,12 @@ public function testLazyCluster()
495510

496511
$connection->add('1', []);
497512
$this->assertNotEmpty($message =$connection->get());
498-
$this->assertSame('1',$message['body']);
513+
$this->assertSame([
514+
'message' =>json_encode([
515+
'body' =>'1',
516+
'headers' => [],
517+
]),
518+
],$message['message']);
499519
$connection->reject($message['id']);
500520
$connection->cleanup();
501521
}

‎src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisExtIntegrationTest.php‎

Lines changed: 76 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,33 @@ protected function setUp(): void
4444
publicfunctiontestConnectionSendAndGet()
4545
{
4646
$this->connection->add('{"message": "Hi"}', ['type' => DummyMessage::class]);
47-
$encoded =$this->connection->get();
48-
$this->assertEquals('{"message": "Hi"}',$encoded['body']);
49-
$this->assertEquals(['type' => DummyMessage::class],$encoded['headers']);
47+
$message =$this->connection->get();
48+
$this->assertEquals([
49+
'message' =>json_encode([
50+
'body' =>'{"message": "Hi"}',
51+
'headers' => ['type' => DummyMessage::class],
52+
]),
53+
],$message['message']);
5054
}
5155

5256
publicfunctiontestGetTheFirstAvailableMessage()
5357
{
5458
$this->connection->add('{"message": "Hi1"}', ['type' => DummyMessage::class]);
5559
$this->connection->add('{"message": "Hi2"}', ['type' => DummyMessage::class]);
56-
$encoded =$this->connection->get();
57-
$this->assertEquals('{"message": "Hi1"}',$encoded['body']);
58-
$this->assertEquals(['type' => DummyMessage::class],$encoded['headers']);
59-
$encoded =$this->connection->get();
60-
$this->assertEquals('{"message": "Hi2"}',$encoded['body']);
61-
$this->assertEquals(['type' => DummyMessage::class],$encoded['headers']);
60+
$message =$this->connection->get();
61+
$this->assertEquals([
62+
'message' =>json_encode([
63+
'body' =>'{"message": "Hi1"}',
64+
'headers' => ['type' => DummyMessage::class],
65+
]),
66+
],$message['message']);
67+
$message =$this->connection->get();
68+
$this->assertEquals([
69+
'message' =>json_encode([
70+
'body' =>'{"message": "Hi2"}',
71+
'headers' => ['type' => DummyMessage::class],
72+
]),
73+
],$message['message']);
6274
}
6375

6476
publicfunctiontestConnectionSendWithSameContent()
@@ -69,24 +81,36 @@ public function testConnectionSendWithSameContent()
6981
$this->connection->add($body,$headers);
7082
$this->connection->add($body,$headers);
7183

72-
$encoded =$this->connection->get();
73-
$this->assertEquals($body,$encoded['body']);
74-
$this->assertEquals($headers,$encoded['headers']);
75-
76-
$encoded =$this->connection->get();
77-
$this->assertEquals($body,$encoded['body']);
78-
$this->assertEquals($headers,$encoded['headers']);
84+
$message =$this->connection->get();
85+
$this->assertEquals([
86+
'message' =>json_encode([
87+
'body' =>$body,
88+
'headers' =>$headers,
89+
]),
90+
],$message['message']);
91+
92+
$message =$this->connection->get();
93+
$this->assertEquals([
94+
'message' =>json_encode([
95+
'body' =>$body,
96+
'headers' =>$headers,
97+
]),
98+
],$message['message']);
7999
}
80100

81101
publicfunctiontestConnectionSendAndGetDelayed()
82102
{
83103
$this->connection->add('{"message": "Hi"}', ['type' => DummyMessage::class],500);
84-
$encoded =$this->connection->get();
85-
$this->assertNull($encoded);
104+
$message =$this->connection->get();
105+
$this->assertNull($message);
86106
sleep(2);
87-
$encoded =$this->connection->get();
88-
$this->assertEquals('{"message": "Hi"}',$encoded['body']);
89-
$this->assertEquals(['type' => DummyMessage::class],$encoded['headers']);
107+
$message =$this->connection->get();
108+
$this->assertEquals([
109+
'message' =>json_encode([
110+
'body' =>'{"message": "Hi"}',
111+
'headers' => ['type' => DummyMessage::class],
112+
]),
113+
],$message['message']);
90114
}
91115

92116
publicfunctiontestConnectionSendDelayedMessagesWithSameContent()
@@ -97,13 +121,21 @@ public function testConnectionSendDelayedMessagesWithSameContent()
97121
$this->connection->add($body,$headers,500);
98122
$this->connection->add($body,$headers,500);
99123
sleep(2);
100-
$encoded =$this->connection->get();
101-
$this->assertEquals($body,$encoded['body']);
102-
$this->assertEquals($headers,$encoded['headers']);
103-
104-
$encoded =$this->connection->get();
105-
$this->assertEquals($body,$encoded['body']);
106-
$this->assertEquals($headers,$encoded['headers']);
124+
$message =$this->connection->get();
125+
$this->assertEquals([
126+
'message' =>json_encode([
127+
'body' =>$body,
128+
'headers' =>$headers,
129+
]),
130+
],$message['message']);
131+
132+
$message =$this->connection->get();
133+
$this->assertEquals([
134+
'message' =>json_encode([
135+
'body' =>$body,
136+
'headers' =>$headers,
137+
]),
138+
],$message['message']);
107139
}
108140

109141
publicfunctiontestConnectionBelowRedeliverTimeout()
@@ -161,16 +193,24 @@ public function testConnectionClaimAndRedeliver()
161193
);
162194

163195
// Queue will return the pending message first because redeliver_timeout = 0
164-
$encoded =$connection->get();
165-
$this->assertEquals($body1,$encoded['body']);
166-
$this->assertEquals($headers,$encoded['headers']);
167-
$connection->ack($encoded['id']);
196+
$message =$connection->get();
197+
$this->assertEquals([
198+
'message' =>json_encode([
199+
'body' =>$body1,
200+
'headers' =>$headers,
201+
]),
202+
],$message['message']);
203+
$connection->ack($message['id']);
168204

169205
// Queue will return the second message
170-
$encoded =$connection->get();
171-
$this->assertEquals($body2,$encoded['body']);
172-
$this->assertEquals($headers,$encoded['headers']);
173-
$connection->ack($encoded['id']);
206+
$message =$connection->get();
207+
$this->assertEquals([
208+
'message' =>json_encode([
209+
'body' =>$body2,
210+
'headers' =>$headers,
211+
]),
212+
],$message['message']);
213+
$connection->ack($message['id']);
174214
}
175215

176216
privatefunctiongetConnectionGroup(Connection$connection):string

‎src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisReceiverTest.php‎

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,64 +13,105 @@
1313

1414
usePHPUnit\Framework\TestCase;
1515
useSymfony\Component\Messenger\Bridge\Redis\Tests\Fixtures\DummyMessage;
16+
useSymfony\Component\Messenger\Bridge\Redis\Tests\Fixtures\ExternalMessage;
17+
useSymfony\Component\Messenger\Bridge\Redis\Tests\Fixtures\ExternalMessageSerializer;
1618
useSymfony\Component\Messenger\Bridge\Redis\Transport\Connection;
1719
useSymfony\Component\Messenger\Bridge\Redis\Transport\RedisReceiver;
1820
useSymfony\Component\Messenger\Exception\MessageDecodingFailedException;
1921
useSymfony\Component\Messenger\Transport\Serialization\PhpSerializer;
2022
useSymfony\Component\Messenger\Transport\Serialization\Serializer;
23+
useSymfony\Component\Messenger\Transport\Serialization\SerializerInterface;
2124
useSymfony\Component\SerializerasSerializerComponent;
2225
useSymfony\Component\Serializer\Encoder\JsonEncoder;
2326
useSymfony\Component\Serializer\Normalizer\ObjectNormalizer;
2427

2528
class RedisReceiverTestextends TestCase
2629
{
27-
publicfunctiontestItReturnsTheDecodedMessageToTheHandler()
30+
/**
31+
* @dataProvider redisEnvelopeProvider
32+
*/
33+
publicfunctiontestItReturnsTheDecodedMessageToTheHandler(array$redisEnvelope,$expectedMessage,SerializerInterface$serializer)
2834
{
29-
$serializer =$this->createSerializer();
30-
31-
$redisEnvelop =$this->createRedisEnvelope();
3235
$connection =$this->createMock(Connection::class);
33-
$connection->method('get')->willReturn($redisEnvelop);
36+
$connection->method('get')->willReturn($redisEnvelope);
3437

3538
$receiver =newRedisReceiver($connection,$serializer);
3639
$actualEnvelopes =$receiver->get();
3740
$this->assertCount(1,$actualEnvelopes);
38-
$this->assertEquals(newDummyMessage('Hi'),$actualEnvelopes[0]->getMessage());
41+
$this->assertEquals($expectedMessage,$actualEnvelopes[0]->getMessage());
3942
}
4043

41-
publicfunctiontestItRejectTheMessageIfThereIsAMessageDecodingFailedException()
44+
/**
45+
* @dataProvider rejectedRedisEnvelopeProvider
46+
*/
47+
publicfunctiontestItRejectTheMessageIfThereIsAMessageDecodingFailedException(array$redisEnvelope)
4248
{
4349
$this->expectException(MessageDecodingFailedException::class);
4450

4551
$serializer =$this->createMock(PhpSerializer::class);
4652
$serializer->method('decode')->willThrowException(newMessageDecodingFailedException());
4753

48-
$redisEnvelop =$this->createRedisEnvelope();
4954
$connection =$this->createMock(Connection::class);
50-
$connection->method('get')->willReturn($redisEnvelop);
55+
$connection->method('get')->willReturn($redisEnvelope);
5156
$connection->expects($this->once())->method('reject');
5257

5358
$receiver =newRedisReceiver($connection,$serializer);
5459
$receiver->get();
5560
}
5661

57-
privatefunctioncreateRedisEnvelope():array
62+
publicfunctionredisEnvelopeProvider():\Generator
5863
{
59-
return [
60-
'id' =>1,
61-
'body' =>'{"message": "Hi"}',
62-
'headers' => [
63-
'type' => DummyMessage::class,
64+
yield [
65+
[
66+
'id' =>1,
67+
'message' =>json_encode([
68+
'body' =>'{"message": "Hi"}',
69+
'headers' => [
70+
'type' => DummyMessage::class,
71+
],
72+
]),
73+
],
74+
newDummyMessage('Hi'),
75+
newSerializer(
76+
newSerializerComponent\Serializer([newObjectNormalizer()], ['json' =>newJsonEncoder()])
77+
),
78+
];
79+
80+
yield [
81+
[
82+
'id' =>2,
83+
'foo' =>'fooValue',
84+
'bar' => [
85+
'baz' =>'bazValue',
86+
],
6487
],
88+
(newExternalMessage('fooValue'))->setBar(['baz' =>'bazValue']),
89+
newExternalMessageSerializer(),
6590
];
6691
}
6792

68-
privatefunctioncreateSerializer():Serializer
93+
publicfunctionrejectedRedisEnvelopeProvider():\Generator
6994
{
70-
$serializer =newSerializer(
71-
newSerializerComponent\Serializer([newObjectNormalizer()], ['json' =>newJsonEncoder()])
72-
);
95+
yield [
96+
[
97+
'id' =>1,
98+
'message' =>json_encode([
99+
'body' =>'{"message": "Hi"}',
100+
'headers' => [
101+
'type' => DummyMessage::class,
102+
],
103+
]),
104+
],
105+
];
73106

74-
return$serializer;
107+
yield [
108+
[
109+
'id' =>2,
110+
'foo' =>'fooValue',
111+
'bar' => [
112+
'baz' =>'bazValue',
113+
],
114+
],
115+
];
75116
}
76117
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp