From 958ec100f91efffae523eaa923e310e7f822dfcc Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sat, 18 Apr 2026 20:59:49 +0300 Subject: [PATCH 1/2] Remove adapter from `PushRequest` --- src/Middleware/Push/AdapterPushHandler.php | 8 ++++++- src/Middleware/Push/PushRequest.php | 22 +++---------------- src/Queue.php | 4 ++-- .../Push/AdapterPushHandlerTest.php | 4 ++-- .../Push/Implementation/IdMiddlewareTest.php | 5 ++--- .../Push/MiddlewareDispatcherTest.php | 19 +++------------- .../Middleware/Push/MiddlewareFactoryTest.php | 4 ++-- .../Unit/Middleware/Push/PushRequestTest.php | 4 +--- 8 files changed, 22 insertions(+), 48 deletions(-) diff --git a/src/Middleware/Push/AdapterPushHandler.php b/src/Middleware/Push/AdapterPushHandler.php index cfb07fa6..2ea4af32 100644 --- a/src/Middleware/Push/AdapterPushHandler.php +++ b/src/Middleware/Push/AdapterPushHandler.php @@ -4,15 +4,21 @@ namespace Yiisoft\Queue\Middleware\Push; +use Yiisoft\Queue\Adapter\AdapterInterface; + /** * @internal */ final class AdapterPushHandler implements MessageHandlerPushInterface { + public function __construct( + private readonly AdapterInterface $adapter, + ) {} + public function handlePush(PushRequest $request): PushRequest { return $request->withMessage( - $request->getAdapter()->push( + $this->adapter->push( $request->getMessage(), ), ); diff --git a/src/Middleware/Push/PushRequest.php b/src/Middleware/Push/PushRequest.php index 88786876..388a369c 100644 --- a/src/Middleware/Push/PushRequest.php +++ b/src/Middleware/Push/PushRequest.php @@ -4,14 +4,12 @@ namespace Yiisoft\Queue\Middleware\Push; -use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\Message\MessageInterface; final class PushRequest { public function __construct( private MessageInterface $message, - private AdapterInterface $adapter, ) {} public function getMessage(): MessageInterface @@ -19,24 +17,10 @@ public function getMessage(): MessageInterface return $this->message; } - public function getAdapter(): AdapterInterface - { - return $this->adapter; - } - public function withMessage(MessageInterface $message): self { - $instance = clone $this; - $instance->message = $message; - - return $instance; - } - - public function withAdapter(AdapterInterface $adapter): self - { - $instance = clone $this; - $instance->adapter = $adapter; - - return $instance; + $new = clone $this; + $new->message = $message; + return $new; } } diff --git a/src/Queue.php b/src/Queue.php index b3507557..9d447ee7 100644 --- a/src/Queue.php +++ b/src/Queue.php @@ -38,7 +38,7 @@ public function __construct( ) { $this->name = StringNormalizer::normalize($name); $this->middlewareDefinitions = $middlewareDefinitions; - $this->adapterPushHandler = new AdapterPushHandler(); + $this->adapterPushHandler = new AdapterPushHandler($this->adapter); } public function getName(): string @@ -55,7 +55,7 @@ public function push( ['handlerName' => $message->getHandlerName()], ); - $request = new PushRequest($message, $this->adapter); + $request = new PushRequest($message); $message = $this->pushMiddlewareDispatcher ->dispatch($request, $this->createPushHandler(...$middlewareDefinitions)) ->getMessage(); diff --git a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php index db2158ea..daa8672c 100644 --- a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php +++ b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php @@ -14,10 +14,10 @@ final class AdapterPushHandlerTest extends TestCase { public function testHandlePushUsesAdapter(): void { - $handler = new AdapterPushHandler(); $adapter = new FakeAdapter(); + $handler = new AdapterPushHandler($adapter); $message = new Message('handler', 'data'); - $request = new PushRequest($message, $adapter); + $request = new PushRequest($message); $result = $handler->handlePush($request); diff --git a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php index 071b8892..a3fdf6f6 100644 --- a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php +++ b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php @@ -10,14 +10,13 @@ use Yiisoft\Queue\Middleware\Push\Implementation\IdMiddleware; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\PushRequest; -use Yiisoft\Queue\Stubs\StubAdapter; final class IdMiddlewareTest extends TestCase { public function testWithId(): void { $message = new Message('test', null, [IdEnvelope::MESSAGE_ID_KEY => 'test-id']); - $originalRequest = new PushRequest($message, new StubAdapter()); + $originalRequest = new PushRequest($message); $handler = $this->createMock(MessageHandlerPushInterface::class); $handler->expects($this->once()) @@ -37,7 +36,7 @@ public function testWithId(): void public function testWithoutId(): void { $message = new Message('test', null); - $originalRequest = new PushRequest($message, new StubAdapter()); + $originalRequest = new PushRequest($message); $handler = $this->createMock(MessageHandlerPushInterface::class); $handler->expects($this->once()) diff --git a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php index 301540a3..c7e436a8 100644 --- a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php @@ -27,22 +27,14 @@ public function testCallableMiddlewareCalled(): void $dispatcher = $this->createDispatcher()->withMiddlewares( [ - static function (PushRequest $request, AdapterInterface $adapter): PushRequest { - /** @var FakeAdapter $adapter */ - return $request - ->withMessage(new Message('test', 'New closure test data')) - ->withAdapter($adapter->withChannel('closure-channel')); + static function (PushRequest $request): PushRequest { + return $request->withMessage(new Message('test', 'New closure test data')); }, ], ); $request = $dispatcher->dispatch($request, $this->getRequestHandler()); $this->assertSame('New closure test data', $request->getMessage()->getData()); - /** - * @psalm-suppress NoInterfaceProperties - * @psalm-suppress PossiblyNullPropertyFetch - */ - $this->assertSame('closure-channel', $request->getAdapter()->channel); } public function testArrayMiddlewareCallableDefinition(): void @@ -81,10 +73,6 @@ public function testMiddlewareFullStackCalled(): void return $handler->handlePush($request); }; $middleware2 = static function (PushRequest $request, MessageHandlerPushInterface $handler): PushRequest { - /** @var FakeAdapter $adapter */ - $adapter = $request->getAdapter(); - $request = $request->withAdapter($adapter->withChannel('new channel')); - return $handler->handlePush($request); }; @@ -92,7 +80,6 @@ public function testMiddlewareFullStackCalled(): void $request = $dispatcher->dispatch($request, $this->getRequestHandler()); $this->assertSame('new test data', $request->getMessage()->getData()); - $this->assertSame('new channel', $request->getAdapter()->channel); } public function testMiddlewareStackInterrupted(): void @@ -180,6 +167,6 @@ private function createContainer(array $instances = []): ContainerInterface private function getPushRequest(): PushRequest { - return new PushRequest(new Message('handler', 'data'), new FakeAdapter()); + return new PushRequest(new Message('handler', 'data')); } } diff --git a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php index c5cfcede..4b702eee 100644 --- a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php @@ -49,7 +49,7 @@ public function testCreateFromClosureResponse(): void $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createPushMiddleware( static function (): PushRequest { - return new PushRequest(new Message('test', 'test data'), new FakeAdapter()); + return new PushRequest(new Message('test', 'test data')); }, ); self::assertSame( @@ -166,6 +166,6 @@ public function handlePush(PushRequest $request): PushRequest private function getPushRequest(): PushRequest { - return new PushRequest(new Message('handler', 'data'), new FakeAdapter()); + return new PushRequest(new Message('handler', 'data')); } } diff --git a/tests/Unit/Middleware/Push/PushRequestTest.php b/tests/Unit/Middleware/Push/PushRequestTest.php index 2c1533e5..a3b84879 100644 --- a/tests/Unit/Middleware/Push/PushRequestTest.php +++ b/tests/Unit/Middleware/Push/PushRequestTest.php @@ -6,7 +6,6 @@ use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Middleware\Push\PushRequest; -use Yiisoft\Queue\Tests\App\FakeAdapter; use Yiisoft\Queue\Tests\TestCase; final class PushRequestTest extends TestCase @@ -14,9 +13,8 @@ final class PushRequestTest extends TestCase public function testImmutable(): void { $message = new Message('test', 'test'); - $pushRequest = new PushRequest($message, new FakeAdapter()); + $pushRequest = new PushRequest($message); - $this->assertNotSame($pushRequest, $pushRequest->withAdapter(new FakeAdapter())); $this->assertNotSame($pushRequest, $pushRequest->withMessage($message)); } } From 221018ea2d8be4f35b11961b3d1e7caa3162cca2 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sat, 18 Apr 2026 21:20:23 +0300 Subject: [PATCH 2/2] Remove `PushRequest` --- src/Middleware/Push/AdapterPushHandler.php | 9 +-- .../Push/Implementation/IdMiddleware.php | 12 ++-- .../Push/MessageHandlerPushInterface.php | 4 +- src/Middleware/Push/MiddlewareFactoryPush.php | 17 ++--- .../Push/MiddlewarePushInterface.php | 4 +- src/Middleware/Push/MiddlewarePushStack.php | 9 +-- .../Push/PushMiddlewareDispatcher.php | 11 ++-- src/Middleware/Push/PushRequest.php | 26 -------- src/Queue.php | 13 ++-- tests/Integration/Support/TestMiddleware.php | 8 +-- .../Push/AdapterPushHandlerTest.php | 6 +- .../Push/Implementation/IdMiddlewareTest.php | 27 ++++---- .../Push/MiddlewareDispatcherTest.php | 66 +++++++++---------- .../Middleware/Push/MiddlewareFactoryTest.php | 37 +++++------ .../Unit/Middleware/Push/PushRequestTest.php | 20 ------ .../Push/Support/TestCallableMiddleware.php | 6 +- .../Push/Support/TestMiddleware.php | 6 +- 17 files changed, 114 insertions(+), 167 deletions(-) delete mode 100644 src/Middleware/Push/PushRequest.php delete mode 100644 tests/Unit/Middleware/Push/PushRequestTest.php diff --git a/src/Middleware/Push/AdapterPushHandler.php b/src/Middleware/Push/AdapterPushHandler.php index 2ea4af32..c4ebc90c 100644 --- a/src/Middleware/Push/AdapterPushHandler.php +++ b/src/Middleware/Push/AdapterPushHandler.php @@ -5,6 +5,7 @@ namespace Yiisoft\Queue\Middleware\Push; use Yiisoft\Queue\Adapter\AdapterInterface; +use Yiisoft\Queue\Message\MessageInterface; /** * @internal @@ -15,12 +16,8 @@ public function __construct( private readonly AdapterInterface $adapter, ) {} - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { - return $request->withMessage( - $this->adapter->push( - $request->getMessage(), - ), - ); + return $this->adapter->push($message); } } diff --git a/src/Middleware/Push/Implementation/IdMiddleware.php b/src/Middleware/Push/Implementation/IdMiddleware.php index cd086d96..241ab647 100644 --- a/src/Middleware/Push/Implementation/IdMiddleware.php +++ b/src/Middleware/Push/Implementation/IdMiddleware.php @@ -5,22 +5,22 @@ namespace Yiisoft\Queue\Middleware\Push\Implementation; use Yiisoft\Queue\Message\IdEnvelope; -use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; -use Yiisoft\Queue\Middleware\Push\PushRequest; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; +use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; /** * A middleware for message ID setting. */ final class IdMiddleware implements MiddlewarePushInterface { - public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest + public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { - $meta = $request->getMessage()->getMetadata(); + $meta = $message->getMetadata(); if (empty($meta[IdEnvelope::MESSAGE_ID_KEY])) { - $request = $request->withMessage(new IdEnvelope($request->getMessage(), uniqid('yii3-message-', true))); + $message = new IdEnvelope($message, uniqid('yii3-message-', true)); } - return $handler->handlePush($request); + return $handler->handlePush($message); } } diff --git a/src/Middleware/Push/MessageHandlerPushInterface.php b/src/Middleware/Push/MessageHandlerPushInterface.php index 8db45bff..a3c4dfbc 100644 --- a/src/Middleware/Push/MessageHandlerPushInterface.php +++ b/src/Middleware/Push/MessageHandlerPushInterface.php @@ -4,7 +4,9 @@ namespace Yiisoft\Queue\Middleware\Push; +use Yiisoft\Queue\Message\MessageInterface; + interface MessageHandlerPushInterface { - public function handlePush(PushRequest $request): PushRequest; + public function handlePush(MessageInterface $message): MessageInterface; } diff --git a/src/Middleware/Push/MiddlewareFactoryPush.php b/src/Middleware/Push/MiddlewareFactoryPush.php index 0cb151fc..19e5da12 100644 --- a/src/Middleware/Push/MiddlewareFactoryPush.php +++ b/src/Middleware/Push/MiddlewareFactoryPush.php @@ -10,6 +10,7 @@ use Yiisoft\Definitions\Exception\InvalidConfigException; use Yiisoft\Definitions\Helpers\DefinitionValidator; use Yiisoft\Injector\Injector; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\InvalidCallableConfigurationException; use Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException; @@ -36,16 +37,16 @@ public function __construct( * * - A middleware object. * - A name of a middleware class. The middleware instance will be obtained from container and executed. - * - A callable with `function(ServerRequestInterface $request, RequestHandlerInterface $handler): - * ResponseInterface` signature. + * - A callable with `function(MessageInterface $message, MessageHandlerPushInterface $handler): + * MessageInterface` signature. * - A controller handler action in format `[TestController::class, 'index']`. `TestController` instance will * be created and `index()` method will be executed. * - A function returning a middleware. The middleware returned will be executed. * * For handler action and callable * typed parameters are automatically injected using dependency injection container. - * Current request and handler could be obtained by type-hinting for {@see ServerRequestInterface} - * and {@see RequestHandlerInterface}. + * Current message and handler could be obtained by type-hinting for {@see MessageInterface} + * and {@see MessageHandlerPushInterface}. * * @throws InvalidMiddlewareDefinitionException * @@ -96,15 +97,15 @@ public function __construct( $this->callback = $callback; } - public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest + public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { - $response = (new Injector($this->container))->invoke($this->callback, [$request, $handler]); - if ($response instanceof PushRequest) { + $response = (new Injector($this->container))->invoke($this->callback, [$message, $handler]); + if ($response instanceof MessageInterface) { return $response; } if ($response instanceof MiddlewarePushInterface) { - return $response->processPush($request, $handler); + return $response->processPush($message, $handler); } throw new InvalidMiddlewareDefinitionException($this->callback); diff --git a/src/Middleware/Push/MiddlewarePushInterface.php b/src/Middleware/Push/MiddlewarePushInterface.php index 99cc85ca..ee21645a 100644 --- a/src/Middleware/Push/MiddlewarePushInterface.php +++ b/src/Middleware/Push/MiddlewarePushInterface.php @@ -4,7 +4,9 @@ namespace Yiisoft\Queue\Middleware\Push; +use Yiisoft\Queue\Message\MessageInterface; + interface MiddlewarePushInterface { - public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest; + public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface; } diff --git a/src/Middleware/Push/MiddlewarePushStack.php b/src/Middleware/Push/MiddlewarePushStack.php index a72a373e..97972461 100644 --- a/src/Middleware/Push/MiddlewarePushStack.php +++ b/src/Middleware/Push/MiddlewarePushStack.php @@ -5,6 +5,7 @@ namespace Yiisoft\Queue\Middleware\Push; use Closure; +use Yiisoft\Queue\Message\MessageInterface; final class MiddlewarePushStack implements MessageHandlerPushInterface { @@ -26,14 +27,14 @@ public function __construct( private readonly MessageHandlerPushInterface $finishHandler, ) {} - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { if ($this->stack === null) { $this->build(); } /** @psalm-suppress PossiblyNullReference */ - return $this->stack->handlePush($request); + return $this->stack->handlePush($message); } private function build(): void @@ -60,13 +61,13 @@ public function __construct( private readonly MessageHandlerPushInterface $handler, ) {} - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { if ($this->middleware === null) { $this->middleware = ($this->middlewareFactory)(); } - return $this->middleware->processPush($request, $this->handler); + return $this->middleware->processPush($message, $this->handler); } }; } diff --git a/src/Middleware/Push/PushMiddlewareDispatcher.php b/src/Middleware/Push/PushMiddlewareDispatcher.php index 86532550..9a8379a8 100644 --- a/src/Middleware/Push/PushMiddlewareDispatcher.php +++ b/src/Middleware/Push/PushMiddlewareDispatcher.php @@ -5,6 +5,7 @@ namespace Yiisoft\Queue\Middleware\Push; use Closure; +use Yiisoft\Queue\Message\MessageInterface; final class PushMiddlewareDispatcher { @@ -27,20 +28,20 @@ public function __construct( } /** - * Dispatch request through middleware to get response. + * Dispatch message through middleware to get response. * - * @param PushRequest $request Request to pass to middleware. + * @param MessageInterface $message Message to pass to middleware. * @param MessageHandlerPushInterface $finishHandler Handler to use in case no middleware produced a response. */ public function dispatch( - PushRequest $request, + MessageInterface $message, MessageHandlerPushInterface $finishHandler, - ): PushRequest { + ): MessageInterface { if ($this->stack === null) { $this->stack = new MiddlewarePushStack($this->buildMiddlewares(), $finishHandler); } - return $this->stack->handlePush($request); + return $this->stack->handlePush($message); } /** diff --git a/src/Middleware/Push/PushRequest.php b/src/Middleware/Push/PushRequest.php deleted file mode 100644 index 388a369c..00000000 --- a/src/Middleware/Push/PushRequest.php +++ /dev/null @@ -1,26 +0,0 @@ -message; - } - - public function withMessage(MessageInterface $message): self - { - $new = clone $this; - $new->message = $message; - return $new; - } -} diff --git a/src/Queue.php b/src/Queue.php index 9d447ee7..553b4f13 100644 --- a/src/Queue.php +++ b/src/Queue.php @@ -13,7 +13,6 @@ use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; use Yiisoft\Queue\Middleware\Push\PushMiddlewareDispatcher; -use Yiisoft\Queue\Middleware\Push\PushRequest; use Yiisoft\Queue\Worker\WorkerInterface; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Provider\QueueProviderInterface; @@ -55,10 +54,10 @@ public function push( ['handlerName' => $message->getHandlerName()], ); - $request = new PushRequest($message); - $message = $this->pushMiddlewareDispatcher - ->dispatch($request, $this->createPushHandler(...$middlewareDefinitions)) - ->getMessage(); + $message = $this->pushMiddlewareDispatcher->dispatch( + $message, + $this->createPushHandler(...$middlewareDefinitions), + ); /** @var string $messageId */ $messageId = $message->getMetadata()[IdEnvelope::MESSAGE_ID_KEY] ?? 'null'; @@ -145,11 +144,11 @@ public function __construct( private readonly array $middlewares, ) {} - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { return $this->dispatcher ->withMiddlewares($this->middlewares) - ->dispatch($request, $this->adapterPushHandler); + ->dispatch($message, $this->adapterPushHandler); } }; } diff --git a/tests/Integration/Support/TestMiddleware.php b/tests/Integration/Support/TestMiddleware.php index 81f55e4f..1686d8c6 100644 --- a/tests/Integration/Support/TestMiddleware.php +++ b/tests/Integration/Support/TestMiddleware.php @@ -5,25 +5,23 @@ namespace Yiisoft\Queue\Tests\Integration\Support; use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Consume\ConsumeRequest; use Yiisoft\Queue\Middleware\Consume\MessageHandlerConsumeInterface; use Yiisoft\Queue\Middleware\Consume\MiddlewareConsumeInterface; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; -use Yiisoft\Queue\Middleware\Push\PushRequest; final class TestMiddleware implements MiddlewarePushInterface, MiddlewareConsumeInterface { public function __construct(private readonly string $stage) {} - public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest + public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { - $message = $request->getMessage(); $stack = $message->getData(); $stack[] = $this->stage; - $messageNew = new Message($message->getHandlerName(), $stack); - return $handler->handlePush($request->withMessage($messageNew)); + return $handler->handlePush(new Message($message->getHandlerName(), $stack)); } public function processConsume(ConsumeRequest $request, MessageHandlerConsumeInterface $handler): ConsumeRequest diff --git a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php index daa8672c..e22d160c 100644 --- a/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php +++ b/tests/Unit/Middleware/Push/AdapterPushHandlerTest.php @@ -7,7 +7,6 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Middleware\Push\AdapterPushHandler; -use Yiisoft\Queue\Middleware\Push\PushRequest; use Yiisoft\Queue\Tests\App\FakeAdapter; final class AdapterPushHandlerTest extends TestCase @@ -17,11 +16,10 @@ public function testHandlePushUsesAdapter(): void $adapter = new FakeAdapter(); $handler = new AdapterPushHandler($adapter); $message = new Message('handler', 'data'); - $request = new PushRequest($message); - $result = $handler->handlePush($request); + $result = $handler->handlePush($message); - self::assertSame($message, $result->getMessage()); + self::assertSame($message, $result); self::assertSame([$message], $adapter->pushMessages); } } diff --git a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php index a3fdf6f6..febf238f 100644 --- a/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php +++ b/tests/Unit/Middleware/Push/Implementation/IdMiddlewareTest.php @@ -9,14 +9,12 @@ use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Middleware\Push\Implementation\IdMiddleware; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; -use Yiisoft\Queue\Middleware\Push\PushRequest; final class IdMiddlewareTest extends TestCase { public function testWithId(): void { $message = new Message('test', null, [IdEnvelope::MESSAGE_ID_KEY => 'test-id']); - $originalRequest = new PushRequest($message); $handler = $this->createMock(MessageHandlerPushInterface::class); $handler->expects($this->once()) @@ -24,19 +22,18 @@ public function testWithId(): void ->willReturnArgument(0); $middleware = new IdMiddleware(); - $finalRequest = $middleware->processPush($originalRequest, $handler); + $result = $middleware->processPush($message, $handler); - $this->assertSame($originalRequest, $finalRequest); - $this->assertNotInstanceOf(IdEnvelope::class, $finalRequest->getMessage()); - $this->assertEquals('test-id', $finalRequest->getMessage()->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]); - $this->assertSame($originalRequest->getMessage()->getData(), $finalRequest->getMessage()->getData()); - $this->assertSame($originalRequest->getMessage()->getHandlerName(), $finalRequest->getMessage()->getHandlerName()); + $this->assertSame($message, $result); + $this->assertNotInstanceOf(IdEnvelope::class, $result); + $this->assertEquals('test-id', $result->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]); + $this->assertSame($message->getData(), $result->getData()); + $this->assertSame($message->getHandlerName(), $result->getHandlerName()); } public function testWithoutId(): void { $message = new Message('test', null); - $originalRequest = new PushRequest($message); $handler = $this->createMock(MessageHandlerPushInterface::class); $handler->expects($this->once()) @@ -44,12 +41,12 @@ public function testWithoutId(): void ->willReturnArgument(0); $middleware = new IdMiddleware(); - $finalRequest = $middleware->processPush($originalRequest, $handler); + $result = $middleware->processPush($message, $handler); - $this->assertInstanceOf(IdEnvelope::class, $finalRequest->getMessage()); - $this->assertNotSame($originalRequest, $finalRequest); - $this->assertNotEmpty($finalRequest->getMessage()->getMetadata()[IdEnvelope::MESSAGE_ID_KEY] ?? null); - $this->assertSame($originalRequest->getMessage()->getData(), $finalRequest->getMessage()->getData()); - $this->assertSame($originalRequest->getMessage()->getHandlerName(), $finalRequest->getMessage()->getHandlerName()); + $this->assertInstanceOf(IdEnvelope::class, $result); + $this->assertNotSame($message, $result); + $this->assertNotEmpty($result->getMetadata()[IdEnvelope::MESSAGE_ID_KEY] ?? null); + $this->assertSame($message->getData(), $result->getData()); + $this->assertSame($message->getHandlerName(), $result->getHandlerName()); } } diff --git a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php index c7e436a8..0dafe901 100644 --- a/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareDispatcherTest.php @@ -10,11 +10,11 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewareFactoryPush; use Yiisoft\Queue\Middleware\Push\PushMiddlewareDispatcher; -use Yiisoft\Queue\Middleware\Push\PushRequest; use Yiisoft\Queue\Tests\App\FakeAdapter; use Yiisoft\Queue\Tests\Unit\Middleware\Push\Support\TestCallableMiddleware; use Yiisoft\Queue\Tests\Unit\Middleware\Push\Support\TestMiddleware; @@ -23,76 +23,74 @@ final class MiddlewareDispatcherTest extends TestCase { public function testCallableMiddlewareCalled(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); $dispatcher = $this->createDispatcher()->withMiddlewares( [ - static function (PushRequest $request): PushRequest { - return $request->withMessage(new Message('test', 'New closure test data')); + static function (MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { + return new Message('test', 'New closure test data'); }, ], ); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); - $this->assertSame('New closure test data', $request->getMessage()->getData()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); + $this->assertSame('New closure test data', $result->getData()); } public function testArrayMiddlewareCallableDefinition(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); $container = $this->createContainer( [ TestCallableMiddleware::class => new TestCallableMiddleware(), ], ); $dispatcher = $this->createDispatcher($container)->withMiddlewares([[TestCallableMiddleware::class, 'index']]); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); - $this->assertSame('New test data', $request->getMessage()->getData()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); + $this->assertSame('New test data', $result->getData()); } public function testFactoryArrayDefinition(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); $container = $this->createContainer(); $definition = [ 'class' => TestMiddleware::class, '__construct()' => ['message' => 'New test data from the definition'], ]; $dispatcher = $this->createDispatcher($container)->withMiddlewares([$definition]); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); - $this->assertSame('New test data from the definition', $request->getMessage()->getData()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); + $this->assertSame('New test data from the definition', $result->getData()); } public function testMiddlewareFullStackCalled(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); - $middleware1 = static function (PushRequest $request, MessageHandlerPushInterface $handler): PushRequest { - $request = $request->withMessage(new Message($request->getMessage()->getHandlerName(), 'new test data')); - - return $handler->handlePush($request); + $middleware1 = static function (MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { + return $handler->handlePush(new Message($message->getHandlerName(), 'new test data')); }; - $middleware2 = static function (PushRequest $request, MessageHandlerPushInterface $handler): PushRequest { - return $handler->handlePush($request); + $middleware2 = static function (MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { + return $handler->handlePush($message); }; $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); - $this->assertSame('new test data', $request->getMessage()->getData()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); + $this->assertSame('new test data', $result->getData()); } public function testMiddlewareStackInterrupted(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); - $middleware1 = static fn(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest => $request->withMessage(new Message($request->getMessage()->getHandlerName(), 'first')); - $middleware2 = static fn(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest => $request->withMessage(new Message($request->getMessage()->getHandlerName(), 'second')); + $middleware1 = static fn(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface => new Message($message->getHandlerName(), 'first'); + $middleware2 = static fn(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface => new Message($message->getHandlerName(), 'second'); $dispatcher = $this->createDispatcher()->withMiddlewares([$middleware1, $middleware2]); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); - $this->assertSame('first', $request->getMessage()->getData()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); + $this->assertSame('first', $result->getData()); } public static function dataHasMiddlewares(): array @@ -120,7 +118,7 @@ public function testImmutability(): void public function testResetStackOnWithMiddlewares(): void { - $request = $this->getPushRequest(); + $message = $this->getMessage(); $container = $this->createContainer( [ TestCallableMiddleware::class => new TestCallableMiddleware(), @@ -131,20 +129,20 @@ public function testResetStackOnWithMiddlewares(): void $dispatcher = $this ->createDispatcher($container) ->withMiddlewares([[TestCallableMiddleware::class, 'index']]); - $dispatcher->dispatch($request, $this->getRequestHandler()); + $dispatcher->dispatch($message, $this->getRequestHandler()); $dispatcher = $dispatcher->withMiddlewares([TestMiddleware::class]); - $request = $dispatcher->dispatch($request, $this->getRequestHandler()); + $result = $dispatcher->dispatch($message, $this->getRequestHandler()); - self::assertSame('New middleware test data', $request->getMessage()->getData()); + self::assertSame('New middleware test data', $result->getData()); } private function getRequestHandler(): MessageHandlerPushInterface { return new class implements MessageHandlerPushInterface { - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { - return $request; + return $message; } }; } @@ -165,8 +163,8 @@ private function createContainer(array $instances = []): ContainerInterface return new SimpleContainer($instances); } - private function getPushRequest(): PushRequest + private function getMessage(): MessageInterface { - return new PushRequest(new Message('handler', 'data')); + return new Message('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php index 4b702eee..dfa81afd 100644 --- a/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php +++ b/tests/Unit/Middleware/Push/MiddlewareFactoryTest.php @@ -10,13 +10,13 @@ use Yiisoft\Test\Support\Container\SimpleContainer; use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\CallableFactory; use Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewareFactoryPush; use Yiisoft\Queue\Middleware\Push\MiddlewareFactoryPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; -use Yiisoft\Queue\Middleware\Push\PushRequest; use Yiisoft\Queue\Tests\App\FakeAdapter; use Yiisoft\Queue\Tests\Unit\Middleware\Push\Support\InvalidController; use Yiisoft\Queue\Tests\Unit\Middleware\Push\Support\TestCallableMiddleware; @@ -38,9 +38,9 @@ public function testCreateCallableFromArray(): void self::assertSame( 'New test data', $middleware->processPush( - $this->getPushRequest(), + $this->getMessage(), $this->createMock(MessageHandlerPushInterface::class), - )->getMessage()->getData(), + )->getData(), ); } @@ -48,16 +48,16 @@ public function testCreateFromClosureResponse(): void { $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createPushMiddleware( - static function (): PushRequest { - return new PushRequest(new Message('test', 'test data')); + static function (): MessageInterface { + return new Message('test', 'test data'); }, ); self::assertSame( 'test data', $middleware->processPush( - $this->getPushRequest(), + $this->getMessage(), $this->createMock(MessageHandlerPushInterface::class), - )->getMessage()->getData(), + )->getData(), ); } @@ -72,9 +72,9 @@ static function (): MiddlewarePushInterface { self::assertSame( 'New middleware test data', $middleware->processPush( - $this->getPushRequest(), + $this->getMessage(), $this->createMock(MessageHandlerPushInterface::class), - )->getMessage()->getData(), + )->getData(), ); } @@ -86,9 +86,9 @@ public function testCreateWithUseParamsMiddleware(): void self::assertSame( 'New middleware test data', $middleware->processPush( - $this->getPushRequest(), + $this->getMessage(), $this->getRequestHandler(), - )->getMessage()->getData(), + )->getData(), ); } @@ -96,14 +96,13 @@ public function testCreateWithTestCallableMiddleware(): void { $container = $this->getContainer([TestCallableMiddleware::class => new TestCallableMiddleware()]); $middleware = $this->getMiddlewareFactory($container)->createPushMiddleware([TestCallableMiddleware::class, 'index']); - $request = $this->getPushRequest(); self::assertSame( 'New test data', $middleware->processPush( - $request, + $this->getMessage(), $this->getRequestHandler(), - )->getMessage()->getData(), + )->getData(), ); } @@ -137,7 +136,7 @@ public function testInvalidMiddlewareWithWrongController(): void $this->expectException(InvalidMiddlewareDefinitionException::class); $middleware->processPush( - $this->getPushRequest(), + $this->getMessage(), $this->createMock(MessageHandlerPushInterface::class), ); } @@ -157,15 +156,15 @@ private function getContainer(array $instances = []): ContainerInterface private function getRequestHandler(): MessageHandlerPushInterface { return new class implements MessageHandlerPushInterface { - public function handlePush(PushRequest $request): PushRequest + public function handlePush(MessageInterface $message): MessageInterface { - return $request; + return $message; } }; } - private function getPushRequest(): PushRequest + private function getMessage(): MessageInterface { - return new PushRequest(new Message('handler', 'data')); + return new Message('handler', 'data'); } } diff --git a/tests/Unit/Middleware/Push/PushRequestTest.php b/tests/Unit/Middleware/Push/PushRequestTest.php deleted file mode 100644 index a3b84879..00000000 --- a/tests/Unit/Middleware/Push/PushRequestTest.php +++ /dev/null @@ -1,20 +0,0 @@ -assertNotSame($pushRequest, $pushRequest->withMessage($message)); - } -} diff --git a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php index 035ed999..369b0947 100644 --- a/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestCallableMiddleware.php @@ -5,12 +5,12 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; use Yiisoft\Queue\Message\Message; -use Yiisoft\Queue\Middleware\Push\PushRequest; +use Yiisoft\Queue\Message\MessageInterface; final class TestCallableMiddleware { - public function index(PushRequest $request): PushRequest + public function index(MessageInterface $message): MessageInterface { - return $request->withMessage(new Message('test', 'New test data')); + return new Message('test', 'New test data'); } } diff --git a/tests/Unit/Middleware/Push/Support/TestMiddleware.php b/tests/Unit/Middleware/Push/Support/TestMiddleware.php index 3321c047..4d35b3f0 100644 --- a/tests/Unit/Middleware/Push/Support/TestMiddleware.php +++ b/tests/Unit/Middleware/Push/Support/TestMiddleware.php @@ -5,16 +5,16 @@ namespace Yiisoft\Queue\Tests\Unit\Middleware\Push\Support; use Yiisoft\Queue\Message\Message; +use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MessageHandlerPushInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; -use Yiisoft\Queue\Middleware\Push\PushRequest; final class TestMiddleware implements MiddlewarePushInterface { public function __construct(private readonly string $message = 'New middleware test data') {} - public function processPush(PushRequest $request, MessageHandlerPushInterface $handler): PushRequest + public function processPush(MessageInterface $message, MessageHandlerPushInterface $handler): MessageInterface { - return $request->withMessage(new Message('test', $this->message)); + return new Message('test', $this->message); } }