From 56367dcee68428b046d634c43db87e45fb46472a Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 13:28:24 +0300 Subject: [PATCH 01/12] Introduce abstract `Message` class --- docs/guide/en/configuration-manual.md | 2 +- docs/guide/en/message-handler-advanced.md | 4 +-- docs/guide/en/message-handler.md | 2 +- docs/guide/en/messages-and-handlers.md | 2 +- docs/guide/en/queue-names.md | 8 ++--- docs/guide/en/usage.md | 2 +- src/Message/Envelope.php | 13 +++++-- src/Message/JsonMessageSerializer.php | 8 ++--- src/Message/Message.php | 34 +++++------------- src/Message/MessageInterface.php | 9 ++++- src/Message/SimpleMessage.php | 32 +++++++++++++++++ tests/Benchmark/MetadataBench.php | 14 ++++---- tests/Benchmark/QueueBench.php | 10 +++--- tests/Integration/MessageConsumingTest.php | 8 ++--- tests/Integration/MiddlewareTest.php | 8 ++--- tests/Integration/Support/TestMiddleware.php | 6 ++-- tests/Unit/Debug/QueueCollectorTest.php | 6 ++-- .../Debug/QueueWorkerInterfaceProxyTest.php | 4 +-- tests/Unit/EnvelopeTest.php | 6 ++-- tests/Unit/Message/DelayEnvelopeTest.php | 8 ++--- tests/Unit/Message/EnvelopeTest.php | 17 ++++----- tests/Unit/Message/IdEnvelopeTest.php | 20 ++--------- .../Message/JsonMessageSerializerTest.php | 18 +++++----- .../Middleware/Consume/ConsumeRequestTest.php | 4 +-- .../Consume/MiddlewareDispatcherTest.php | 14 ++++---- .../Consume/MiddlewareFactoryTest.php | 6 ++-- .../Support/CallableObjectMiddleware.php | 4 +-- .../Support/StringCallableMiddleware.php | 4 +-- .../Support/TestCallableMiddleware.php | 4 +-- .../Consume/Support/TestMiddleware.php | 4 +-- .../FailureHandling/FailureEnvelopeTest.php | 23 ++---------- .../FailureHandlingRequestTest.php | 6 ++-- .../ExponentialDelayMiddlewareTest.php | 9 +++-- .../SendAgainMiddlewareTest.php | 7 ++-- .../MiddlewareDispatcherTest.php | 14 ++++---- .../FailureHandling/MiddlewareFactoryTest.php | 6 ++-- .../Support/CallableObjectMiddleware.php | 4 +-- .../Support/StringCallableMiddleware.php | 4 +-- .../Support/TestCallableMiddleware.php | 4 +-- .../Support/TestMiddleware.php | 4 +-- .../Push/AdapterPushHandlerTest.php | 4 +-- .../Push/Implementation/IdMiddlewareTest.php | 6 ++-- .../Push/MiddlewareDispatcherTest.php | 12 +++---- .../Middleware/Push/MiddlewareFactoryTest.php | 6 ++-- .../Push/Support/CallableObjectMiddleware.php | 4 +-- .../Push/Support/StringCallableMiddleware.php | 4 +-- .../Push/Support/TestCallableMiddleware.php | 4 +-- .../Push/Support/TestMiddleware.php | 4 +-- tests/Unit/QueueTest.php | 18 +++++----- tests/Unit/Stubs/InMemoryAdapterTest.php | 36 +++++++++---------- tests/Unit/Stubs/StubQueueTest.php | 4 +-- tests/Unit/Stubs/StubWorkerTest.php | 4 +-- tests/Unit/Support/TestMessage.php | 8 ++--- tests/Unit/WorkerTest.php | 22 ++++++------ 54 files changed, 242 insertions(+), 256 deletions(-) create mode 100644 src/Message/SimpleMessage.php diff --git a/docs/guide/en/configuration-manual.md b/docs/guide/en/configuration-manual.md index f4d70346..fd7a57eb 100644 --- a/docs/guide/en/configuration-manual.md +++ b/docs/guide/en/configuration-manual.md @@ -79,7 +79,7 @@ $queue = new Queue( ); // Now you can push messages -$message = new \Yiisoft\Queue\Message\Message('file-download', ['url' => 'https://example.com/file.pdf']); +$message = new \Yiisoft\Queue\Message\SimpleMessage('file-download', ['url' => 'https://example.com/file.pdf']); $queue->push($message); ``` diff --git a/docs/guide/en/message-handler-advanced.md b/docs/guide/en/message-handler-advanced.md index 6356c863..a2041e11 100644 --- a/docs/guide/en/message-handler-advanced.md +++ b/docs/guide/en/message-handler-advanced.md @@ -17,9 +17,9 @@ Handler definitions are configured in: Use a short stable message type when pushing a `Message` instead of a PHP class name: ```php -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; -new Message('send-email', ['data' => '...']); // "send-email" is the message type here +new SimpleMessage('send-email', ['data' => '...']); // "send-email" is the message type here ``` **Config**: diff --git a/docs/guide/en/message-handler.md b/docs/guide/en/message-handler.md index 30218a9f..839f785f 100644 --- a/docs/guide/en/message-handler.md +++ b/docs/guide/en/message-handler.md @@ -13,7 +13,7 @@ If your handler implements `Yiisoft\Queue\Message\MessageHandlerInterface`, you **Message**: ```php -new \Yiisoft\Queue\Message\Message(\App\Queue\RemoteFileHandler::class, ['url' => '...']); +new \Yiisoft\Queue\Message\SimpleMessage(\App\Queue\RemoteFileHandler::class, ['url' => '...']); ``` **Handler**: diff --git a/docs/guide/en/messages-and-handlers.md b/docs/guide/en/messages-and-handlers.md index 9a0b0de5..7b894692 100644 --- a/docs/guide/en/messages-and-handlers.md +++ b/docs/guide/en/messages-and-handlers.md @@ -33,7 +33,7 @@ This means the producer and consumer can be: A message carries just enough data to perform the work: ```php -new \Yiisoft\Queue\Message\Message('send-email', [ +new \Yiisoft\Queue\Message\SimpleMessage('send-email', [ 'to' => 'user@example.com', 'subject' => 'Welcome', ]); diff --git a/docs/guide/en/queue-names.md b/docs/guide/en/queue-names.md index 9e2dfca5..5f31425b 100644 --- a/docs/guide/en/queue-names.md +++ b/docs/guide/en/queue-names.md @@ -68,7 +68,7 @@ Pushing a message via DI: ```php use Yiisoft\Queue\QueueInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; final readonly class SendWelcomeEmail { @@ -78,7 +78,7 @@ final readonly class SendWelcomeEmail public function run(string $email): void { - $this->queue->push(new Message('send-email', ['to' => $email])); + $this->queue->push(new SimpleMessage('send-email', ['to' => $email])); } } ``` @@ -105,7 +105,7 @@ If you have multiple queue names, inject `QueueProviderInterface` and call `get( ```php use Yiisoft\Queue\Provider\QueueProviderInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; final readonly class SendTransactionalEmail { @@ -117,7 +117,7 @@ final readonly class SendTransactionalEmail { $this->queueProvider ->get('emails') - ->push(new Message('send-email', ['to' => $email])); + ->push(new SimpleMessage('send-email', ['to' => $email])); } } ``` diff --git a/docs/guide/en/usage.md b/docs/guide/en/usage.md index 1ecbf280..5d817bcc 100644 --- a/docs/guide/en/usage.md +++ b/docs/guide/en/usage.md @@ -5,7 +5,7 @@ For example, if you need to download and save a file, you can create a message like this: ```php -$message = new \Yiisoft\Queue\Message\Message( +$message = new \Yiisoft\Queue\Message\SimpleMessage( RemoteFileHandler::class, ['url' => $url, 'destinationFile' => $filename] ); diff --git a/src/Message/Envelope.php b/src/Message/Envelope.php index ef1a2ab6..65027af5 100644 --- a/src/Message/Envelope.php +++ b/src/Message/Envelope.php @@ -4,6 +4,8 @@ namespace Yiisoft\Queue\Message; +use LogicException; + abstract class Envelope implements MessageInterface { /** @@ -23,9 +25,11 @@ public function __construct(MessageInterface $message, array $metadata) $this->message = $message; } - final public static function fromData(string $type, mixed $data, array $metadata = []): static + final public static function fromData(string $type, mixed $data): static { - return static::fromMessage(Message::fromData($type, $data, $metadata)); + throw new LogicException( + 'Envelopes cannot be created via "fromData()". Wrap an existing "MessageInterface" instance instead.', + ); } abstract public static function fromMessage(MessageInterface $message): static; @@ -49,4 +53,9 @@ final public function getMetadata(): array { return $this->metadata; } + + final public function withMetadata(array $metadata): static + { + return static::fromMessage($this->message->withMetadata($metadata)); + } } diff --git a/src/Message/JsonMessageSerializer.php b/src/Message/JsonMessageSerializer.php index b5458069..f644a052 100644 --- a/src/Message/JsonMessageSerializer.php +++ b/src/Message/JsonMessageSerializer.php @@ -54,15 +54,15 @@ public function unserialize(string $value): MessageInterface throw new InvalidArgumentException('Metadata must be an array. Got ' . get_debug_type($meta) . '.'); } - $class = $meta['message-class'] ?? Message::class; + $class = $meta['message-class'] ?? SimpleMessage::class; // Don't check subclasses when it's a default class: that's faster - if ($class !== Message::class && !is_subclass_of($class, MessageInterface::class)) { - $class = Message::class; + if ($class !== SimpleMessage::class && !is_subclass_of($class, MessageInterface::class)) { + $class = SimpleMessage::class; } /** * @var class-string $class */ - return $class::fromData($type, $payload['data'] ?? null, $meta); + return $class::fromData($type, $payload['data'] ?? null)->withMetadata($meta); } } diff --git a/src/Message/Message.php b/src/Message/Message.php index ff4d34f4..fe3edfae 100644 --- a/src/Message/Message.php +++ b/src/Message/Message.php @@ -4,38 +4,22 @@ namespace Yiisoft\Queue\Message; -final class Message implements MessageInterface +abstract class Message implements MessageInterface { /** - * @param string $type A message type used to resolve the handler. - * @param mixed $data Message data, encodable by a queue adapter - * @param array $metadata Message metadata, encodable by a queue adapter - * - * @psalm-param array $metadata + * @psalm-var array */ - public function __construct( - private readonly string $type, - private readonly mixed $data, - private array $metadata = [], - ) {} + private array $metadata = []; - public static function fromData(string $type, mixed $data, array $metadata = []): MessageInterface + final public function getMetadata(): array { - return new self($type, $data, $metadata); - } - - public function getType(): string - { - return $this->type; - } - - public function getData(): mixed - { - return $this->data; + return $this->metadata; } - public function getMetadata(): array + final public function withMetadata(array $metadata): static { - return $this->metadata; + $new = clone $this; + $new->metadata = $metadata; + return $new; } } diff --git a/src/Message/MessageInterface.php b/src/Message/MessageInterface.php index 4254eebb..25862ff2 100644 --- a/src/Message/MessageInterface.php +++ b/src/Message/MessageInterface.php @@ -6,7 +6,7 @@ interface MessageInterface { - public static function fromData(string $type, mixed $data, array $metadata = []): self; + public static function fromData(string $type, mixed $data): self; /** * Returns message type. @@ -24,4 +24,11 @@ public function getData(): mixed; * @return array */ public function getMetadata(): array; + + /** + * Returns a new instance with the given message metadata. + * + * @param array $metadata + */ + public function withMetadata(array $metadata): static; } diff --git a/src/Message/SimpleMessage.php b/src/Message/SimpleMessage.php new file mode 100644 index 00000000..9a64bb15 --- /dev/null +++ b/src/Message/SimpleMessage.php @@ -0,0 +1,32 @@ +type; + } + + public function getData(): mixed + { + return $this->data; + } +} diff --git a/tests/Benchmark/MetadataBench.php b/tests/Benchmark/MetadataBench.php index e60565f6..9df9ed70 100644 --- a/tests/Benchmark/MetadataBench.php +++ b/tests/Benchmark/MetadataBench.php @@ -7,7 +7,7 @@ use Generator; use PhpBench\Attributes\ParamProviders; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; @@ -18,7 +18,7 @@ final class MetadataBench */ public function benchArrayRead(): void { - $message = new Message('foo', 'bar', ['id' => 1]); + $message = (new SimpleMessage('foo', 'bar'))->withMetadata(['id' => 1]); $id = $message->getMetadata()['id']; } @@ -27,7 +27,7 @@ public function benchArrayRead(): void */ public function benchEnvelopeRead(): void { - $message = new IdEnvelope(new Message('foo', 'bar'), 1); + $message = new IdEnvelope(new SimpleMessage('foo', 'bar'), 1); $id = $message->getId(); } @@ -36,14 +36,14 @@ public function benchEnvelopeRead(): void */ public function benchEnvelopeReadRestored(): void { - $message = IdEnvelope::fromMessage(new Message('foo', 'bar', ['id' => 1])); + $message = IdEnvelope::fromMessage((new SimpleMessage('foo', 'bar'))->withMetadata(['id' => 1])); $id = $message->getId(); } public function provideEnvelopeStack(): Generator { $config = [1 => 'one', 5 => 'five', 15 => 'fifteen']; - $message = new IdEnvelope(new Message('foo', 'bar'), 1); + $message = new IdEnvelope(new SimpleMessage('foo', 'bar'), 1); for ($i = 1; $i <= max(...array_keys($config)); $i++) { if (isset($config[$i])) { @@ -79,7 +79,7 @@ public function provideEnvelopeStackCounts(): Generator #[ParamProviders('provideEnvelopeStackCounts')] public function benchEnvelopeStackCreation(array $params): void { - $message = new Message('foo', 'bar'); + $message = new SimpleMessage('foo', 'bar'); for ($i = 0; $i < $params[0]; $i++) { $message = new FailureEnvelope($message, ["fail$i" => "fail$i"]); } @@ -97,6 +97,6 @@ public function benchMetadataArrayCreation(array $params): void for ($i = 0; $i < $params[0]; $i++) { $metadata['failure-meta']["fail$i"] = "fail$i"; } - $message = new Message('foo', 'bar', $metadata); + $message = (new SimpleMessage('foo', 'bar'))->withMetadata($metadata); } } diff --git a/tests/Benchmark/QueueBench.php b/tests/Benchmark/QueueBench.php index 67a58a59..bc7fb1fc 100644 --- a/tests/Benchmark/QueueBench.php +++ b/tests/Benchmark/QueueBench.php @@ -11,7 +11,7 @@ use Yiisoft\Queue\Cli\SimpleLoop; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\JsonMessageSerializer; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactory; @@ -66,11 +66,11 @@ public function __construct() public function providePush(): Generator { - yield 'simple' => ['message' => new Message('foo', 'bar')]; + yield 'simple' => ['message' => new SimpleMessage('foo', 'bar')]; yield 'with envelopes' => [ 'message' => new FailureEnvelope( new IdEnvelope( - new Message('foo', 'bar'), + new SimpleMessage('foo', 'bar'), 'test id', ), ['failure-1' => ['a', 'b', 'c']], @@ -86,12 +86,12 @@ public function benchPush(array $params): void public function provideConsume(): Generator { - yield 'simple mapping' => ['message' => $this->serializer->serialize(new Message('foo', 'bar'))]; + yield 'simple mapping' => ['message' => $this->serializer->serialize(new SimpleMessage('foo', 'bar'))]; yield 'with envelopes mapping' => [ 'message' => $this->serializer->serialize( new FailureEnvelope( new IdEnvelope( - new Message('foo', 'bar'), + new SimpleMessage('foo', 'bar'), 'test id', ), ['failure-1' => ['a', 'b', 'c']], diff --git a/tests/Integration/MessageConsumingTest.php b/tests/Integration/MessageConsumingTest.php index 179e1d7b..2cb9407f 100644 --- a/tests/Integration/MessageConsumingTest.php +++ b/tests/Integration/MessageConsumingTest.php @@ -7,7 +7,7 @@ use Psr\Container\ContainerInterface; use Psr\Log\NullLogger; use Yiisoft\Injector\Injector; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; @@ -45,8 +45,8 @@ public function testMessagesConsumed(): void $messages = [1, 'foo', 'bar-baz']; foreach ($messages as $message) { - $worker->process(new Message('test', $message), $this->getQueue()); - $worker->process(new Message('test2', $message), $this->getQueue()); + $worker->process(new SimpleMessage('test', $message), $this->getQueue()); + $worker->process(new SimpleMessage('test2', $message), $this->getQueue()); } $this->assertEquals($messages, $this->messagesProcessed); @@ -72,7 +72,7 @@ public function testMessagesConsumedByHandlerClass(): void $messages = [1, 'foo', 'bar-baz']; foreach ($messages as $message) { - $worker->process(new Message(TestHandler::class, $message), $this->getQueue()); + $worker->process(new SimpleMessage(TestHandler::class, $message), $this->getQueue()); } $this->assertEquals($messages, $handler->messagesProcessed); diff --git a/tests/Integration/MiddlewareTest.php b/tests/Integration/MiddlewareTest.php index 308e01d2..9ec8e6f4 100644 --- a/tests/Integration/MiddlewareTest.php +++ b/tests/Integration/MiddlewareTest.php @@ -12,7 +12,7 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Test\Support\Log\SimpleLogger; use Yiisoft\Queue\Cli\LoopInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; @@ -71,7 +71,7 @@ public function testFullStackPush(): void ->withMiddlewares(new TestMiddleware('channel 1'), new TestMiddleware('channel 2')) ->withMiddlewaresAdded(new TestMiddleware('channel 3'), new TestMiddleware('channel 4')); - $message = new Message('test', ['initial']); + $message = new SimpleMessage('test', ['initial']); $messagePushed = $queue->push($message); self::assertEquals($stack, $messagePushed->getData()); @@ -113,7 +113,7 @@ public function testFullStackConsume(): void $callableFactory, ); - $message = new Message('test', ['initial']); + $message = new SimpleMessage('test', ['initial']); $messageConsumed = $worker->process($message, $this->createMock(QueueInterface::class)); self::assertEquals($stack, $messageConsumed->getData()); @@ -124,7 +124,7 @@ public function testFullStackFailure(): void $exception = new InvalidArgumentException('test'); $this->expectExceptionObject($exception); - $message = new Message('simple', null, []); + $message = new SimpleMessage('simple', null, []); $queueCallback = static fn(MessageInterface $message): MessageInterface => $message; $queue = $this->createMock(QueueInterface::class); $container = new SimpleContainer([SendAgainMiddleware::class => new SendAgainMiddleware('test-container', 1, $queue)]); diff --git a/tests/Integration/Support/TestMiddleware.php b/tests/Integration/Support/TestMiddleware.php index ed4735ca..f2ab5024 100644 --- a/tests/Integration/Support/TestMiddleware.php +++ b/tests/Integration/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Integration\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; @@ -21,7 +21,7 @@ public function processPush(MessageInterface $message, PushHandlerInterface $han $stack = $message->getData(); $stack[] = $this->stage; - return $handler->handlePush(new Message($message->getType(), $stack)); + return $handler->handlePush(new SimpleMessage($message->getType(), $stack)); } public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest @@ -29,7 +29,7 @@ public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $message = $request->getMessage(); $stack = $message->getData(); $stack[] = $this->stage; - $messageNew = new Message($message->getType(), $stack); + $messageNew = new SimpleMessage($message->getType(), $stack); return $handler->handleConsume($request->withMessage($messageNew)); } diff --git a/tests/Unit/Debug/QueueCollectorTest.php b/tests/Unit/Debug/QueueCollectorTest.php index 56d6e95b..2cfa7dfc 100644 --- a/tests/Unit/Debug/QueueCollectorTest.php +++ b/tests/Unit/Debug/QueueCollectorTest.php @@ -8,17 +8,17 @@ use Yiisoft\Yii\Debug\Collector\CollectorInterface; use Yiisoft\Yii\Debug\Tests\Shared\AbstractCollectorTestCase; use Yiisoft\Queue\Debug\QueueCollector; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Stubs\StubQueue; final class QueueCollectorTest extends AbstractCollectorTestCase { - private Message $pushMessage; + private SimpleMessage $pushMessage; protected function setUp(): void { parent::setUp(); - $this->pushMessage = new Message('task', ['id' => 500]); + $this->pushMessage = new SimpleMessage('task', ['id' => 500]); } /** diff --git a/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php b/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php index 66b73b6d..01381e1f 100644 --- a/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php +++ b/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php @@ -7,7 +7,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Debug\QueueCollector; use Yiisoft\Queue\Debug\QueueWorkerInterfaceProxy; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Stubs\StubQueue; use Yiisoft\Queue\Stubs\StubWorker; @@ -15,7 +15,7 @@ final class QueueWorkerInterfaceProxyTest extends TestCase { public function testProcessDelegatesToWorker(): void { - $message = new Message('handler', 'data'); + $message = new SimpleMessage('handler', 'data'); $collector = new QueueCollector(); $collector->startup(); $proxy = new QueueWorkerInterfaceProxy(new StubWorker(), $collector); diff --git a/tests/Unit/EnvelopeTest.php b/tests/Unit/EnvelopeTest.php index a353c494..470867f9 100644 --- a/tests/Unit/EnvelopeTest.php +++ b/tests/Unit/EnvelopeTest.php @@ -6,13 +6,13 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; final class EnvelopeTest extends TestCase { public function testEnvelopeStack(): void { - $message = new Message('handler', 'test'); + $message = new SimpleMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id'); $this->assertEquals('test', $message->getMessage()->getData()); @@ -21,7 +21,7 @@ public function testEnvelopeStack(): void public function testEnvelopeDuplicates(): void { - $message = new Message('handler', 'test'); + $message = new SimpleMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id-1'); $message = new IdEnvelope($message, 'test-id-2'); $message = new IdEnvelope($message, 'test-id-3'); diff --git a/tests/Unit/Message/DelayEnvelopeTest.php b/tests/Unit/Message/DelayEnvelopeTest.php index 100cf768..e72c527f 100644 --- a/tests/Unit/Message/DelayEnvelopeTest.php +++ b/tests/Unit/Message/DelayEnvelopeTest.php @@ -6,13 +6,13 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\DelayEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; final class DelayEnvelopeTest extends TestCase { public function testDelayEnvelope(): void { - $message = new Message('test', ['data' => 'value']); + $message = new SimpleMessage('test', ['data' => 'value']); $delayEnvelope = new DelayEnvelope($message, 300.5); self::assertSame($message, $delayEnvelope->getMessage()); @@ -27,7 +27,7 @@ public function testDelayEnvelope(): void public function testFromMessage(): void { - $message = new Message('test', ['data' => 'value'], [DelayEnvelope::META_DELAY_SECONDS => 150]); + $message = (new SimpleMessage('test', ['data' => 'value']))->withMetadata([DelayEnvelope::META_DELAY_SECONDS => 150]); $delayEnvelope = DelayEnvelope::fromMessage($message); self::assertSame(150.0, $delayEnvelope->getDelaySeconds()); @@ -37,7 +37,7 @@ public function testFromMessage(): void public function testFromMessageWithoutDelay(): void { - $message = new Message('test', ['data' => 'value']); + $message = new SimpleMessage('test', ['data' => 'value']); $delayEnvelope = DelayEnvelope::fromMessage($message); self::assertSame(0.0, $delayEnvelope->getDelaySeconds()); diff --git a/tests/Unit/Message/EnvelopeTest.php b/tests/Unit/Message/EnvelopeTest.php index 67ba1d2e..e052fd8a 100644 --- a/tests/Unit/Message/EnvelopeTest.php +++ b/tests/Unit/Message/EnvelopeTest.php @@ -4,6 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Message; +use LogicException; use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Tests\App\DummyEnvelope; @@ -11,16 +12,10 @@ final class EnvelopeTest extends TestCase { public function testFromData(): void { - $type = 'test-handler'; - $data = ['key' => 'value']; - $metadata = ['meta' => 'data']; - - $envelope = DummyEnvelope::fromData($type, $data, $metadata); - - $this->assertInstanceOf(DummyEnvelope::class, $envelope); - $this->assertSame($type, $envelope->getType()); - $this->assertSame($data, $envelope->getData()); - $this->assertArrayHasKey('meta', $envelope->getMetadata()); - $this->assertSame('data', $envelope->getMetadata()['meta']); + $this->expectException(LogicException::class); + $this->expectExceptionMessage( + 'Envelopes cannot be created via "fromData()". Wrap an existing "MessageInterface" instance instead.' + ); + DummyEnvelope::fromData('test', []); } } diff --git a/tests/Unit/Message/IdEnvelopeTest.php b/tests/Unit/Message/IdEnvelopeTest.php index a45f6465..1a32e7fc 100644 --- a/tests/Unit/Message/IdEnvelopeTest.php +++ b/tests/Unit/Message/IdEnvelopeTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; final class IdEnvelopeTest extends TestCase @@ -86,24 +86,8 @@ public function testGetEnvelopeMetadata(): void $this->assertSame($id, $metadata[IdEnvelope::MESSAGE_ID_KEY]); } - public function testFromData(): void - { - $type = 'test-handler'; - $data = ['key' => 'value']; - $metadata = ['meta' => 'data', IdEnvelope::MESSAGE_ID_KEY => 'test-id']; - - $envelope = IdEnvelope::fromData($type, $data, $metadata); - - $this->assertInstanceOf(IdEnvelope::class, $envelope); - $this->assertSame($type, $envelope->getType()); - $this->assertSame($data, $envelope->getData()); - $this->assertArrayHasKey('meta', $envelope->getMetadata()); - $this->assertSame('data', $envelope->getMetadata()['meta']); - $this->assertSame('test-id', $envelope->getId()); - } - private function createMessage(array $metadata = []): MessageInterface { - return new Message('test-handler', ['test-data'], $metadata); + return (new SimpleMessage('test-handler', ['test-data']))->withMetadata($metadata); } } diff --git a/tests/Unit/Message/JsonMessageSerializerTest.php b/tests/Unit/Message/JsonMessageSerializerTest.php index a201aa2f..f370ab27 100644 --- a/tests/Unit/Message/JsonMessageSerializerTest.php +++ b/tests/Unit/Message/JsonMessageSerializerTest.php @@ -9,7 +9,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\JsonMessageSerializer; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Tests\Unit\Support\TestMessage; use function sprintf; @@ -55,7 +55,7 @@ public function testDefaultMessageClassFallbackWrongClass(): void ]; $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); - $this->assertInstanceOf(Message::class, $message); + $this->assertInstanceOf(SimpleMessage::class, $message); } public function testDefaultMessageClassFallbackClassNotSet(): void @@ -67,7 +67,7 @@ public function testDefaultMessageClassFallbackClassNotSet(): void 'meta' => [], ]; $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); - $this->assertInstanceOf(Message::class, $message); + $this->assertInstanceOf(SimpleMessage::class, $message); } #[DataProvider('dataUnsupportedPayloadFormat')] @@ -130,21 +130,21 @@ public function testUnserializeWithMetadata(): void public function testSerialize(): void { - $message = new Message('handler', 'test'); + $message = new SimpleMessage('handler', 'test'); $serializer = $this->createSerializer(); $json = $serializer->serialize($message); $this->assertEquals( - '{"type":"handler","data":"test","meta":{"message-class":"Yiisoft\\\\Queue\\\\Message\\\\Message"}}', + '{"type":"handler","data":"test","meta":{"message-class":"Yiisoft\\\\Queue\\\\Message\\\\SimpleMessage"}}', $json, ); } public function testSerializeEnvelopeStack(): void { - $message = new Message('handler', 'test'); + $message = new SimpleMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id'); $serializer = $this->createSerializer(); @@ -155,17 +155,17 @@ public function testSerializeEnvelopeStack(): void sprintf( '{"type":"handler","data":"test","meta":{"%s":"test-id","message-class":"%s"}}', IdEnvelope::MESSAGE_ID_KEY, - str_replace('\\', '\\\\', Message::class), + str_replace('\\', '\\\\', SimpleMessage::class), ), $json, ); $message = $serializer->unserialize($json); - $this->assertInstanceOf(Message::class, $message); + $this->assertInstanceOf(SimpleMessage::class, $message); $this->assertEquals([ IdEnvelope::MESSAGE_ID_KEY => 'test-id', - 'message-class' => Message::class, + 'message-class' => SimpleMessage::class, ], $message->getMetadata()); } diff --git a/tests/Unit/Middleware/Consume/ConsumeRequestTest.php b/tests/Unit/Middleware/Consume/ConsumeRequestTest.php index 6493fccd..95e6edb4 100644 --- a/tests/Unit/Middleware/Consume/ConsumeRequestTest.php +++ b/tests/Unit/Middleware/Consume/ConsumeRequestTest.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Tests\TestCase; @@ -13,7 +13,7 @@ final class ConsumeRequestTest extends TestCase { public function testImmutable(): void { - $message = new Message('test', 'test'); + $message = new SimpleMessage('test', 'test'); $queue = $this->createMock(QueueInterface::class); $consumeRequest = new ConsumeRequest($message, $queue); diff --git a/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php index b9f5999d..e957a835 100644 --- a/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; @@ -30,7 +30,7 @@ public function testCallableMiddlewareCalled(): void $dispatcher = $this->createDispatcher()->withMiddlewares( [ static function (ConsumeRequest $request) use ($queue): ConsumeRequest { - return $request->withMessage(new Message('test', 'New closure test data'))->withQueue($queue); + return $request->withMessage(new SimpleMessage('test', 'New closure test data'))->withQueue($queue); }, ], ); @@ -70,12 +70,12 @@ public function testMiddlewareFullStackCalled(): void $request = $this->getConsumeRequest(); $middleware1 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - $request = $request->withMessage(new Message($request->getMessage()->getType(), 'new test data')); + $request = $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'new test data')); return $handler->handleConsume($request); }; $middleware2 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - $request = $request->withMessage(new Message('new handler', $request->getMessage()->getData())); + $request = $request->withMessage(new SimpleMessage('new handler', $request->getMessage()->getData())); return $handler->handleConsume($request); }; @@ -92,10 +92,10 @@ public function testMiddlewareStackInterrupted(): void $request = $this->getConsumeRequest(); $middleware1 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new Message($request->getMessage()->getType(), 'first')); + return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'first')); }; $middleware2 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new Message($request->getMessage()->getType(), 'second')); + return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'second')); }; $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); @@ -177,7 +177,7 @@ private function createContainer(array $instances = []): ContainerInterface private function getConsumeRequest(): ConsumeRequest { return new ConsumeRequest( - new Message('handler', 'data'), + new SimpleMessage('handler', 'data'), $this->createMock(QueueInterface::class), ); } diff --git a/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php index e571709a..0b3e0a64 100644 --- a/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; @@ -61,7 +61,7 @@ public function testCreateFromClosureResponse(): void $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createConsumeMiddleware( fn(): ConsumeRequest => new ConsumeRequest( - new Message('test', 'test data'), + new SimpleMessage('test', 'test data'), $this->createMock(QueueInterface::class), ), ); @@ -222,7 +222,7 @@ public function handleConsume(ConsumeRequest $request): ConsumeRequest private function getConsumeRequest(): ConsumeRequest { return new ConsumeRequest( - new Message('handler', 'data'), + new SimpleMessage('handler', 'data'), $this->createMock(QueueInterface::class), ); } diff --git a/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php index 33808ee7..8fee1cbf 100644 --- a/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class CallableObjectMiddleware { public function __invoke(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new Message('test', 'Callable object data')); + return $request->withMessage(new SimpleMessage('test', 'Callable object data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php index 54dae8f7..f61c54a4 100644 --- a/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class StringCallableMiddleware { public static function handle(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new Message('test', 'String callable data')); + return $request->withMessage(new SimpleMessage('test', 'String callable data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php index 27b356e2..c5400b46 100644 --- a/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class TestCallableMiddleware { public function index(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new Message('test', 'New test data')); + return $request->withMessage(new SimpleMessage('test', 'New test data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/TestMiddleware.php b/tests/Unit/Middleware/Consume/Support/TestMiddleware.php index 5caf358f..bcdc37ad 100644 --- a/tests/Unit/Middleware/Consume/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new Message('test', $this->message)); + return $request->withMessage(new SimpleMessage('test', $this->message)); } } diff --git a/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php b/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php index b34c9081..7c47cd67 100644 --- a/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php +++ b/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; @@ -57,27 +57,8 @@ public function testMetadataMerging(): void $this->assertSame('Last error', $mergedMetadata['lastError']); } - public function testFromData(): void - { - $type = 'test-handler'; - $data = ['key' => 'value']; - $metadata = [ - 'meta' => 'data', - FailureEnvelope::FAILURE_META_KEY => ['attempt' => 1], - ]; - - $envelope = FailureEnvelope::fromData($type, $data, $metadata); - - $this->assertInstanceOf(FailureEnvelope::class, $envelope); - $this->assertSame($type, $envelope->getType()); - $this->assertSame($data, $envelope->getData()); - $this->assertArrayHasKey('meta', $envelope->getMetadata()); - $this->assertSame('data', $envelope->getMetadata()['meta']); - $this->assertSame(['attempt' => 1], $envelope->getMetadata()[FailureEnvelope::FAILURE_META_KEY]); - } - private function createMessage(array $metadata = []): MessageInterface { - return new Message('test-handler', ['test-data'], $metadata); + return (new SimpleMessage('test-handler', ['test-data']))->withMetadata($metadata); } } diff --git a/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php b/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php index b90874b0..0bf2c4e6 100644 --- a/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php +++ b/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling; use Exception; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Tests\TestCase; @@ -16,13 +16,13 @@ public function testImmutable(): void { $queue = $this->createMock(QueueInterface::class); $request1 = new FailureHandlingRequest( - new Message('test', null), + new SimpleMessage('test', null), new Exception('exception 1'), $queue, ); $request2 = $request1->withQueue($queue); $request3 = $request1->withException(new Exception('exception 2')); - $request4 = $request1->withMessage(new Message('test2', null)); + $request4 = $request1->withMessage(new SimpleMessage('test2', null)); $this->assertNotSame($request1, $request2); diff --git a/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php b/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php index 1c45177d..f077cab5 100644 --- a/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php +++ b/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php @@ -7,7 +7,7 @@ use Exception; use InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware; @@ -131,7 +131,7 @@ public function testConstructorRequirements(bool $success, array $arguments): vo public function testPipelineSuccess(): void { - $message = new Message('test', null); + $message = new SimpleMessage('test', null); $queue = $this->createMock(QueueInterface::class); $queue->method('push')->willReturnArgument(0); $middleware = new ExponentialDelayMiddleware( @@ -162,11 +162,10 @@ public function testPipelineFailure(): void $this->expectException(Exception::class); $this->expectExceptionMessage('test'); - $message = new Message( + $message = (new SimpleMessage( 'test', null, - [FailureEnvelope::FAILURE_META_KEY => [ExponentialDelayMiddleware::META_KEY_ATTEMPTS . '-test' => 2]], - ); + ))->withMetadata([FailureEnvelope::FAILURE_META_KEY => [ExponentialDelayMiddleware::META_KEY_ATTEMPTS . '-test' => 2]]); $queue = $this->createMock(QueueInterface::class); $middleware = new ExponentialDelayMiddleware( 'test', diff --git a/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php b/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php index d9cad533..329d98a5 100644 --- a/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php +++ b/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php @@ -8,7 +8,7 @@ use PHPUnit\Framework\Assert; use PHPUnit\Framework\Attributes\DataProvider; use RuntimeException; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; @@ -155,11 +155,10 @@ public function testQueueSendingStrategies( $strategy = $this->getStrategy($strategyName, $queue); $request = new FailureHandlingRequest( - new Message( + (new SimpleMessage( 'test', null, - [FailureEnvelope::FAILURE_META_KEY => $metaInitial], - ), + ))->withMetadata([FailureEnvelope::FAILURE_META_KEY => $metaInitial]), new Exception('testException'), $queue, ); diff --git a/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php index 1503db38..f0c45d4e 100644 --- a/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher; @@ -30,7 +30,7 @@ public function testCallableMiddlewareCalled(): void [ FailureMiddlewareDispatcher::DEFAULT_PIPELINE => [ static function (FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new Message('test', 'New closure test data')); + return $request->withMessage(new SimpleMessage('test', 'New closure test data')); }, ], ], @@ -77,12 +77,12 @@ public function testMiddlewareFullStackCalled(): void $request = $this->getFailureHandlingRequest(); $middleware1 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - $request = $request->withMessage(new Message($request->getMessage()->getType(), 'new test data')); + $request = $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'new test data')); return $handler->handleFailure($request); }; $middleware2 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - $request = $request->withMessage(new Message('new handler', $request->getMessage()->getData())); + $request = $request->withMessage(new SimpleMessage('new handler', $request->getMessage()->getData())); return $handler->handleFailure($request); }; @@ -99,10 +99,10 @@ public function testMiddlewareStackInterrupted(): void $request = $this->getFailureHandlingRequest(); $middleware1 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new Message($request->getMessage()->getType(), 'first')); + return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'first')); }; $middleware2 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new Message($request->getMessage()->getType(), 'second')); + return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'second')); }; $dispatcher = $this->createDispatcher()->withMiddlewares([FailureMiddlewareDispatcher::DEFAULT_PIPELINE => [$middleware1, $middleware2]]); @@ -173,7 +173,7 @@ private function createContainer(array $instances = []): ContainerInterface private function getFailureHandlingRequest(): FailureHandlingRequest { return new FailureHandlingRequest( - new Message('handler', 'data'), + new SimpleMessage('handler', 'data'), new Exception('Test exception.'), $this->createMock(QueueInterface::class), ); diff --git a/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php b/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php index 1bbb6ece..69a340d4 100644 --- a/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php @@ -11,7 +11,7 @@ use RuntimeException; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface; @@ -55,7 +55,7 @@ public function testCreateFromClosureResponse(): void $middleware = $this->getMiddlewareFactory($container)->createFailureMiddleware( function (): FailureHandlingRequest { return new FailureHandlingRequest( - new Message('test', 'test data'), + new SimpleMessage('test', 'test data'), new RuntimeException('test exception'), $this->createMock(QueueInterface::class), ); @@ -206,7 +206,7 @@ public function handleFailure(FailureHandlingRequest $request): FailureHandlingR private function getConsumeRequest(): FailureHandlingRequest { return new FailureHandlingRequest( - new Message('handler', 'data'), + new SimpleMessage('handler', 'data'), new Exception('test exception'), $this->createMock(QueueInterface::class), ); diff --git a/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php index fa27eb85..5ffb377b 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class CallableObjectMiddleware { public function __invoke(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new Message('test', 'Callable object data')); + return $request->withMessage(new SimpleMessage('test', 'Callable object data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php index 26940b40..e566113d 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class StringCallableMiddleware { public static function handle(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new Message('test', 'String callable data')); + return $request->withMessage(new SimpleMessage('test', 'String callable data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php index 16dc135a..c00d29bf 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class TestCallableMiddleware { public function index(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new Message('test', 'New test data')); + return $request->withMessage(new SimpleMessage('test', 'New test data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php index b7af3eeb..ead87606 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareInterface; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processFailure(FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new Message('test', $this->message)); + return $request->withMessage(new SimpleMessage('test', $this->message)); } } diff --git a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php index e22d160c..d8fe9a46 100644 --- a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php +++ b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Push\AdapterPushHandler; use Yiisoft\Queue\Tests\App\FakeAdapter; @@ -15,7 +15,7 @@ public function testHandlePushUsesAdapter(): void { $adapter = new FakeAdapter(); $handler = new AdapterPushHandler($adapter); - $message = new Message('handler', 'data'); + $message = new SimpleMessage('handler', 'data'); $result = $handler->handlePush($message); diff --git a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php index aaeb99e5..5570dbbf 100644 --- a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php +++ b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Middleware\Push\Implementation\IdMiddleware; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; @@ -14,7 +14,7 @@ final class IdMiddlewareTest extends TestCase { public function testWithId(): void { - $message = new Message('test', null, [IdEnvelope::MESSAGE_ID_KEY => 'test-id']); + $message = (new SimpleMessage('test', null))->withMetadata([IdEnvelope::MESSAGE_ID_KEY => 'test-id']); $handler = $this->createMock(PushHandlerInterface::class); $handler->expects($this->once()) @@ -33,7 +33,7 @@ public function testWithId(): void public function testWithoutId(): void { - $message = new Message('test', null); + $message = new SimpleMessage('test', null); $handler = $this->createMock(PushHandlerInterface::class); $handler->expects($this->once()) diff --git a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php index ba80a425..93e5260f 100644 --- a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; @@ -28,7 +28,7 @@ public function testCallableMiddlewareCalled(): void $dispatcher = $this->createDispatcher()->withMiddlewares( [ static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return new Message('test', 'New closure test data'); + return new SimpleMessage('test', 'New closure test data'); }, ], ); @@ -68,7 +68,7 @@ public function testMiddlewareFullStackCalled(): void $message = $this->getMessage(); $middleware1 = static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return $handler->handlePush(new Message($message->getType(), 'new test data')); + return $handler->handlePush(new SimpleMessage($message->getType(), 'new test data')); }; $middleware2 = static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { return $handler->handlePush($message); @@ -84,8 +84,8 @@ public function testMiddlewareStackInterrupted(): void { $message = $this->getMessage(); - $middleware1 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new Message($message->getType(), 'first'); - $middleware2 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new Message($message->getType(), 'second'); + $middleware1 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new SimpleMessage($message->getType(), 'first'); + $middleware2 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new SimpleMessage($message->getType(), 'second'); $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); @@ -162,6 +162,6 @@ private function createContainer(array $instances = []): ContainerInterface private function getMessage(): MessageInterface { - return new Message('handler', 'data'); + return new SimpleMessage('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php index 7ee1ab36..6034fe0e 100644 --- a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException; @@ -51,7 +51,7 @@ public function testCreateFromClosureResponse(): void $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createPushMiddleware( static function (): MessageInterface { - return new Message('test', 'test data'); + return new SimpleMessage('test', 'test data'); }, ); self::assertSame( @@ -195,6 +195,6 @@ public function handlePush(MessageInterface $message): MessageInterface private function getMessage(): MessageInterface { - return new Message('handler', 'data'); + return new SimpleMessage('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php index c10700ce..0b505b2a 100644 --- a/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; final class CallableObjectMiddleware { public function __invoke(MessageInterface $message): MessageInterface { - return new Message('test', 'Callable object data'); + return new SimpleMessage('test', 'Callable object data'); } } diff --git a/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php index b29b17cf..472e603a 100644 --- a/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; final class StringCallableMiddleware { public static function handle(MessageInterface $message): MessageInterface { - return new Message('test', 'String callable data'); + return new SimpleMessage('test', 'String callable data'); } } diff --git a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php index 369b0947..3aa1547d 100644 --- a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; final class TestCallableMiddleware { public function index(MessageInterface $message): MessageInterface { - return new Message('test', 'New test data'); + return new SimpleMessage('test', 'New test data'); } } diff --git a/tests/Unit/Middleware/Push/Support/TestMiddleware.php b/tests/Unit/Middleware/Push/Support/TestMiddleware.php index 22028f62..f9cb255c 100644 --- a/tests/Unit/Middleware/Push/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; use Yiisoft\Queue\Middleware\Push\PushMiddlewareInterface; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processPush(MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return new Message('test', $this->message); + return new SimpleMessage('test', $this->message); } } diff --git a/tests/Unit/QueueTest.php b/tests/Unit/QueueTest.php index fa571f83..327bf07a 100644 --- a/tests/Unit/QueueTest.php +++ b/tests/Unit/QueueTest.php @@ -6,7 +6,7 @@ use Yiisoft\Queue\Cli\SignalLoop; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\MessageStatus; use Yiisoft\Queue\Stubs\InMemoryAdapter; use Yiisoft\Queue\Tests\App\FakeAdapter; @@ -27,7 +27,7 @@ public function testPushSuccessful(): void { $adapter = new FakeAdapter(); $queue = $this->createQueue($adapter); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); self::assertSame([$message], $adapter->pushMessages); @@ -36,7 +36,7 @@ public function testPushSuccessful(): void public function testPushSynchronouslyProcessesMessage(): void { $queue = $this->createQueue(); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -47,7 +47,7 @@ public function testPushSynchronouslyProcessesMessage(): void public function testRunWithoutAdapterReturnsZero(): void { $queue = $this->createQueue(); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -74,7 +74,7 @@ public function testStatusReturnsNotFoundWithoutAdapter(): void public function testRunWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -85,7 +85,7 @@ public function testRunWithAdapter(): void public function testRunPartlyWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -96,7 +96,7 @@ public function testRunPartlyWithAdapter(): void public function testListenWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -108,7 +108,7 @@ public function testListenWithAdapter(): void public function testStatusWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $envelope = $queue->push(new Message('simple', null)); + $envelope = $queue->push(new SimpleMessage('simple', null)); self::assertArrayHasKey(IdEnvelope::MESSAGE_ID_KEY, $envelope->getMetadata()); /** @var int|string $id */ @@ -128,7 +128,7 @@ public function testRunWithSignalLoop(): void $this->loop = new SignalLoop(); $queue = $this->createQueue(); - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); $queue->push($message); $queue->push(clone $message); diff --git a/tests/Unit/Stubs/InMemoryAdapterTest.php b/tests/Unit/Stubs/InMemoryAdapterTest.php index a286e7db..5b76819d 100644 --- a/tests/Unit/Stubs/InMemoryAdapterTest.php +++ b/tests/Unit/Stubs/InMemoryAdapterTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\MessageStatus; use Yiisoft\Queue\Stubs\InMemoryAdapter; @@ -17,9 +17,9 @@ public function testPush(): void { $adapter = new InMemoryAdapter(); - $envelope1 = $adapter->push(new Message('test', 'a')); - $envelope2 = $adapter->push(new Message('test', 'b')); - $envelope3 = $adapter->push(new Message('test', 'c')); + $envelope1 = $adapter->push(new SimpleMessage('test', 'a')); + $envelope2 = $adapter->push(new SimpleMessage('test', 'b')); + $envelope3 = $adapter->push(new SimpleMessage('test', 'c')); $this->assertInstanceOf(IdEnvelope::class, $envelope1); $this->assertInstanceOf(IdEnvelope::class, $envelope2); @@ -36,7 +36,7 @@ public function testPush(): void public function testStatusWaitingForPushedMessage(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new Message('test', null)); + $envelope = $adapter->push(new SimpleMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(MessageStatus::WAITING, $adapter->status($envelope->getId())); @@ -45,7 +45,7 @@ public function testStatusWaitingForPushedMessage(): void public function testStatusDoneAfterProcessing(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new Message('test', null)); + $envelope = $adapter->push(new SimpleMessage('test', null)); $adapter->runExisting(static fn() => true); @@ -70,7 +70,7 @@ public function testStatusNotFoundForNegativeId(): void public function testStatusAcceptsStringId(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new Message('test', null)); + $envelope = $adapter->push(new SimpleMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(MessageStatus::WAITING, $adapter->status((string) $envelope->getId())); @@ -79,9 +79,9 @@ public function testStatusAcceptsStringId(): void public function testRunExistingProcessesAllMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new Message('test', 'a')); - $adapter->push(new Message('test', 'b')); - $adapter->push(new Message('test', 'c')); + $adapter->push(new SimpleMessage('test', 'a')); + $adapter->push(new SimpleMessage('test', 'b')); + $adapter->push(new SimpleMessage('test', 'c')); $processed = []; $adapter->runExisting( @@ -97,9 +97,9 @@ static function (MessageInterface $message) use (&$processed): bool { public function testRunExistingStopsWhenHandlerReturnsFalse(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new Message('test', 'a')); - $adapter->push(new Message('test', 'b')); - $adapter->push(new Message('test', 'c')); + $adapter->push(new SimpleMessage('test', 'a')); + $adapter->push(new SimpleMessage('test', 'b')); + $adapter->push(new SimpleMessage('test', 'c')); $processed = []; $adapter->runExisting( @@ -128,7 +128,7 @@ public function testRunExistingOnEmptyQueue(): void public function testRunExistingDoesNotReprocessMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new Message('test', 'x')); + $adapter->push(new SimpleMessage('test', 'x')); $count = 0; $handler = static function () use (&$count): bool { @@ -144,10 +144,10 @@ public function testRunExistingDoesNotReprocessMessages(): void public function testIdContinuesAfterProcessing(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new Message('test', null)); + $adapter->push(new SimpleMessage('test', null)); $adapter->runExisting(static fn() => true); - $envelope = $adapter->push(new Message('test', null)); + $envelope = $adapter->push(new SimpleMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(1, $envelope->getId()); @@ -157,8 +157,8 @@ public function testIdContinuesAfterProcessing(): void public function testSubscribeProcessesExistingMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new Message('test', 'a')); - $adapter->push(new Message('test', 'b')); + $adapter->push(new SimpleMessage('test', 'a')); + $adapter->push(new SimpleMessage('test', 'b')); $processed = []; $adapter->subscribe( diff --git a/tests/Unit/Stubs/StubQueueTest.php b/tests/Unit/Stubs/StubQueueTest.php index 0bfe911f..c73570e1 100644 --- a/tests/Unit/Stubs/StubQueueTest.php +++ b/tests/Unit/Stubs/StubQueueTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\MessageStatus; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Stubs\StubQueue; final class StubQueueTest extends TestCase @@ -14,7 +14,7 @@ final class StubQueueTest extends TestCase public function testBase(): void { $queue = new StubQueue(); - $message = new Message('test', 42); + $message = new SimpleMessage('test', 42); $this->assertSame($message, $queue->push($message)); $this->assertSame(0, $queue->run()); diff --git a/tests/Unit/Stubs/StubWorkerTest.php b/tests/Unit/Stubs/StubWorkerTest.php index 98d8b1e6..a0332036 100644 --- a/tests/Unit/Stubs/StubWorkerTest.php +++ b/tests/Unit/Stubs/StubWorkerTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Stubs; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Stubs\StubWorker; @@ -15,7 +15,7 @@ public function testBase(): void { $worker = new StubWorker(); - $sourceMessage = new Message('test', 42); + $sourceMessage = new SimpleMessage('test', 42); $message = $worker->process($sourceMessage, $this->createMock(QueueInterface::class)); diff --git a/tests/Unit/Support/TestMessage.php b/tests/Unit/Support/TestMessage.php index f7f85ff6..05362e7b 100644 --- a/tests/Unit/Support/TestMessage.php +++ b/tests/Unit/Support/TestMessage.php @@ -4,9 +4,10 @@ namespace Yiisoft\Queue\Tests\Unit\Support; +use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Message\MessageInterface; -final class TestMessage implements MessageInterface +final class TestMessage extends Message { public static function fromData(string $type, mixed $data, array $metadata = []): MessageInterface { @@ -22,9 +23,4 @@ public function getData(): mixed { return null; } - - public function getMetadata(): array - { - return []; - } } diff --git a/tests/Unit/WorkerTest.php b/tests/Unit/WorkerTest.php index 672298f4..f749f0e5 100644 --- a/tests/Unit/WorkerTest.php +++ b/tests/Unit/WorkerTest.php @@ -13,7 +13,7 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Test\Support\Log\SimpleLogger; use Yiisoft\Queue\Exception\MessageFailureException; -use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\SimpleMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactoryInterface; @@ -35,7 +35,7 @@ final class WorkerTest extends TestCase #[DataProvider('messageHandledDataProvider')] public function testMessageHandled(mixed $handler, array $containerServices): void { - $message = new Message('simple', ['test-data']); + $message = new SimpleMessage('simple', ['test-data']); $logger = new SimpleLogger(); $container = new SimpleContainer($containerServices); $handlers = ['simple' => $handler]; @@ -90,7 +90,7 @@ public function testMessageFailWithDefinitionUndefinedMethodHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new Message('simple', ['test-data']); + $message = new SimpleMessage('simple', ['test-data']); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); $handlers = ['simple' => [FakeHandler::class, 'undefinedMethod']]; @@ -106,7 +106,7 @@ public function testMessageFailWithDefinitionUndefinedClassHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new Message('simple', ['test-data']); + $message = new SimpleMessage('simple', ['test-data']); $logger = new SimpleLogger(); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); @@ -122,7 +122,7 @@ public function testMessageFailWithDefinitionUndefinedClassHandler(): void public function testMessageFailWithDefinitionClassNotFoundInContainerHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new Message('simple', ['test-data']); + $message = new SimpleMessage('simple', ['test-data']); $container = new SimpleContainer(); $handlers = ['simple' => [FakeHandler::class, 'handle']]; @@ -135,7 +135,7 @@ public function testMessageFailWithDefinitionClassNotFoundInContainerHandler(): public function testMessageFailWithDefinitionHandlerException(): void { - $message = new Message('simple', ['test-data']); + $message = new SimpleMessage('simple', ['test-data']); $logger = new SimpleLogger(); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); @@ -163,7 +163,7 @@ public function testMessageFailWithDefinitionHandlerException(): void public function testHandlerNotFoundInContainer(): void { - $message = new Message('nonexistent', ['test-data']); + $message = new SimpleMessage('nonexistent', ['test-data']); $container = new SimpleContainer(); $handlers = []; @@ -178,7 +178,7 @@ public function testHandlerNotFoundInContainer(): void public function testHandlerInContainerNotImplementingInterface(): void { - $message = new Message('invalid', ['test-data']); + $message = new SimpleMessage('invalid', ['test-data']); $container = new SimpleContainer([ 'invalid' => new class { public function handle(): void {} @@ -197,7 +197,7 @@ public function handle(): void {} public function testMessageFailureIsHandledSuccessfully(): void { - $message = new Message('simple', null); + $message = new SimpleMessage('simple', null); /** @var MockObject&QueueInterface $queue */ $queue = $this->createMock(QueueInterface::class); $queue->method('getName')->willReturn('test-queue'); @@ -212,7 +212,7 @@ public function testMessageFailureIsHandledSuccessfully(): void $consumeMiddlewareFactory->method('createConsumeMiddleware')->willReturn($consumeMiddleware); $consumeDispatcher = new ConsumeMiddlewareDispatcher($consumeMiddlewareFactory, 'simple'); - $finalMessage = new Message('final', null); + $finalMessage = new SimpleMessage('final', null); /** @var FailureMiddlewareInterface&MockObject $failureMiddleware */ $failureMiddleware = $this->createMock(FailureMiddlewareInterface::class); $failureMiddleware->method('processFailure')->willReturn(new FailureHandlingRequest($finalMessage, $originalException, $queue)); @@ -240,7 +240,7 @@ public function testMessageFailureIsHandledSuccessfully(): void public function testStaticMethodHandler(): void { - $message = new Message('static-handler', ['test-data']); + $message = new SimpleMessage('static-handler', ['test-data']); $container = new SimpleContainer(); $handlers = [ 'static-handler' => StaticMessageHandler::handle(...), From 57324e0661d56038634b99e9e9412ff49cf9ae16 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 13:30:12 +0300 Subject: [PATCH 02/12] cs --- tests/Unit/Message/EnvelopeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Message/EnvelopeTest.php b/tests/Unit/Message/EnvelopeTest.php index e052fd8a..a27b8bf8 100644 --- a/tests/Unit/Message/EnvelopeTest.php +++ b/tests/Unit/Message/EnvelopeTest.php @@ -14,7 +14,7 @@ public function testFromData(): void { $this->expectException(LogicException::class); $this->expectExceptionMessage( - 'Envelopes cannot be created via "fromData()". Wrap an existing "MessageInterface" instance instead.' + 'Envelopes cannot be created via "fromData()". Wrap an existing "MessageInterface" instance instead.', ); DummyEnvelope::fromData('test', []); } From 7584be7c20a61c4ff0c52b66ae05e9096c36dc23 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 16:58:43 +0300 Subject: [PATCH 03/12] rename --- docs/guide/en/configuration-manual.md | 2 +- docs/guide/en/message-handler-advanced.md | 4 +-- docs/guide/en/message-handler.md | 2 +- docs/guide/en/messages-and-handlers.md | 2 +- docs/guide/en/queue-names.md | 8 ++--- docs/guide/en/usage.md | 2 +- .../{SimpleMessage.php => GenericMessage.php} | 2 +- src/Message/JsonMessageSerializer.php | 6 ++-- tests/Benchmark/MetadataBench.php | 14 ++++---- tests/Benchmark/QueueBench.php | 10 +++--- tests/Integration/MessageConsumingTest.php | 8 ++--- tests/Integration/MiddlewareTest.php | 8 ++--- tests/Integration/Support/TestMiddleware.php | 6 ++-- tests/Unit/Debug/QueueCollectorTest.php | 6 ++-- .../Debug/QueueWorkerInterfaceProxyTest.php | 4 +-- tests/Unit/EnvelopeTest.php | 6 ++-- tests/Unit/Message/DelayEnvelopeTest.php | 8 ++--- tests/Unit/Message/IdEnvelopeTest.php | 4 +-- .../Message/JsonMessageSerializerTest.php | 16 ++++----- .../Middleware/Consume/ConsumeRequestTest.php | 4 +-- .../Consume/MiddlewareDispatcherTest.php | 14 ++++---- .../Consume/MiddlewareFactoryTest.php | 6 ++-- .../Support/CallableObjectMiddleware.php | 4 +-- .../Support/StringCallableMiddleware.php | 4 +-- .../Support/TestCallableMiddleware.php | 4 +-- .../Consume/Support/TestMiddleware.php | 4 +-- .../FailureHandling/FailureEnvelopeTest.php | 4 +-- .../FailureHandlingRequestTest.php | 6 ++-- .../ExponentialDelayMiddlewareTest.php | 6 ++-- .../SendAgainMiddlewareTest.php | 4 +-- .../MiddlewareDispatcherTest.php | 14 ++++---- .../FailureHandling/MiddlewareFactoryTest.php | 6 ++-- .../Support/CallableObjectMiddleware.php | 4 +-- .../Support/StringCallableMiddleware.php | 4 +-- .../Support/TestCallableMiddleware.php | 4 +-- .../Support/TestMiddleware.php | 4 +-- .../Push/AdapterPushHandlerTest.php | 4 +-- .../Push/Implementation/IdMiddlewareTest.php | 6 ++-- .../Push/MiddlewareDispatcherTest.php | 12 +++---- .../Middleware/Push/MiddlewareFactoryTest.php | 6 ++-- .../Push/Support/CallableObjectMiddleware.php | 4 +-- .../Push/Support/StringCallableMiddleware.php | 4 +-- .../Push/Support/TestCallableMiddleware.php | 4 +-- .../Push/Support/TestMiddleware.php | 4 +-- tests/Unit/QueueTest.php | 18 +++++----- tests/Unit/Stubs/InMemoryAdapterTest.php | 36 +++++++++---------- tests/Unit/Stubs/StubQueueTest.php | 4 +-- tests/Unit/Stubs/StubWorkerTest.php | 4 +-- tests/Unit/WorkerTest.php | 22 ++++++------ 49 files changed, 171 insertions(+), 171 deletions(-) rename src/Message/{SimpleMessage.php => GenericMessage.php} (93%) diff --git a/docs/guide/en/configuration-manual.md b/docs/guide/en/configuration-manual.md index fd7a57eb..7d9f0842 100644 --- a/docs/guide/en/configuration-manual.md +++ b/docs/guide/en/configuration-manual.md @@ -79,7 +79,7 @@ $queue = new Queue( ); // Now you can push messages -$message = new \Yiisoft\Queue\Message\SimpleMessage('file-download', ['url' => 'https://example.com/file.pdf']); +$message = new \Yiisoft\Queue\Message\GenericMessage('file-download', ['url' => 'https://example.com/file.pdf']); $queue->push($message); ``` diff --git a/docs/guide/en/message-handler-advanced.md b/docs/guide/en/message-handler-advanced.md index a2041e11..fdcee6d7 100644 --- a/docs/guide/en/message-handler-advanced.md +++ b/docs/guide/en/message-handler-advanced.md @@ -17,9 +17,9 @@ Handler definitions are configured in: Use a short stable message type when pushing a `Message` instead of a PHP class name: ```php -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; -new SimpleMessage('send-email', ['data' => '...']); // "send-email" is the message type here +new GenericMessage('send-email', ['data' => '...']); // "send-email" is the message type here ``` **Config**: diff --git a/docs/guide/en/message-handler.md b/docs/guide/en/message-handler.md index 839f785f..ff492119 100644 --- a/docs/guide/en/message-handler.md +++ b/docs/guide/en/message-handler.md @@ -13,7 +13,7 @@ If your handler implements `Yiisoft\Queue\Message\MessageHandlerInterface`, you **Message**: ```php -new \Yiisoft\Queue\Message\SimpleMessage(\App\Queue\RemoteFileHandler::class, ['url' => '...']); +new \Yiisoft\Queue\Message\GenericMessage(\App\Queue\RemoteFileHandler::class, ['url' => '...']); ``` **Handler**: diff --git a/docs/guide/en/messages-and-handlers.md b/docs/guide/en/messages-and-handlers.md index 7b894692..8bc412dc 100644 --- a/docs/guide/en/messages-and-handlers.md +++ b/docs/guide/en/messages-and-handlers.md @@ -33,7 +33,7 @@ This means the producer and consumer can be: A message carries just enough data to perform the work: ```php -new \Yiisoft\Queue\Message\SimpleMessage('send-email', [ +new \Yiisoft\Queue\Message\GenericMessage('send-email', [ 'to' => 'user@example.com', 'subject' => 'Welcome', ]); diff --git a/docs/guide/en/queue-names.md b/docs/guide/en/queue-names.md index 5f31425b..0d96fd7a 100644 --- a/docs/guide/en/queue-names.md +++ b/docs/guide/en/queue-names.md @@ -68,7 +68,7 @@ Pushing a message via DI: ```php use Yiisoft\Queue\QueueInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; final readonly class SendWelcomeEmail { @@ -78,7 +78,7 @@ final readonly class SendWelcomeEmail public function run(string $email): void { - $this->queue->push(new SimpleMessage('send-email', ['to' => $email])); + $this->queue->push(new GenericMessage('send-email', ['to' => $email])); } } ``` @@ -105,7 +105,7 @@ If you have multiple queue names, inject `QueueProviderInterface` and call `get( ```php use Yiisoft\Queue\Provider\QueueProviderInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; final readonly class SendTransactionalEmail { @@ -117,7 +117,7 @@ final readonly class SendTransactionalEmail { $this->queueProvider ->get('emails') - ->push(new SimpleMessage('send-email', ['to' => $email])); + ->push(new GenericMessage('send-email', ['to' => $email])); } } ``` diff --git a/docs/guide/en/usage.md b/docs/guide/en/usage.md index 5d817bcc..b1d9893f 100644 --- a/docs/guide/en/usage.md +++ b/docs/guide/en/usage.md @@ -5,7 +5,7 @@ For example, if you need to download and save a file, you can create a message like this: ```php -$message = new \Yiisoft\Queue\Message\SimpleMessage( +$message = new \Yiisoft\Queue\Message\GenericMessage( RemoteFileHandler::class, ['url' => $url, 'destinationFile' => $filename] ); diff --git a/src/Message/SimpleMessage.php b/src/Message/GenericMessage.php similarity index 93% rename from src/Message/SimpleMessage.php rename to src/Message/GenericMessage.php index 9a64bb15..f55c5287 100644 --- a/src/Message/SimpleMessage.php +++ b/src/Message/GenericMessage.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Message; -final class SimpleMessage extends Message +final class GenericMessage extends Message { /** * @param string $type A message type used to resolve the handler. diff --git a/src/Message/JsonMessageSerializer.php b/src/Message/JsonMessageSerializer.php index f644a052..84417f1f 100644 --- a/src/Message/JsonMessageSerializer.php +++ b/src/Message/JsonMessageSerializer.php @@ -54,10 +54,10 @@ public function unserialize(string $value): MessageInterface throw new InvalidArgumentException('Metadata must be an array. Got ' . get_debug_type($meta) . '.'); } - $class = $meta['message-class'] ?? SimpleMessage::class; + $class = $meta['message-class'] ?? GenericMessage::class; // Don't check subclasses when it's a default class: that's faster - if ($class !== SimpleMessage::class && !is_subclass_of($class, MessageInterface::class)) { - $class = SimpleMessage::class; + if ($class !== GenericMessage::class && !is_subclass_of($class, MessageInterface::class)) { + $class = GenericMessage::class; } /** diff --git a/tests/Benchmark/MetadataBench.php b/tests/Benchmark/MetadataBench.php index 9df9ed70..ea2caa08 100644 --- a/tests/Benchmark/MetadataBench.php +++ b/tests/Benchmark/MetadataBench.php @@ -7,7 +7,7 @@ use Generator; use PhpBench\Attributes\ParamProviders; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; @@ -18,7 +18,7 @@ final class MetadataBench */ public function benchArrayRead(): void { - $message = (new SimpleMessage('foo', 'bar'))->withMetadata(['id' => 1]); + $message = (new GenericMessage('foo', 'bar'))->withMetadata(['id' => 1]); $id = $message->getMetadata()['id']; } @@ -27,7 +27,7 @@ public function benchArrayRead(): void */ public function benchEnvelopeRead(): void { - $message = new IdEnvelope(new SimpleMessage('foo', 'bar'), 1); + $message = new IdEnvelope(new GenericMessage('foo', 'bar'), 1); $id = $message->getId(); } @@ -36,14 +36,14 @@ public function benchEnvelopeRead(): void */ public function benchEnvelopeReadRestored(): void { - $message = IdEnvelope::fromMessage((new SimpleMessage('foo', 'bar'))->withMetadata(['id' => 1])); + $message = IdEnvelope::fromMessage((new GenericMessage('foo', 'bar'))->withMetadata(['id' => 1])); $id = $message->getId(); } public function provideEnvelopeStack(): Generator { $config = [1 => 'one', 5 => 'five', 15 => 'fifteen']; - $message = new IdEnvelope(new SimpleMessage('foo', 'bar'), 1); + $message = new IdEnvelope(new GenericMessage('foo', 'bar'), 1); for ($i = 1; $i <= max(...array_keys($config)); $i++) { if (isset($config[$i])) { @@ -79,7 +79,7 @@ public function provideEnvelopeStackCounts(): Generator #[ParamProviders('provideEnvelopeStackCounts')] public function benchEnvelopeStackCreation(array $params): void { - $message = new SimpleMessage('foo', 'bar'); + $message = new GenericMessage('foo', 'bar'); for ($i = 0; $i < $params[0]; $i++) { $message = new FailureEnvelope($message, ["fail$i" => "fail$i"]); } @@ -97,6 +97,6 @@ public function benchMetadataArrayCreation(array $params): void for ($i = 0; $i < $params[0]; $i++) { $metadata['failure-meta']["fail$i"] = "fail$i"; } - $message = (new SimpleMessage('foo', 'bar'))->withMetadata($metadata); + $message = (new GenericMessage('foo', 'bar'))->withMetadata($metadata); } } diff --git a/tests/Benchmark/QueueBench.php b/tests/Benchmark/QueueBench.php index bc7fb1fc..b03dd8a5 100644 --- a/tests/Benchmark/QueueBench.php +++ b/tests/Benchmark/QueueBench.php @@ -11,7 +11,7 @@ use Yiisoft\Queue\Cli\SimpleLoop; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\JsonMessageSerializer; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactory; @@ -66,11 +66,11 @@ public function __construct() public function providePush(): Generator { - yield 'simple' => ['message' => new SimpleMessage('foo', 'bar')]; + yield 'simple' => ['message' => new GenericMessage('foo', 'bar')]; yield 'with envelopes' => [ 'message' => new FailureEnvelope( new IdEnvelope( - new SimpleMessage('foo', 'bar'), + new GenericMessage('foo', 'bar'), 'test id', ), ['failure-1' => ['a', 'b', 'c']], @@ -86,12 +86,12 @@ public function benchPush(array $params): void public function provideConsume(): Generator { - yield 'simple mapping' => ['message' => $this->serializer->serialize(new SimpleMessage('foo', 'bar'))]; + yield 'simple mapping' => ['message' => $this->serializer->serialize(new GenericMessage('foo', 'bar'))]; yield 'with envelopes mapping' => [ 'message' => $this->serializer->serialize( new FailureEnvelope( new IdEnvelope( - new SimpleMessage('foo', 'bar'), + new GenericMessage('foo', 'bar'), 'test id', ), ['failure-1' => ['a', 'b', 'c']], diff --git a/tests/Integration/MessageConsumingTest.php b/tests/Integration/MessageConsumingTest.php index 2cb9407f..24eeb160 100644 --- a/tests/Integration/MessageConsumingTest.php +++ b/tests/Integration/MessageConsumingTest.php @@ -7,7 +7,7 @@ use Psr\Container\ContainerInterface; use Psr\Log\NullLogger; use Yiisoft\Injector\Injector; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; @@ -45,8 +45,8 @@ public function testMessagesConsumed(): void $messages = [1, 'foo', 'bar-baz']; foreach ($messages as $message) { - $worker->process(new SimpleMessage('test', $message), $this->getQueue()); - $worker->process(new SimpleMessage('test2', $message), $this->getQueue()); + $worker->process(new GenericMessage('test', $message), $this->getQueue()); + $worker->process(new GenericMessage('test2', $message), $this->getQueue()); } $this->assertEquals($messages, $this->messagesProcessed); @@ -72,7 +72,7 @@ public function testMessagesConsumedByHandlerClass(): void $messages = [1, 'foo', 'bar-baz']; foreach ($messages as $message) { - $worker->process(new SimpleMessage(TestHandler::class, $message), $this->getQueue()); + $worker->process(new GenericMessage(TestHandler::class, $message), $this->getQueue()); } $this->assertEquals($messages, $handler->messagesProcessed); diff --git a/tests/Integration/MiddlewareTest.php b/tests/Integration/MiddlewareTest.php index 9ec8e6f4..447911b6 100644 --- a/tests/Integration/MiddlewareTest.php +++ b/tests/Integration/MiddlewareTest.php @@ -12,7 +12,7 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Test\Support\Log\SimpleLogger; use Yiisoft\Queue\Cli\LoopInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; @@ -71,7 +71,7 @@ public function testFullStackPush(): void ->withMiddlewares(new TestMiddleware('channel 1'), new TestMiddleware('channel 2')) ->withMiddlewaresAdded(new TestMiddleware('channel 3'), new TestMiddleware('channel 4')); - $message = new SimpleMessage('test', ['initial']); + $message = new GenericMessage('test', ['initial']); $messagePushed = $queue->push($message); self::assertEquals($stack, $messagePushed->getData()); @@ -113,7 +113,7 @@ public function testFullStackConsume(): void $callableFactory, ); - $message = new SimpleMessage('test', ['initial']); + $message = new GenericMessage('test', ['initial']); $messageConsumed = $worker->process($message, $this->createMock(QueueInterface::class)); self::assertEquals($stack, $messageConsumed->getData()); @@ -124,7 +124,7 @@ public function testFullStackFailure(): void $exception = new InvalidArgumentException('test'); $this->expectExceptionObject($exception); - $message = new SimpleMessage('simple', null, []); + $message = new GenericMessage('simple', null, []); $queueCallback = static fn(MessageInterface $message): MessageInterface => $message; $queue = $this->createMock(QueueInterface::class); $container = new SimpleContainer([SendAgainMiddleware::class => new SendAgainMiddleware('test-container', 1, $queue)]); diff --git a/tests/Integration/Support/TestMiddleware.php b/tests/Integration/Support/TestMiddleware.php index f2ab5024..ec65065b 100644 --- a/tests/Integration/Support/TestMiddleware.php +++ b/tests/Integration/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Integration\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; @@ -21,7 +21,7 @@ public function processPush(MessageInterface $message, PushHandlerInterface $han $stack = $message->getData(); $stack[] = $this->stage; - return $handler->handlePush(new SimpleMessage($message->getType(), $stack)); + return $handler->handlePush(new GenericMessage($message->getType(), $stack)); } public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest @@ -29,7 +29,7 @@ public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $message = $request->getMessage(); $stack = $message->getData(); $stack[] = $this->stage; - $messageNew = new SimpleMessage($message->getType(), $stack); + $messageNew = new GenericMessage($message->getType(), $stack); return $handler->handleConsume($request->withMessage($messageNew)); } diff --git a/tests/Unit/Debug/QueueCollectorTest.php b/tests/Unit/Debug/QueueCollectorTest.php index 2cfa7dfc..efed423c 100644 --- a/tests/Unit/Debug/QueueCollectorTest.php +++ b/tests/Unit/Debug/QueueCollectorTest.php @@ -8,17 +8,17 @@ use Yiisoft\Yii\Debug\Collector\CollectorInterface; use Yiisoft\Yii\Debug\Tests\Shared\AbstractCollectorTestCase; use Yiisoft\Queue\Debug\QueueCollector; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Stubs\StubQueue; final class QueueCollectorTest extends AbstractCollectorTestCase { - private SimpleMessage $pushMessage; + private GenericMessage $pushMessage; protected function setUp(): void { parent::setUp(); - $this->pushMessage = new SimpleMessage('task', ['id' => 500]); + $this->pushMessage = new GenericMessage('task', ['id' => 500]); } /** diff --git a/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php b/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php index 01381e1f..56d58564 100644 --- a/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php +++ b/tests/Unit/Debug/QueueWorkerInterfaceProxyTest.php @@ -7,7 +7,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Debug\QueueCollector; use Yiisoft\Queue\Debug\QueueWorkerInterfaceProxy; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Stubs\StubQueue; use Yiisoft\Queue\Stubs\StubWorker; @@ -15,7 +15,7 @@ final class QueueWorkerInterfaceProxyTest extends TestCase { public function testProcessDelegatesToWorker(): void { - $message = new SimpleMessage('handler', 'data'); + $message = new GenericMessage('handler', 'data'); $collector = new QueueCollector(); $collector->startup(); $proxy = new QueueWorkerInterfaceProxy(new StubWorker(), $collector); diff --git a/tests/Unit/EnvelopeTest.php b/tests/Unit/EnvelopeTest.php index 470867f9..21d26eab 100644 --- a/tests/Unit/EnvelopeTest.php +++ b/tests/Unit/EnvelopeTest.php @@ -6,13 +6,13 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; final class EnvelopeTest extends TestCase { public function testEnvelopeStack(): void { - $message = new SimpleMessage('handler', 'test'); + $message = new GenericMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id'); $this->assertEquals('test', $message->getMessage()->getData()); @@ -21,7 +21,7 @@ public function testEnvelopeStack(): void public function testEnvelopeDuplicates(): void { - $message = new SimpleMessage('handler', 'test'); + $message = new GenericMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id-1'); $message = new IdEnvelope($message, 'test-id-2'); $message = new IdEnvelope($message, 'test-id-3'); diff --git a/tests/Unit/Message/DelayEnvelopeTest.php b/tests/Unit/Message/DelayEnvelopeTest.php index e72c527f..f82710fa 100644 --- a/tests/Unit/Message/DelayEnvelopeTest.php +++ b/tests/Unit/Message/DelayEnvelopeTest.php @@ -6,13 +6,13 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\DelayEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; final class DelayEnvelopeTest extends TestCase { public function testDelayEnvelope(): void { - $message = new SimpleMessage('test', ['data' => 'value']); + $message = new GenericMessage('test', ['data' => 'value']); $delayEnvelope = new DelayEnvelope($message, 300.5); self::assertSame($message, $delayEnvelope->getMessage()); @@ -27,7 +27,7 @@ public function testDelayEnvelope(): void public function testFromMessage(): void { - $message = (new SimpleMessage('test', ['data' => 'value']))->withMetadata([DelayEnvelope::META_DELAY_SECONDS => 150]); + $message = (new GenericMessage('test', ['data' => 'value']))->withMetadata([DelayEnvelope::META_DELAY_SECONDS => 150]); $delayEnvelope = DelayEnvelope::fromMessage($message); self::assertSame(150.0, $delayEnvelope->getDelaySeconds()); @@ -37,7 +37,7 @@ public function testFromMessage(): void public function testFromMessageWithoutDelay(): void { - $message = new SimpleMessage('test', ['data' => 'value']); + $message = new GenericMessage('test', ['data' => 'value']); $delayEnvelope = DelayEnvelope::fromMessage($message); self::assertSame(0.0, $delayEnvelope->getDelaySeconds()); diff --git a/tests/Unit/Message/IdEnvelopeTest.php b/tests/Unit/Message/IdEnvelopeTest.php index 1a32e7fc..0d51e4e9 100644 --- a/tests/Unit/Message/IdEnvelopeTest.php +++ b/tests/Unit/Message/IdEnvelopeTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; final class IdEnvelopeTest extends TestCase @@ -88,6 +88,6 @@ public function testGetEnvelopeMetadata(): void private function createMessage(array $metadata = []): MessageInterface { - return (new SimpleMessage('test-handler', ['test-data']))->withMetadata($metadata); + return (new GenericMessage('test-handler', ['test-data']))->withMetadata($metadata); } } diff --git a/tests/Unit/Message/JsonMessageSerializerTest.php b/tests/Unit/Message/JsonMessageSerializerTest.php index f370ab27..e7ef71bc 100644 --- a/tests/Unit/Message/JsonMessageSerializerTest.php +++ b/tests/Unit/Message/JsonMessageSerializerTest.php @@ -9,7 +9,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\JsonMessageSerializer; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Tests\Unit\Support\TestMessage; use function sprintf; @@ -55,7 +55,7 @@ public function testDefaultMessageClassFallbackWrongClass(): void ]; $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); - $this->assertInstanceOf(SimpleMessage::class, $message); + $this->assertInstanceOf(GenericMessage::class, $message); } public function testDefaultMessageClassFallbackClassNotSet(): void @@ -67,7 +67,7 @@ public function testDefaultMessageClassFallbackClassNotSet(): void 'meta' => [], ]; $message = $serializer->unserialize(json_encode($payload, JSON_THROW_ON_ERROR)); - $this->assertInstanceOf(SimpleMessage::class, $message); + $this->assertInstanceOf(GenericMessage::class, $message); } #[DataProvider('dataUnsupportedPayloadFormat')] @@ -130,7 +130,7 @@ public function testUnserializeWithMetadata(): void public function testSerialize(): void { - $message = new SimpleMessage('handler', 'test'); + $message = new GenericMessage('handler', 'test'); $serializer = $this->createSerializer(); @@ -144,7 +144,7 @@ public function testSerialize(): void public function testSerializeEnvelopeStack(): void { - $message = new SimpleMessage('handler', 'test'); + $message = new GenericMessage('handler', 'test'); $message = new IdEnvelope($message, 'test-id'); $serializer = $this->createSerializer(); @@ -155,17 +155,17 @@ public function testSerializeEnvelopeStack(): void sprintf( '{"type":"handler","data":"test","meta":{"%s":"test-id","message-class":"%s"}}', IdEnvelope::MESSAGE_ID_KEY, - str_replace('\\', '\\\\', SimpleMessage::class), + str_replace('\\', '\\\\', GenericMessage::class), ), $json, ); $message = $serializer->unserialize($json); - $this->assertInstanceOf(SimpleMessage::class, $message); + $this->assertInstanceOf(GenericMessage::class, $message); $this->assertEquals([ IdEnvelope::MESSAGE_ID_KEY => 'test-id', - 'message-class' => SimpleMessage::class, + 'message-class' => GenericMessage::class, ], $message->getMetadata()); } diff --git a/tests/Unit/Middleware/Consume/ConsumeRequestTest.php b/tests/Unit/Middleware/Consume/ConsumeRequestTest.php index 95e6edb4..06bdac0e 100644 --- a/tests/Unit/Middleware/Consume/ConsumeRequestTest.php +++ b/tests/Unit/Middleware/Consume/ConsumeRequestTest.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Tests\TestCase; @@ -13,7 +13,7 @@ final class ConsumeRequestTest extends TestCase { public function testImmutable(): void { - $message = new SimpleMessage('test', 'test'); + $message = new GenericMessage('test', 'test'); $queue = $this->createMock(QueueInterface::class); $consumeRequest = new ConsumeRequest($message, $queue); diff --git a/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php index e957a835..e0c817d4 100644 --- a/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Consume/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; @@ -30,7 +30,7 @@ public function testCallableMiddlewareCalled(): void $dispatcher = $this->createDispatcher()->withMiddlewares( [ static function (ConsumeRequest $request) use ($queue): ConsumeRequest { - return $request->withMessage(new SimpleMessage('test', 'New closure test data'))->withQueue($queue); + return $request->withMessage(new GenericMessage('test', 'New closure test data'))->withQueue($queue); }, ], ); @@ -70,12 +70,12 @@ public function testMiddlewareFullStackCalled(): void $request = $this->getConsumeRequest(); $middleware1 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - $request = $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'new test data')); + $request = $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'new test data')); return $handler->handleConsume($request); }; $middleware2 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - $request = $request->withMessage(new SimpleMessage('new handler', $request->getMessage()->getData())); + $request = $request->withMessage(new GenericMessage('new handler', $request->getMessage()->getData())); return $handler->handleConsume($request); }; @@ -92,10 +92,10 @@ public function testMiddlewareStackInterrupted(): void $request = $this->getConsumeRequest(); $middleware1 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'first')); + return $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'first')); }; $middleware2 = static function (ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'second')); + return $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'second')); }; $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); @@ -177,7 +177,7 @@ private function createContainer(array $instances = []): ContainerInterface private function getConsumeRequest(): ConsumeRequest { return new ConsumeRequest( - new SimpleMessage('handler', 'data'), + new GenericMessage('handler', 'data'), $this->createMock(QueueInterface::class), ); } diff --git a/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php index 0b3e0a64..5a28283b 100644 --- a/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Consume/MiddlewareFactoryTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; @@ -61,7 +61,7 @@ public function testCreateFromClosureResponse(): void $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createConsumeMiddleware( fn(): ConsumeRequest => new ConsumeRequest( - new SimpleMessage('test', 'test data'), + new GenericMessage('test', 'test data'), $this->createMock(QueueInterface::class), ), ); @@ -222,7 +222,7 @@ public function handleConsume(ConsumeRequest $request): ConsumeRequest private function getConsumeRequest(): ConsumeRequest { return new ConsumeRequest( - new SimpleMessage('handler', 'data'), + new GenericMessage('handler', 'data'), $this->createMock(QueueInterface::class), ); } diff --git a/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php index 8fee1cbf..86bb940e 100644 --- a/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class CallableObjectMiddleware { public function __invoke(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new SimpleMessage('test', 'Callable object data')); + return $request->withMessage(new GenericMessage('test', 'Callable object data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php index f61c54a4..3254c2cb 100644 --- a/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class StringCallableMiddleware { public static function handle(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new SimpleMessage('test', 'String callable data')); + return $request->withMessage(new GenericMessage('test', 'String callable data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php index c5400b46..a2a31a8f 100644 --- a/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; final class TestCallableMiddleware { public function index(ConsumeRequest $request): ConsumeRequest { - return $request->withMessage(new SimpleMessage('test', 'New test data')); + return $request->withMessage(new GenericMessage('test', 'New test data')); } } diff --git a/tests/Unit/Middleware/Consume/Support/TestMiddleware.php b/tests/Unit/Middleware/Consume/Support/TestMiddleware.php index bcdc37ad..d7cd0b60 100644 --- a/tests/Unit/Middleware/Consume/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/Consume/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Consume\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Consume\ConsumeHandlerInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest { - return $request->withMessage(new SimpleMessage('test', $this->message)); + return $request->withMessage(new GenericMessage('test', $this->message)); } } diff --git a/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php b/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php index 7c47cd67..b2e038a4 100644 --- a/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php +++ b/tests/Unit/Middleware/FailureHandling/FailureEnvelopeTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; @@ -59,6 +59,6 @@ public function testMetadataMerging(): void private function createMessage(array $metadata = []): MessageInterface { - return (new SimpleMessage('test-handler', ['test-data']))->withMetadata($metadata); + return (new GenericMessage('test-handler', ['test-data']))->withMetadata($metadata); } } diff --git a/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php b/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php index 0bf2c4e6..ca3a51e5 100644 --- a/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php +++ b/tests/Unit/Middleware/FailureHandling/FailureHandlingRequestTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling; use Exception; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Tests\TestCase; @@ -16,13 +16,13 @@ public function testImmutable(): void { $queue = $this->createMock(QueueInterface::class); $request1 = new FailureHandlingRequest( - new SimpleMessage('test', null), + new GenericMessage('test', null), new Exception('exception 1'), $queue, ); $request2 = $request1->withQueue($queue); $request3 = $request1->withException(new Exception('exception 2')); - $request4 = $request1->withMessage(new SimpleMessage('test2', null)); + $request4 = $request1->withMessage(new GenericMessage('test2', null)); $this->assertNotSame($request1, $request2); diff --git a/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php b/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php index f077cab5..26bc1afa 100644 --- a/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php +++ b/tests/Unit/Middleware/FailureHandling/Implementation/ExponentialDelayMiddlewareTest.php @@ -7,7 +7,7 @@ use Exception; use InvalidArgumentException; use PHPUnit\Framework\Attributes\DataProvider; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\Implementation\ExponentialDelayMiddleware; @@ -131,7 +131,7 @@ public function testConstructorRequirements(bool $success, array $arguments): vo public function testPipelineSuccess(): void { - $message = new SimpleMessage('test', null); + $message = new GenericMessage('test', null); $queue = $this->createMock(QueueInterface::class); $queue->method('push')->willReturnArgument(0); $middleware = new ExponentialDelayMiddleware( @@ -162,7 +162,7 @@ public function testPipelineFailure(): void $this->expectException(Exception::class); $this->expectExceptionMessage('test'); - $message = (new SimpleMessage( + $message = (new GenericMessage( 'test', null, ))->withMetadata([FailureEnvelope::FAILURE_META_KEY => [ExponentialDelayMiddleware::META_KEY_ATTEMPTS . '-test' => 2]]); diff --git a/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php b/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php index 329d98a5..04a16f1e 100644 --- a/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php +++ b/tests/Unit/Middleware/FailureHandling/Implementation/SendAgainMiddlewareTest.php @@ -8,7 +8,7 @@ use PHPUnit\Framework\Assert; use PHPUnit\Framework\Attributes\DataProvider; use RuntimeException; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureEnvelope; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; @@ -155,7 +155,7 @@ public function testQueueSendingStrategies( $strategy = $this->getStrategy($strategyName, $queue); $request = new FailureHandlingRequest( - (new SimpleMessage( + (new GenericMessage( 'test', null, ))->withMetadata([FailureEnvelope::FAILURE_META_KEY => $metaInitial]), diff --git a/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php index f0c45d4e..84008ba5 100644 --- a/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/FailureHandling/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareDispatcher; @@ -30,7 +30,7 @@ public function testCallableMiddlewareCalled(): void [ FailureMiddlewareDispatcher::DEFAULT_PIPELINE => [ static function (FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage('test', 'New closure test data')); + return $request->withMessage(new GenericMessage('test', 'New closure test data')); }, ], ], @@ -77,12 +77,12 @@ public function testMiddlewareFullStackCalled(): void $request = $this->getFailureHandlingRequest(); $middleware1 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - $request = $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'new test data')); + $request = $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'new test data')); return $handler->handleFailure($request); }; $middleware2 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - $request = $request->withMessage(new SimpleMessage('new handler', $request->getMessage()->getData())); + $request = $request->withMessage(new GenericMessage('new handler', $request->getMessage()->getData())); return $handler->handleFailure($request); }; @@ -99,10 +99,10 @@ public function testMiddlewareStackInterrupted(): void $request = $this->getFailureHandlingRequest(); $middleware1 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'first')); + return $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'first')); }; $middleware2 = static function (FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage($request->getMessage()->getType(), 'second')); + return $request->withMessage(new GenericMessage($request->getMessage()->getType(), 'second')); }; $dispatcher = $this->createDispatcher()->withMiddlewares([FailureMiddlewareDispatcher::DEFAULT_PIPELINE => [$middleware1, $middleware2]]); @@ -173,7 +173,7 @@ private function createContainer(array $instances = []): ContainerInterface private function getFailureHandlingRequest(): FailureHandlingRequest { return new FailureHandlingRequest( - new SimpleMessage('handler', 'data'), + new GenericMessage('handler', 'data'), new Exception('Test exception.'), $this->createMock(QueueInterface::class), ); diff --git a/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php b/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php index 69a340d4..b76a8a69 100644 --- a/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/FailureHandling/MiddlewareFactoryTest.php @@ -11,7 +11,7 @@ use RuntimeException; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface; @@ -55,7 +55,7 @@ public function testCreateFromClosureResponse(): void $middleware = $this->getMiddlewareFactory($container)->createFailureMiddleware( function (): FailureHandlingRequest { return new FailureHandlingRequest( - new SimpleMessage('test', 'test data'), + new GenericMessage('test', 'test data'), new RuntimeException('test exception'), $this->createMock(QueueInterface::class), ); @@ -206,7 +206,7 @@ public function handleFailure(FailureHandlingRequest $request): FailureHandlingR private function getConsumeRequest(): FailureHandlingRequest { return new FailureHandlingRequest( - new SimpleMessage('handler', 'data'), + new GenericMessage('handler', 'data'), new Exception('test exception'), $this->createMock(QueueInterface::class), ); diff --git a/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php index 5ffb377b..36d25e2b 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class CallableObjectMiddleware { public function __invoke(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage('test', 'Callable object data')); + return $request->withMessage(new GenericMessage('test', 'Callable object data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php index e566113d..066af8ec 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class StringCallableMiddleware { public static function handle(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage('test', 'String callable data')); + return $request->withMessage(new GenericMessage('test', 'String callable data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php index c00d29bf..47e87aa5 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; final class TestCallableMiddleware { public function index(FailureHandlingRequest $request): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage('test', 'New test data')); + return $request->withMessage(new GenericMessage('test', 'New test data')); } } diff --git a/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php b/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php index ead87606..c9749e8e 100644 --- a/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/FailureHandling/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\FailureHandling\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlingRequest; use Yiisoft\Queue\Middleware\FailureHandling\FailureHandlerInterface; use Yiisoft\Queue\Middleware\FailureHandling\FailureMiddlewareInterface; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processFailure(FailureHandlingRequest $request, FailureHandlerInterface $handler): FailureHandlingRequest { - return $request->withMessage(new SimpleMessage('test', $this->message)); + return $request->withMessage(new GenericMessage('test', $this->message)); } } diff --git a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php index d8fe9a46..7bd61e26 100644 --- a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php +++ b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Push\AdapterPushHandler; use Yiisoft\Queue\Tests\App\FakeAdapter; @@ -15,7 +15,7 @@ public function testHandlePushUsesAdapter(): void { $adapter = new FakeAdapter(); $handler = new AdapterPushHandler($adapter); - $message = new SimpleMessage('handler', 'data'); + $message = new GenericMessage('handler', 'data'); $result = $handler->handlePush($message); diff --git a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php index 5570dbbf..14136057 100644 --- a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php +++ b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Middleware\Push\Implementation\IdMiddleware; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; @@ -14,7 +14,7 @@ final class IdMiddlewareTest extends TestCase { public function testWithId(): void { - $message = (new SimpleMessage('test', null))->withMetadata([IdEnvelope::MESSAGE_ID_KEY => 'test-id']); + $message = (new GenericMessage('test', null))->withMetadata([IdEnvelope::MESSAGE_ID_KEY => 'test-id']); $handler = $this->createMock(PushHandlerInterface::class); $handler->expects($this->once()) @@ -33,7 +33,7 @@ public function testWithId(): void public function testWithoutId(): void { - $message = new SimpleMessage('test', null); + $message = new GenericMessage('test', null); $handler = $this->createMock(PushHandlerInterface::class); $handler->expects($this->once()) diff --git a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php index 93e5260f..62ce65c1 100644 --- a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; @@ -28,7 +28,7 @@ public function testCallableMiddlewareCalled(): void $dispatcher = $this->createDispatcher()->withMiddlewares( [ static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return new SimpleMessage('test', 'New closure test data'); + return new GenericMessage('test', 'New closure test data'); }, ], ); @@ -68,7 +68,7 @@ public function testMiddlewareFullStackCalled(): void $message = $this->getMessage(); $middleware1 = static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return $handler->handlePush(new SimpleMessage($message->getType(), 'new test data')); + return $handler->handlePush(new GenericMessage($message->getType(), 'new test data')); }; $middleware2 = static function (MessageInterface $message, PushHandlerInterface $handler): MessageInterface { return $handler->handlePush($message); @@ -84,8 +84,8 @@ public function testMiddlewareStackInterrupted(): void { $message = $this->getMessage(); - $middleware1 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new SimpleMessage($message->getType(), 'first'); - $middleware2 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new SimpleMessage($message->getType(), 'second'); + $middleware1 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new GenericMessage($message->getType(), 'first'); + $middleware2 = static fn(MessageInterface $message, PushHandlerInterface $handler): MessageInterface => new GenericMessage($message->getType(), 'second'); $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); @@ -162,6 +162,6 @@ private function createContainer(array $instances = []): ContainerInterface private function getMessage(): MessageInterface { - return new SimpleMessage('handler', 'data'); + return new GenericMessage('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php index 6034fe0e..80f99b73 100644 --- a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php @@ -9,7 +9,7 @@ use Psr\Container\ContainerInterface; use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException; @@ -51,7 +51,7 @@ public function testCreateFromClosureResponse(): void $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createPushMiddleware( static function (): MessageInterface { - return new SimpleMessage('test', 'test data'); + return new GenericMessage('test', 'test data'); }, ); self::assertSame( @@ -195,6 +195,6 @@ public function handlePush(MessageInterface $message): MessageInterface private function getMessage(): MessageInterface { - return new SimpleMessage('handler', 'data'); + return new GenericMessage('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php b/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php index 0b505b2a..996665b6 100644 --- a/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/CallableObjectMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; final class CallableObjectMiddleware { public function __invoke(MessageInterface $message): MessageInterface { - return new SimpleMessage('test', 'Callable object data'); + return new GenericMessage('test', 'Callable object data'); } } diff --git a/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php b/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php index 472e603a..f0c11636 100644 --- a/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/StringCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; final class StringCallableMiddleware { public static function handle(MessageInterface $message): MessageInterface { - return new SimpleMessage('test', 'String callable data'); + return new GenericMessage('test', 'String callable data'); } } diff --git a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php index 3aa1547d..a8219ac8 100644 --- a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php @@ -4,13 +4,13 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; final class TestCallableMiddleware { public function index(MessageInterface $message): MessageInterface { - return new SimpleMessage('test', 'New test data'); + return new GenericMessage('test', 'New test data'); } } diff --git a/tests/Unit/Middleware/Push/Support/TestMiddleware.php b/tests/Unit/Middleware/Push/Support/TestMiddleware.php index f9cb255c..ba942661 100644 --- a/tests/Unit/Middleware/Push/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestMiddleware.php @@ -4,7 +4,7 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\PushHandlerInterface; use Yiisoft\Queue\Middleware\Push\PushMiddlewareInterface; @@ -15,6 +15,6 @@ public function __construct(private readonly string $message = 'New middleware t public function processPush(MessageInterface $message, PushHandlerInterface $handler): MessageInterface { - return new SimpleMessage('test', $this->message); + return new GenericMessage('test', $this->message); } } diff --git a/tests/Unit/QueueTest.php b/tests/Unit/QueueTest.php index 327bf07a..9e5b499c 100644 --- a/tests/Unit/QueueTest.php +++ b/tests/Unit/QueueTest.php @@ -6,7 +6,7 @@ use Yiisoft\Queue\Cli\SignalLoop; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\MessageStatus; use Yiisoft\Queue\Stubs\InMemoryAdapter; use Yiisoft\Queue\Tests\App\FakeAdapter; @@ -27,7 +27,7 @@ public function testPushSuccessful(): void { $adapter = new FakeAdapter(); $queue = $this->createQueue($adapter); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); self::assertSame([$message], $adapter->pushMessages); @@ -36,7 +36,7 @@ public function testPushSuccessful(): void public function testPushSynchronouslyProcessesMessage(): void { $queue = $this->createQueue(); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -47,7 +47,7 @@ public function testPushSynchronouslyProcessesMessage(): void public function testRunWithoutAdapterReturnsZero(): void { $queue = $this->createQueue(); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -74,7 +74,7 @@ public function testStatusReturnsNotFoundWithoutAdapter(): void public function testRunWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -85,7 +85,7 @@ public function testRunWithAdapter(): void public function testRunPartlyWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -96,7 +96,7 @@ public function testRunPartlyWithAdapter(): void public function testListenWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); @@ -108,7 +108,7 @@ public function testListenWithAdapter(): void public function testStatusWithAdapter(): void { $queue = $this->createQueue(new InMemoryAdapter()); - $envelope = $queue->push(new SimpleMessage('simple', null)); + $envelope = $queue->push(new GenericMessage('simple', null)); self::assertArrayHasKey(IdEnvelope::MESSAGE_ID_KEY, $envelope->getMetadata()); /** @var int|string $id */ @@ -128,7 +128,7 @@ public function testRunWithSignalLoop(): void $this->loop = new SignalLoop(); $queue = $this->createQueue(); - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); $queue->push($message); $queue->push(clone $message); diff --git a/tests/Unit/Stubs/InMemoryAdapterTest.php b/tests/Unit/Stubs/InMemoryAdapterTest.php index 5b76819d..288879ea 100644 --- a/tests/Unit/Stubs/InMemoryAdapterTest.php +++ b/tests/Unit/Stubs/InMemoryAdapterTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\MessageStatus; use Yiisoft\Queue\Stubs\InMemoryAdapter; @@ -17,9 +17,9 @@ public function testPush(): void { $adapter = new InMemoryAdapter(); - $envelope1 = $adapter->push(new SimpleMessage('test', 'a')); - $envelope2 = $adapter->push(new SimpleMessage('test', 'b')); - $envelope3 = $adapter->push(new SimpleMessage('test', 'c')); + $envelope1 = $adapter->push(new GenericMessage('test', 'a')); + $envelope2 = $adapter->push(new GenericMessage('test', 'b')); + $envelope3 = $adapter->push(new GenericMessage('test', 'c')); $this->assertInstanceOf(IdEnvelope::class, $envelope1); $this->assertInstanceOf(IdEnvelope::class, $envelope2); @@ -36,7 +36,7 @@ public function testPush(): void public function testStatusWaitingForPushedMessage(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new SimpleMessage('test', null)); + $envelope = $adapter->push(new GenericMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(MessageStatus::WAITING, $adapter->status($envelope->getId())); @@ -45,7 +45,7 @@ public function testStatusWaitingForPushedMessage(): void public function testStatusDoneAfterProcessing(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new SimpleMessage('test', null)); + $envelope = $adapter->push(new GenericMessage('test', null)); $adapter->runExisting(static fn() => true); @@ -70,7 +70,7 @@ public function testStatusNotFoundForNegativeId(): void public function testStatusAcceptsStringId(): void { $adapter = new InMemoryAdapter(); - $envelope = $adapter->push(new SimpleMessage('test', null)); + $envelope = $adapter->push(new GenericMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(MessageStatus::WAITING, $adapter->status((string) $envelope->getId())); @@ -79,9 +79,9 @@ public function testStatusAcceptsStringId(): void public function testRunExistingProcessesAllMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new SimpleMessage('test', 'a')); - $adapter->push(new SimpleMessage('test', 'b')); - $adapter->push(new SimpleMessage('test', 'c')); + $adapter->push(new GenericMessage('test', 'a')); + $adapter->push(new GenericMessage('test', 'b')); + $adapter->push(new GenericMessage('test', 'c')); $processed = []; $adapter->runExisting( @@ -97,9 +97,9 @@ static function (MessageInterface $message) use (&$processed): bool { public function testRunExistingStopsWhenHandlerReturnsFalse(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new SimpleMessage('test', 'a')); - $adapter->push(new SimpleMessage('test', 'b')); - $adapter->push(new SimpleMessage('test', 'c')); + $adapter->push(new GenericMessage('test', 'a')); + $adapter->push(new GenericMessage('test', 'b')); + $adapter->push(new GenericMessage('test', 'c')); $processed = []; $adapter->runExisting( @@ -128,7 +128,7 @@ public function testRunExistingOnEmptyQueue(): void public function testRunExistingDoesNotReprocessMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new SimpleMessage('test', 'x')); + $adapter->push(new GenericMessage('test', 'x')); $count = 0; $handler = static function () use (&$count): bool { @@ -144,10 +144,10 @@ public function testRunExistingDoesNotReprocessMessages(): void public function testIdContinuesAfterProcessing(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new SimpleMessage('test', null)); + $adapter->push(new GenericMessage('test', null)); $adapter->runExisting(static fn() => true); - $envelope = $adapter->push(new SimpleMessage('test', null)); + $envelope = $adapter->push(new GenericMessage('test', null)); $this->assertInstanceOf(IdEnvelope::class, $envelope); $this->assertSame(1, $envelope->getId()); @@ -157,8 +157,8 @@ public function testIdContinuesAfterProcessing(): void public function testSubscribeProcessesExistingMessages(): void { $adapter = new InMemoryAdapter(); - $adapter->push(new SimpleMessage('test', 'a')); - $adapter->push(new SimpleMessage('test', 'b')); + $adapter->push(new GenericMessage('test', 'a')); + $adapter->push(new GenericMessage('test', 'b')); $processed = []; $adapter->subscribe( diff --git a/tests/Unit/Stubs/StubQueueTest.php b/tests/Unit/Stubs/StubQueueTest.php index c73570e1..d52c6799 100644 --- a/tests/Unit/Stubs/StubQueueTest.php +++ b/tests/Unit/Stubs/StubQueueTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\MessageStatus; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Stubs\StubQueue; final class StubQueueTest extends TestCase @@ -14,7 +14,7 @@ final class StubQueueTest extends TestCase public function testBase(): void { $queue = new StubQueue(); - $message = new SimpleMessage('test', 42); + $message = new GenericMessage('test', 42); $this->assertSame($message, $queue->push($message)); $this->assertSame(0, $queue->run()); diff --git a/tests/Unit/Stubs/StubWorkerTest.php b/tests/Unit/Stubs/StubWorkerTest.php index a0332036..58279594 100644 --- a/tests/Unit/Stubs/StubWorkerTest.php +++ b/tests/Unit/Stubs/StubWorkerTest.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Stubs; use PHPUnit\Framework\TestCase; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Stubs\StubWorker; @@ -15,7 +15,7 @@ public function testBase(): void { $worker = new StubWorker(); - $sourceMessage = new SimpleMessage('test', 42); + $sourceMessage = new GenericMessage('test', 42); $message = $worker->process($sourceMessage, $this->createMock(QueueInterface::class)); diff --git a/tests/Unit/WorkerTest.php b/tests/Unit/WorkerTest.php index f749f0e5..244e18e2 100644 --- a/tests/Unit/WorkerTest.php +++ b/tests/Unit/WorkerTest.php @@ -13,7 +13,7 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Test\Support\Log\SimpleLogger; use Yiisoft\Queue\Exception\MessageFailureException; -use Yiisoft\Queue\Message\SimpleMessage; +use Yiisoft\Queue\Message\GenericMessage; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareDispatcher; use Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactoryInterface; @@ -35,7 +35,7 @@ final class WorkerTest extends TestCase #[DataProvider('messageHandledDataProvider')] public function testMessageHandled(mixed $handler, array $containerServices): void { - $message = new SimpleMessage('simple', ['test-data']); + $message = new GenericMessage('simple', ['test-data']); $logger = new SimpleLogger(); $container = new SimpleContainer($containerServices); $handlers = ['simple' => $handler]; @@ -90,7 +90,7 @@ public function testMessageFailWithDefinitionUndefinedMethodHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new SimpleMessage('simple', ['test-data']); + $message = new GenericMessage('simple', ['test-data']); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); $handlers = ['simple' => [FakeHandler::class, 'undefinedMethod']]; @@ -106,7 +106,7 @@ public function testMessageFailWithDefinitionUndefinedClassHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new SimpleMessage('simple', ['test-data']); + $message = new GenericMessage('simple', ['test-data']); $logger = new SimpleLogger(); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); @@ -122,7 +122,7 @@ public function testMessageFailWithDefinitionUndefinedClassHandler(): void public function testMessageFailWithDefinitionClassNotFoundInContainerHandler(): void { $this->expectExceptionMessage('Queue handler for message type "simple" does not exist'); - $message = new SimpleMessage('simple', ['test-data']); + $message = new GenericMessage('simple', ['test-data']); $container = new SimpleContainer(); $handlers = ['simple' => [FakeHandler::class, 'handle']]; @@ -135,7 +135,7 @@ public function testMessageFailWithDefinitionClassNotFoundInContainerHandler(): public function testMessageFailWithDefinitionHandlerException(): void { - $message = new SimpleMessage('simple', ['test-data']); + $message = new GenericMessage('simple', ['test-data']); $logger = new SimpleLogger(); $handler = new FakeHandler(); $container = new SimpleContainer([FakeHandler::class => $handler]); @@ -163,7 +163,7 @@ public function testMessageFailWithDefinitionHandlerException(): void public function testHandlerNotFoundInContainer(): void { - $message = new SimpleMessage('nonexistent', ['test-data']); + $message = new GenericMessage('nonexistent', ['test-data']); $container = new SimpleContainer(); $handlers = []; @@ -178,7 +178,7 @@ public function testHandlerNotFoundInContainer(): void public function testHandlerInContainerNotImplementingInterface(): void { - $message = new SimpleMessage('invalid', ['test-data']); + $message = new GenericMessage('invalid', ['test-data']); $container = new SimpleContainer([ 'invalid' => new class { public function handle(): void {} @@ -197,7 +197,7 @@ public function handle(): void {} public function testMessageFailureIsHandledSuccessfully(): void { - $message = new SimpleMessage('simple', null); + $message = new GenericMessage('simple', null); /** @var MockObject&QueueInterface $queue */ $queue = $this->createMock(QueueInterface::class); $queue->method('getName')->willReturn('test-queue'); @@ -212,7 +212,7 @@ public function testMessageFailureIsHandledSuccessfully(): void $consumeMiddlewareFactory->method('createConsumeMiddleware')->willReturn($consumeMiddleware); $consumeDispatcher = new ConsumeMiddlewareDispatcher($consumeMiddlewareFactory, 'simple'); - $finalMessage = new SimpleMessage('final', null); + $finalMessage = new GenericMessage('final', null); /** @var FailureMiddlewareInterface&MockObject $failureMiddleware */ $failureMiddleware = $this->createMock(FailureMiddlewareInterface::class); $failureMiddleware->method('processFailure')->willReturn(new FailureHandlingRequest($finalMessage, $originalException, $queue)); @@ -240,7 +240,7 @@ public function testMessageFailureIsHandledSuccessfully(): void public function testStaticMethodHandler(): void { - $message = new SimpleMessage('static-handler', ['test-data']); + $message = new GenericMessage('static-handler', ['test-data']); $container = new SimpleContainer(); $handlers = [ 'static-handler' => StaticMessageHandler::handle(...), From 297eec139897c67932fa2d0d19fd65b42000d257 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 16:59:59 +0300 Subject: [PATCH 04/12] fix test --- tests/Unit/Message/JsonMessageSerializerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Message/JsonMessageSerializerTest.php b/tests/Unit/Message/JsonMessageSerializerTest.php index e7ef71bc..9cdbde05 100644 --- a/tests/Unit/Message/JsonMessageSerializerTest.php +++ b/tests/Unit/Message/JsonMessageSerializerTest.php @@ -137,7 +137,7 @@ public function testSerialize(): void $json = $serializer->serialize($message); $this->assertEquals( - '{"type":"handler","data":"test","meta":{"message-class":"Yiisoft\\\\Queue\\\\Message\\\\SimpleMessage"}}', + '{"type":"handler","data":"test","meta":{"message-class":"Yiisoft\\\\Queue\\\\Message\\\\GenericMessage"}}', $json, ); } From 5c3c3c330a5ca0fe110170ff4146286215773416 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 18:12:38 +0300 Subject: [PATCH 05/12] improve docs --- README.md | 107 ++++++++++++++-------- docs/guide/en/configuration-manual.md | 5 +- docs/guide/en/message-handler-advanced.md | 45 ++++++++- docs/guide/en/message-handler.md | 29 +++++- docs/guide/en/messages-and-handlers.md | 66 ++++++++++--- docs/guide/en/queue-names.md | 6 +- docs/guide/en/usage.md | 45 ++++++++- 7 files changed, 238 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index a4e66a7f..7db79961 100644 --- a/README.md +++ b/README.md @@ -42,36 +42,49 @@ See the [adapter list](docs/guide/en/adapter-list.md) and follow the adapter-spe > In this mode messages are processed immediately in the same process, so it won't provide true > async execution, but the code stays the same when you switch to a real adapter. -### 2. Configure the queue +### 2. Prepare a message and handler -#### Configuration with [yiisoft/config](https://github.com/yiisoft/config) - -**If you use [yiisoft/app](https://github.com/yiisoft/app) or [yiisoft/app-api](https://github.com/yiisoft/app-api)** - -Add queue configuration to your application `$params` config. In [yiisoft/app](https://github.com/yiisoft/app)/[yiisoft/app-api](https://github.com/yiisoft/app-api) templates it's typically the `config/params.php` file. -_If your project structure differs, put it into any params config file that is loaded by [yiisoft/config](https://github.com/yiisoft/config)._ - -Minimal configuration example: +Define a message class for the work to be done — a simple value object with typed properties: ```php -return [ - 'yiisoft/queue' => [ - 'handlers' => [ - 'message-type' => [FooHandler::class, 'handle'], - ], - ], -]; -``` +use Yiisoft\Queue\Message\Message; -[Advanced configuration with `yiisoft/config`](docs/guide/en/configuration-with-config.md) +final class DownloadFileMessage extends Message +{ + public const TYPE = 'download-file'; -#### Manual configuration + public function __construct( + public readonly string $url, + public readonly string $destinationPath, + ) {} -For setting up all classes manually, see the [Manual configuration](docs/guide/en/configuration-manual.md) guide. + public static function fromData(string $type, mixed $data): static + { + if ($type !== self::TYPE) { + throw new \InvalidArgumentException("Expected type \"" . self::TYPE . "\", got \"$type\"."); + } + if (!is_array($data) + || !is_string($data['url'] ?? null) + || !is_string($data['destinationPath'] ?? null) + ) { + throw new \InvalidArgumentException('Invalid data for ' . self::class . '.'); + } + return new self($data['url'], $data['destinationPath']); + } -### 3. Prepare a handler + public function getType(): string + { + return self::TYPE; + } -You need to create a handler class that will process the queue messages. The most simple way is to implement the `MessageHandlerInterface`. Let's create an example for remote file processing: + public function getData(): array + { + return ['url' => $this->url, 'destinationPath' => $this->destinationPath]; + } +} +``` + +Then create a handler that processes it: ```php use Yiisoft\Queue\Message\MessageInterface; @@ -79,39 +92,61 @@ use Yiisoft\Queue\Message\MessageHandlerInterface; final readonly class RemoteFileHandler implements MessageHandlerInterface { - // These dependencies will be resolved on handler creation by the DI container public function __construct( private FileDownloader $downloader, private FileProcessor $processor, ) {} - // Every received message will be processed by this method - public function handle(MessageInterface $downloadMessage): void + public function handle(MessageInterface $message): void { - $url = $downloadMessage->getData()['url']; - $localPath = $this->downloader->download($url); + assert($message instanceof DownloadFileMessage); + $localPath = $this->downloader->download($message->url, $message->destinationPath); $this->processor->process($localPath); } } ``` -### 4. Send (produce/push) a message to a queue +### 3. Configure the queue + +#### Configuration with [yiisoft/config](https://github.com/yiisoft/config) + +**If you use [yiisoft/app](https://github.com/yiisoft/app) or [yiisoft/app-api](https://github.com/yiisoft/app-api)** + +Add queue configuration to your application `$params` config. In [yiisoft/app](https://github.com/yiisoft/app)/[yiisoft/app-api](https://github.com/yiisoft/app-api) templates it's typically the `config/params.php` file. +_If your project structure differs, put it into any params config file that is loaded by [yiisoft/config](https://github.com/yiisoft/config)._ -To send a message to the queue, you need to get the queue instance and call the `push()` method. Typically, with Yii Framework you'll get a `Queue` instance as a dependency of a service. +Minimal configuration example: ```php +return [ + 'yiisoft/queue' => [ + 'handlers' => [ + DownloadFileMessage::TYPE => RemoteFileHandler::class, + ], + ], +]; +``` + +[Advanced configuration with `yiisoft/config`](docs/guide/en/configuration-with-config.md) + +#### Manual configuration -final readonly class Foo { +For setting up all classes manually, see the [Manual configuration](docs/guide/en/configuration-manual.md) guide. + +### 4. Send (produce/push) a message to a queue + +To send a message to the queue, get the queue instance and call `push()`. Typically the queue is injected as a dependency: + +```php +final readonly class Foo +{ public function __construct(private QueueInterface $queue) {} public function bar(): void { - $this->queue->push(new Message( - // The first parameter is the message type used to resolve the handler which will process the message - RemoteFileHandler::class, - // The second parameter is the data that will be passed to the handler. - // It should be serializable to JSON format - ['url' => 'https://example.com/file-path.csv'], + $this->queue->push(new DownloadFileMessage( + url: 'https://example.com/file-path.csv', + destinationPath: '/tmp/file-path.csv', )); } } diff --git a/docs/guide/en/configuration-manual.md b/docs/guide/en/configuration-manual.md index 7d9f0842..181874e7 100644 --- a/docs/guide/en/configuration-manual.md +++ b/docs/guide/en/configuration-manual.md @@ -35,8 +35,7 @@ $logger = new NullLogger(); // replace with your PSR-3 logger in production // Define message handlers $handlers = [ - 'file-download' => [FileDownloader::class, 'handle'], - FileDownloader::class => [FileDownloader::class, 'handle'], + DownloadFileMessage::TYPE => [FileDownloader::class, 'handle'], ]; $callableFactory = new CallableFactory($container); @@ -79,7 +78,7 @@ $queue = new Queue( ); // Now you can push messages -$message = new \Yiisoft\Queue\Message\GenericMessage('file-download', ['url' => 'https://example.com/file.pdf']); +$message = new DownloadFileMessage(url: 'https://example.com/file.pdf', destinationPath: '/tmp/file.pdf'); $queue->push($message); ``` diff --git a/docs/guide/en/message-handler-advanced.md b/docs/guide/en/message-handler-advanced.md index fdcee6d7..93780cd7 100644 --- a/docs/guide/en/message-handler-advanced.md +++ b/docs/guide/en/message-handler-advanced.md @@ -14,12 +14,51 @@ Handler definitions are configured in: ### Handlers mapped by short message type -Use a short stable message type when pushing a `Message` instead of a PHP class name: +Use a short stable message type instead of a PHP class name. Define a dedicated message class where `getType()` returns that type: ```php -use Yiisoft\Queue\Message\GenericMessage; +use Yiisoft\Queue\Message\Message; + +final class SendEmailMessage extends Message +{ + public const TYPE = 'send-email'; + + public function __construct( + public readonly string $to, + public readonly string $subject, + public readonly string $body, + ) {} + + public static function fromData(string $type, mixed $data): static + { + if ($type !== self::TYPE) { + throw new \InvalidArgumentException("Expected type \"" . self::TYPE . "\", got \"$type\"."); + } + if (!is_array($data) + || !is_string($data['to'] ?? null) + || !is_string($data['subject'] ?? null) + || !is_string($data['body'] ?? null) + ) { + throw new \InvalidArgumentException('Invalid data for ' . self::class . '.'); + } + return new self($data['to'], $data['subject'], $data['body']); + } + + public function getType(): string + { + return self::TYPE; + } + + public function getData(): array + { + return ['to' => $this->to, 'subject' => $this->subject, 'body' => $this->body]; + } +} +``` -new GenericMessage('send-email', ['data' => '...']); // "send-email" is the message type here +```php +new SendEmailMessage('user@example.com', 'Welcome', 'Thank you for registering.'); +// getType() returns "send-email" — used by the worker to look up the handler ``` **Config**: diff --git a/docs/guide/en/message-handler.md b/docs/guide/en/message-handler.md index ff492119..13736965 100644 --- a/docs/guide/en/message-handler.md +++ b/docs/guide/en/message-handler.md @@ -13,7 +13,34 @@ If your handler implements `Yiisoft\Queue\Message\MessageHandlerInterface`, you **Message**: ```php -new \Yiisoft\Queue\Message\GenericMessage(\App\Queue\RemoteFileHandler::class, ['url' => '...']); +use Yiisoft\Queue\Message\Message; + +final class RemoteFileMessage extends Message +{ + public function __construct(public readonly string $url) {} + + public static function fromData(string $type, mixed $data): static + { + if (!is_array($data) || !is_string($data['url'] ?? null)) { + throw new \InvalidArgumentException('Invalid data for ' . self::class . '.'); + } + return new self($data['url']); + } + + public function getType(): string + { + return \App\Queue\RemoteFileHandler::class; + } + + public function getData(): array + { + return ['url' => $this->url]; + } +} +``` + +```php +new RemoteFileMessage('https://...'); ``` **Handler**: diff --git a/docs/guide/en/messages-and-handlers.md b/docs/guide/en/messages-and-handlers.md index 8bc412dc..f03941ba 100644 --- a/docs/guide/en/messages-and-handlers.md +++ b/docs/guide/en/messages-and-handlers.md @@ -12,10 +12,10 @@ This separation is intentional and important. Understanding it will save you fro A *producer* creates messages and pushes them onto the queue. A *consumer* (worker) pulls messages from the queue and invokes the matching handler. ``` -Producer side Consumer side -───────────────────────────── ────────────────────────────────── -new Message('send-email', …) →→→ Worker resolves handler → handles - (payload only) (logic only) +Producer side Consumer side +────────────────────────────── ────────────────────────────────── +new SendEmailMessage(…) →→→ Worker resolves handler → handles + (payload only) (logic only) ``` The producer only needs to know the message type and its data. It does not need to know anything about how the message will be processed, or even in which application. @@ -30,21 +30,61 @@ This means the producer and consumer can be: ## Message: payload only -A message carries just enough data to perform the work: +A message carries just enough data to perform the work. Defining a dedicated class for each message type makes your code +self-documenting and type-safe: ```php -new \Yiisoft\Queue\Message\GenericMessage('send-email', [ - 'to' => 'user@example.com', - 'subject' => 'Welcome', -]); +use Yiisoft\Queue\Message\Message; + +final class SendEmailMessage extends Message +{ + public const TYPE = 'send-email'; + + public function __construct( + public readonly string $to, + public readonly string $subject, + public readonly string $body, + ) {} + + public static function fromData(string $type, mixed $data): static + { + if ($type !== self::TYPE) { + throw new \InvalidArgumentException("Expected type \"" . self::TYPE . "\", got \"$type\"."); + } + if (!is_array($data) + || !is_string($data['to'] ?? null) + || !is_string($data['subject'] ?? null) + || !is_string($data['body'] ?? null) + ) { + throw new \InvalidArgumentException('Invalid data for ' . self::class . '.'); + } + return new self($data['to'], $data['subject'], $data['body']); + } + + public function getType(): string + { + return self::TYPE; + } + + public function getData(): array + { + return ['to' => $this->to, 'subject' => $this->subject, 'body' => $this->body]; + } +} +``` + +Usage: + +```php +new SendEmailMessage('user@example.com', 'Welcome', 'Thank you for registering.'); ``` The message has: - A **message type** — a string used by the worker to look up the correct handler. -- A **data payload** — arbitrary data the handler needs. Must be serializable. +- A **data payload** — typed properties serialized to JSON via `getData()`. Must be JSON-encodable. -The message has no methods, no business logic, no dependencies. It is a value object — a data wrapper. +The message has no business logic, no dependencies. It is a value object — a typed data wrapper. ## Handler: logic only @@ -57,8 +97,8 @@ final class SendEmailHandler implements \Yiisoft\Queue\Message\MessageHandlerInt public function handle(\Yiisoft\Queue\Message\MessageInterface $message): void { - $data = $message->getData(); - $this->mailer->send($data['to'], $data['subject']); + assert($message instanceof SendEmailMessage); + $this->mailer->send($message->to, $message->subject, $message->body); } } ``` diff --git a/docs/guide/en/queue-names.md b/docs/guide/en/queue-names.md index 0d96fd7a..478f0dba 100644 --- a/docs/guide/en/queue-names.md +++ b/docs/guide/en/queue-names.md @@ -68,7 +68,6 @@ Pushing a message via DI: ```php use Yiisoft\Queue\QueueInterface; -use Yiisoft\Queue\Message\GenericMessage; final readonly class SendWelcomeEmail { @@ -78,7 +77,7 @@ final readonly class SendWelcomeEmail public function run(string $email): void { - $this->queue->push(new GenericMessage('send-email', ['to' => $email])); + $this->queue->push(new SendEmailMessage(to: $email, subject: 'Welcome!', body: 'Thank you for registering.')); } } ``` @@ -105,7 +104,6 @@ If you have multiple queue names, inject `QueueProviderInterface` and call `get( ```php use Yiisoft\Queue\Provider\QueueProviderInterface; -use Yiisoft\Queue\Message\GenericMessage; final readonly class SendTransactionalEmail { @@ -117,7 +115,7 @@ final readonly class SendTransactionalEmail { $this->queueProvider ->get('emails') - ->push(new GenericMessage('send-email', ['to' => $email])); + ->push(new SendEmailMessage(to: $email, subject: 'Welcome!', body: 'Thank you for registering.')); } } ``` diff --git a/docs/guide/en/usage.md b/docs/guide/en/usage.md index b1d9893f..229c08bb 100644 --- a/docs/guide/en/usage.md +++ b/docs/guide/en/usage.md @@ -2,13 +2,48 @@ ## Usage -For example, if you need to download and save a file, you can create a message like this: +For example, if you need to download and save a file, define a message class and push it: ```php -$message = new \Yiisoft\Queue\Message\GenericMessage( - RemoteFileHandler::class, - ['url' => $url, 'destinationFile' => $filename] -); +use Yiisoft\Queue\Message\Message; + +final class DownloadFileMessage extends Message +{ + public const TYPE = 'download-file'; + + public function __construct( + public readonly string $url, + public readonly string $destinationPath, + ) {} + + public static function fromData(string $type, mixed $data): static + { + if ($type !== self::TYPE) { + throw new \InvalidArgumentException("Expected type \"" . self::TYPE . "\", got \"$type\"."); + } + if (!is_array($data) + || !is_string($data['url'] ?? null) + || !is_string($data['destinationPath'] ?? null) + ) { + throw new \InvalidArgumentException('Invalid data for ' . self::class . '.'); + } + return new self($data['url'], $data['destinationPath']); + } + + public function getType(): string + { + return self::TYPE; + } + + public function getData(): array + { + return ['url' => $this->url, 'destinationPath' => $this->destinationPath]; + } +} +``` + +```php +$message = new DownloadFileMessage(url: $url, destinationPath: $filename); ``` Here's how to push a message to the queue: From 740982c4f8becadf889ff153773e996d468204ef Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 20:46:31 +0300 Subject: [PATCH 06/12] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- tests/Integration/MiddlewareTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Integration/MiddlewareTest.php b/tests/Integration/MiddlewareTest.php index 447911b6..7e5da8f5 100644 --- a/tests/Integration/MiddlewareTest.php +++ b/tests/Integration/MiddlewareTest.php @@ -124,7 +124,7 @@ public function testFullStackFailure(): void $exception = new InvalidArgumentException('test'); $this->expectExceptionObject($exception); - $message = new GenericMessage('simple', null, []); + $message = new GenericMessage('simple', null); $queueCallback = static fn(MessageInterface $message): MessageInterface => $message; $queue = $this->createMock(QueueInterface::class); $container = new SimpleContainer([SendAgainMiddleware::class => new SendAgainMiddleware('test-container', 1, $queue)]); From 8988c517ba4f0557d1b251c594ed42a2cb7371f9 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 28 May 2026 20:48:22 +0300 Subject: [PATCH 07/12] fix --- tests/Unit/Support/TestMessage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Support/TestMessage.php b/tests/Unit/Support/TestMessage.php index 05362e7b..14ea66cf 100644 --- a/tests/Unit/Support/TestMessage.php +++ b/tests/Unit/Support/TestMessage.php @@ -9,7 +9,7 @@ final class TestMessage extends Message { - public static function fromData(string $type, mixed $data, array $metadata = []): MessageInterface + public static function fromData(string $type, mixed $data): MessageInterface { return new self(); } From 42c708237c6893c2eabd6c9431fc9d4571bff6c6 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 29 May 2026 15:36:03 +0300 Subject: [PATCH 08/12] Update docs/guide/en/message-handler-advanced.md Co-authored-by: Alexander Makarov --- docs/guide/en/message-handler-advanced.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/guide/en/message-handler-advanced.md b/docs/guide/en/message-handler-advanced.md index 93780cd7..02a9486b 100644 --- a/docs/guide/en/message-handler-advanced.md +++ b/docs/guide/en/message-handler-advanced.md @@ -14,7 +14,8 @@ Handler definitions are configured in: ### Handlers mapped by short message type -Use a short stable message type instead of a PHP class name. Define a dedicated message class where `getType()` returns that type: +Use a short stable message type instead of a PHP class name. That decoupling would allow you to refactor the code and handle the message with external handler. +Define a dedicated message class where `getType()` returns that type: ```php use Yiisoft\Queue\Message\Message; From 8f6945050b7ccd6fbdbe63e6db23059b564b93aa Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 29 May 2026 15:36:22 +0300 Subject: [PATCH 09/12] Update docs/guide/en/messages-and-handlers.md Co-authored-by: Alexander Makarov --- docs/guide/en/messages-and-handlers.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/guide/en/messages-and-handlers.md b/docs/guide/en/messages-and-handlers.md index f03941ba..4e0d860f 100644 --- a/docs/guide/en/messages-and-handlers.md +++ b/docs/guide/en/messages-and-handlers.md @@ -30,7 +30,8 @@ This means the producer and consumer can be: ## Message: payload only -A message carries just enough data to perform the work. Defining a dedicated class for each message type makes your code +A message carries just enough data to perform the work. Usually data has some parameters but not the full context to process. Getting full context is better to be moved to the handler unless processing is done in another application that doesn't have access to data storage. +Defining a dedicated class for each message type makes your code self-documenting and type-safe: ```php From 4d3baaa616968984ce29e84d5797e4be3f990788 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 29 May 2026 16:22:01 +0300 Subject: [PATCH 10/12] `GenericMessage` phpdoc --- src/Message/GenericMessage.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Message/GenericMessage.php b/src/Message/GenericMessage.php index f55c5287..bcbb17b1 100644 --- a/src/Message/GenericMessage.php +++ b/src/Message/GenericMessage.php @@ -4,27 +4,46 @@ namespace Yiisoft\Queue\Message; +/** + * A general-purpose immutable {@see MessageInterface} implementation that holds a message type and its payload data. + * + * Prefer creating custom message classes that better express your domain. + */ final class GenericMessage extends Message { /** * @param string $type A message type used to resolve the handler. - * @param mixed $data Message data, encodable by a queue adapter + * @param mixed $data Message payload data. */ public function __construct( private readonly string $type, private readonly mixed $data, ) {} + /** + * Creates a new message instance from the given type and payload data. + * + * @param string $type A message type used to resolve the handler. + * @param mixed $data Message payload data. + * + * @return MessageInterface The created message instance. + */ public static function fromData(string $type, mixed $data): MessageInterface { return new self($type, $data); } + /** + * Returns the message type used to resolve the handler. + */ public function getType(): string { return $this->type; } + /** + * Returns the message payload data. + */ public function getData(): mixed { return $this->data; From 614d8cf48e9a1179ba2a5cbcaad8e0b59386195e Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 29 May 2026 16:23:29 +0300 Subject: [PATCH 11/12] fix test --- tests/Unit/Message/DelayEnvelopeTest.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Unit/Message/DelayEnvelopeTest.php b/tests/Unit/Message/DelayEnvelopeTest.php index f82710fa..4aa37649 100644 --- a/tests/Unit/Message/DelayEnvelopeTest.php +++ b/tests/Unit/Message/DelayEnvelopeTest.php @@ -27,8 +27,10 @@ public function testDelayEnvelope(): void public function testFromMessage(): void { - $message = (new GenericMessage('test', ['data' => 'value']))->withMetadata([DelayEnvelope::META_DELAY_SECONDS => 150]); - $delayEnvelope = DelayEnvelope::fromMessage($message); + $delayEnvelope = DelayEnvelope::fromMessage( + (new GenericMessage('test', ['data' => 'value'])) + ->withMetadata([DelayEnvelope::META_DELAY_SECONDS => 150]) + ); self::assertSame(150.0, $delayEnvelope->getDelaySeconds()); self::assertSame('test', $delayEnvelope->getType()); From 07e2f83cbcc12d3f88214222c846a2474bf7fe96 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Fri, 29 May 2026 22:35:24 +0300 Subject: [PATCH 12/12] use mermaid --- docs/guide/en/messages-and-handlers.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/guide/en/messages-and-handlers.md b/docs/guide/en/messages-and-handlers.md index 4e0d860f..54dcae2f 100644 --- a/docs/guide/en/messages-and-handlers.md +++ b/docs/guide/en/messages-and-handlers.md @@ -11,11 +11,18 @@ This separation is intentional and important. Understanding it will save you fro A *producer* creates messages and pushes them onto the queue. A *consumer* (worker) pulls messages from the queue and invokes the matching handler. -``` -Producer side Consumer side -────────────────────────────── ────────────────────────────────── -new SendEmailMessage(…) →→→ Worker resolves handler → handles - (payload only) (logic only) +```mermaid +flowchart LR + subgraph Producer["Producer side"] + Message["new SendEmailMessage(...)\n(payload only)"] + end + + subgraph Consumer["Consumer side"] + Worker["Worker resolves handler"] + Handler["Handler handles\n(logic only)"] + end + + Message --> Worker --> Handler ``` The producer only needs to know the message type and its data. It does not need to know anything about how the message will be processed, or even in which application.