1111use Yiisoft \Queue \Message \JsonMessageSerializer ;
1212use Yiisoft \Queue \Message \Message ;
1313use Yiisoft \Queue \Message \MessageInterface ;
14+ use Yiisoft \Queue \Tests \Unit \Support \TestMessage ;
1415
1516/**
1617 * Testing message serialization options
@@ -42,10 +43,10 @@ public static function dataUnsupportedPayloadFormat(): iterable
4243 */
4344 public function testMetadataFormat (mixed $ meta ): void
4445 {
45- $ payload = ['data ' => 'test ' , 'meta ' => $ meta ];
46+ $ payload = ['name ' => ' handler ' , ' data ' => 'test ' , 'meta ' => $ meta ];
4647 $ serializer = $ this ->createSerializer ();
4748
48- $ this ->expectExceptionMessage (sprintf ('Metadata must be array. Got %s. ' , get_debug_type ($ meta )));
49+ $ this ->expectExceptionMessage (sprintf ('Metadata must be an array. Got %s. ' , get_debug_type ($ meta )));
4950 $ this ->expectException (InvalidArgumentException::class);
5051 $ serializer ->unserialize (json_encode ($ payload ));
5152 }
@@ -59,31 +60,32 @@ public static function dataUnsupportedMetadataFormat(): iterable
5960
6061 public function testUnserializeFromData (): void
6162 {
62- $ payload = ['data ' => 'test ' ];
63+ $ payload = ['name ' => ' handler ' , ' data ' => 'test ' ];
6364 $ serializer = $ this ->createSerializer ();
6465
6566 $ message = $ serializer ->unserialize (json_encode ($ payload ));
6667
6768 $ this ->assertInstanceOf (MessageInterface::class, $ message );
6869 $ this ->assertEquals ($ payload ['data ' ], $ message ->getData ());
69- $ this ->assertEquals ([], $ message ->getMetadata ());
70+ $ this ->assertEquals ([EnvelopeInterface:: ENVELOPE_STACK_KEY => [] ], $ message ->getMetadata ());
7071 }
7172
7273 public function testUnserializeWithMetadata (): void
7374 {
74- $ payload = ['data ' => 'test ' , 'meta ' => ['int ' => 1 , 'str ' => 'string ' , 'bool ' => true ]];
75+ $ payload = ['name ' => ' handler ' , ' data ' => 'test ' , 'meta ' => ['int ' => 1 , 'str ' => 'string ' , 'bool ' => true ]];
7576 $ serializer = $ this ->createSerializer ();
7677
7778 $ message = $ serializer ->unserialize (json_encode ($ payload ));
7879
7980 $ this ->assertInstanceOf (MessageInterface::class, $ message );
8081 $ this ->assertEquals ($ payload ['data ' ], $ message ->getData ());
81- $ this ->assertEquals (['int ' => 1 , 'str ' => 'string ' , 'bool ' => true ], $ message ->getMetadata ());
82+ $ this ->assertEquals (['int ' => 1 , 'str ' => 'string ' , 'bool ' => true , EnvelopeInterface:: ENVELOPE_STACK_KEY => [] ], $ message ->getMetadata ());
8283 }
8384
8485 public function testUnserializeEnvelopeStack (): void
8586 {
8687 $ payload = [
88+ 'name ' => 'handler ' ,
8789 'data ' => 'test ' ,
8890 'meta ' => [
8991 EnvelopeInterface::ENVELOPE_STACK_KEY => [
@@ -113,7 +115,7 @@ public function testSerialize(): void
113115 $ json = $ serializer ->serialize ($ message );
114116
115117 $ this ->assertEquals (
116- '{"name":"handler","data":"test","meta":[] } ' ,
118+ '{"name":"handler","data":"test","meta":{"message-class":"Yiisoft \\\\ Queue \\\\ Message \\\\ Message"} } ' ,
117119 $ json ,
118120 );
119121 }
@@ -129,9 +131,10 @@ public function testSerializeEnvelopeStack(): void
129131
130132 $ this ->assertEquals (
131133 sprintf (
132- '{"name":"handler","data":"test","meta":{"envelopes":["%s"],"%s":"test-id"}} ' ,
134+ '{"name":"handler","data":"test","meta":{"envelopes":["%s"],"%s":"test-id","message-class":"%s" }} ' ,
133135 str_replace ('\\' , '\\\\' , IdEnvelope::class),
134136 IdEnvelope::MESSAGE_ID_KEY ,
137+ str_replace ('\\' , '\\\\' , Message::class),
135138 ),
136139 $ json ,
137140 );
@@ -145,14 +148,35 @@ public function testSerializeEnvelopeStack(): void
145148 IdEnvelope::class,
146149 ],
147150 IdEnvelope::MESSAGE_ID_KEY => 'test-id ' ,
151+ 'message-class ' => Message::class,
148152 ], $ message ->getMetadata ());
149153
150154 $ this ->assertEquals ([
151155 EnvelopeInterface::ENVELOPE_STACK_KEY => [],
152156 IdEnvelope::MESSAGE_ID_KEY => 'test-id ' ,
157+ 'message-class ' => Message::class,
153158 ], $ message ->getMessage ()->getMetadata ());
154159 }
155160
161+ public function testRestoreOriginalMessageClass (): void
162+ {
163+ $ message = new TestMessage ();
164+ $ serializer = $ this ->createSerializer ();
165+ $ serializer ->unserialize ($ serializer ->serialize ($ message ));
166+
167+ $ this ->assertInstanceOf (TestMessage::class, $ message );
168+ }
169+
170+ public function testRestoreOriginalMessageClassWithEnvelope (): void
171+ {
172+ $ message = new IdEnvelope (new TestMessage ());
173+ $ serializer = $ this ->createSerializer ();
174+ $ serializer ->unserialize ($ serializer ->serialize ($ message ));
175+
176+ $ this ->assertInstanceOf (IdEnvelope::class, $ message );
177+ $ this ->assertInstanceOf (TestMessage::class, $ message ->getMessage ());
178+ }
179+
156180 private function createSerializer (): JsonMessageSerializer
157181 {
158182 return new JsonMessageSerializer ();
0 commit comments