diff --git a/src/Message/Envelope.php b/src/Message/Envelope.php index dc122f12..ef1a2ab6 100644 --- a/src/Message/Envelope.php +++ b/src/Message/Envelope.php @@ -4,13 +4,8 @@ namespace Yiisoft\Queue\Message; -use function is_array; - abstract class Envelope implements MessageInterface { - /** @psalm-suppress MissingClassConstType */ - final public const ENVELOPE_STACK_KEY = 'envelopes'; - /** * @psalm-var array */ @@ -20,7 +15,7 @@ abstract class Envelope implements MessageInterface public function __construct(MessageInterface $message, array $metadata) { - $this->metadata = $this->prepareMetadata($message->getMetadata(), $metadata); + $this->metadata = array_merge($message->getMetadata(), $metadata); while ($message instanceof self) { $message = $message->getMessage(); @@ -54,23 +49,4 @@ final public function getMetadata(): array { return $this->metadata; } - - private function prepareMetadata(array $messageMeta, array $metadata): array - { - $stack = $messageMeta[self::ENVELOPE_STACK_KEY] ?? []; - if (!is_array($stack)) { - $stack = []; - } - - return array_merge( - $messageMeta, - [ - self::ENVELOPE_STACK_KEY => array_merge( - $stack, - [static::class], - ), - ], - $metadata, - ); - } } diff --git a/src/Message/JsonMessageSerializer.php b/src/Message/JsonMessageSerializer.php index d8831900..b5458069 100644 --- a/src/Message/JsonMessageSerializer.php +++ b/src/Message/JsonMessageSerializer.php @@ -54,12 +54,6 @@ public function unserialize(string $value): MessageInterface throw new InvalidArgumentException('Metadata must be an array. Got ' . get_debug_type($meta) . '.'); } - $envelopes = []; - if (isset($meta[Envelope::ENVELOPE_STACK_KEY]) && is_array($meta[Envelope::ENVELOPE_STACK_KEY])) { - $envelopes = $meta[Envelope::ENVELOPE_STACK_KEY]; - } - $meta[Envelope::ENVELOPE_STACK_KEY] = []; - $class = $meta['message-class'] ?? Message::class; // Don't check subclasses when it's a default class: that's faster if ($class !== Message::class && !is_subclass_of($class, MessageInterface::class)) { @@ -69,14 +63,6 @@ public function unserialize(string $value): MessageInterface /** * @var class-string $class */ - $message = $class::fromData($type, $payload['data'] ?? null, $meta); - - foreach ($envelopes as $envelope) { - if (is_string($envelope) && class_exists($envelope) && is_subclass_of($envelope, Envelope::class)) { - $message = $envelope::fromMessage($message); - } - } - - return $message; + return $class::fromData($type, $payload['data'] ?? null, $meta); } } diff --git a/tests/Unit/EnvelopeTest.php b/tests/Unit/EnvelopeTest.php index 5c9bc112..a353c494 100644 --- a/tests/Unit/EnvelopeTest.php +++ b/tests/Unit/EnvelopeTest.php @@ -5,7 +5,6 @@ namespace Yiisoft\Queue\Tests\Unit; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Envelope; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\Message; @@ -17,14 +16,6 @@ public function testEnvelopeStack(): void $message = new IdEnvelope($message, 'test-id'); $this->assertEquals('test', $message->getMessage()->getData()); - - $stack = $message->getMetadata()[Envelope::ENVELOPE_STACK_KEY]; - $this->assertIsArray($stack); - - $this->assertEquals([ - IdEnvelope::class, - ], $stack); - $this->assertEquals('test-id', $message->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]); } @@ -36,15 +27,6 @@ public function testEnvelopeDuplicates(): void $message = new IdEnvelope($message, 'test-id-3'); $this->assertEquals('test', $message->getMessage()->getData()); - - $stack = $message->getMetadata()[Envelope::ENVELOPE_STACK_KEY]; - $this->assertIsArray($stack); - $this->assertEquals([ - IdEnvelope::class, - IdEnvelope::class, - IdEnvelope::class, - ], $stack); - $this->assertEquals('test-id-3', $message->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]); } } diff --git a/tests/Unit/Message/EnvelopeTest.php b/tests/Unit/Message/EnvelopeTest.php index 22f109cd..67ba1d2e 100644 --- a/tests/Unit/Message/EnvelopeTest.php +++ b/tests/Unit/Message/EnvelopeTest.php @@ -5,9 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Message; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Envelope; use Yiisoft\Queue\Tests\App\DummyEnvelope; -use Yiisoft\Queue\Message\Message; final class EnvelopeTest extends TestCase { @@ -25,14 +23,4 @@ public function testFromData(): void $this->assertArrayHasKey('meta', $envelope->getMetadata()); $this->assertSame('data', $envelope->getMetadata()['meta']); } - - public function testNonArrayStackIsNormalized(): void - { - $base = new Message('handler', 'data', [Envelope::ENVELOPE_STACK_KEY => 'oops']); - $wrapped = new DummyEnvelope($base); - - $meta = $wrapped->getMetadata(); - self::assertIsArray($meta[Envelope::ENVELOPE_STACK_KEY]); - self::assertSame([DummyEnvelope::class], $meta[Envelope::ENVELOPE_STACK_KEY]); - } } diff --git a/tests/Unit/Message/JsonMessageSerializerTest.php b/tests/Unit/Message/JsonMessageSerializerTest.php index 44f98281..a201aa2f 100644 --- a/tests/Unit/Message/JsonMessageSerializerTest.php +++ b/tests/Unit/Message/JsonMessageSerializerTest.php @@ -7,7 +7,6 @@ use InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Envelope; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\JsonMessageSerializer; use Yiisoft\Queue\Message\Message; @@ -115,7 +114,7 @@ public function testUnserializeFromData(): void $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); $this->assertEquals($payload['data'], $message->getData()); - $this->assertEquals([Envelope::ENVELOPE_STACK_KEY => []], $message->getMetadata()); + $this->assertEquals([], $message->getMetadata()); } public function testUnserializeWithMetadata(): void @@ -126,31 +125,7 @@ public function testUnserializeWithMetadata(): void $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); $this->assertEquals($payload['data'], $message->getData()); - $this->assertEquals(['int' => 1, 'str' => 'string', 'bool' => true, Envelope::ENVELOPE_STACK_KEY => []], $message->getMetadata()); - } - - public function testUnserializeEnvelopeStack(): void - { - $payload = [ - 'type' => 'handler', - 'data' => 'test', - 'meta' => [ - Envelope::ENVELOPE_STACK_KEY => [ - IdEnvelope::class, - ], - ], - ]; - $serializer = $this->createSerializer(); - - /** @var IdEnvelope $message */ - $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); - - $this->assertEquals($payload['data'], $message->getData()); - $this->assertEquals([IdEnvelope::class], $message->getMetadata()[Envelope::ENVELOPE_STACK_KEY]); - - $this->assertInstanceOf(IdEnvelope::class, $message); - $this->assertNull($message->getId()); - $this->assertInstanceOf(Message::class, $message->getMessage()); + $this->assertEquals(['int' => 1, 'str' => 'string', 'bool' => true], $message->getMetadata()); } public function testSerialize(): void @@ -178,32 +153,20 @@ public function testSerializeEnvelopeStack(): void $this->assertEquals( sprintf( - '{"type":"handler","data":"test","meta":{"envelopes":["%s"],"%s":"test-id","message-class":"%s"}}', - str_replace('\\', '\\\\', IdEnvelope::class), + '{"type":"handler","data":"test","meta":{"%s":"test-id","message-class":"%s"}}', IdEnvelope::MESSAGE_ID_KEY, str_replace('\\', '\\\\', Message::class), ), $json, ); - /** @var IdEnvelope $message */ $message = $serializer->unserialize($json); - $this->assertInstanceOf(IdEnvelope::class, $message); - $this->assertEquals('test-id', $message->getId()); + $this->assertInstanceOf(Message::class, $message); $this->assertEquals([ - Envelope::ENVELOPE_STACK_KEY => [ - IdEnvelope::class, - ], IdEnvelope::MESSAGE_ID_KEY => 'test-id', 'message-class' => Message::class, ], $message->getMetadata()); - - $this->assertEquals([ - Envelope::ENVELOPE_STACK_KEY => [], - IdEnvelope::MESSAGE_ID_KEY => 'test-id', - 'message-class' => Message::class, - ], $message->getMessage()->getMetadata()); } public function testRestoreOriginalMessageClass(): void