From d9b73619ebae9af7c44e99e6f83603ba8f32e512 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Sun, 5 Jan 2025 13:01:10 +0300 Subject: [PATCH] Job status enumeration --- src/Adapter/AdapterInterface.php | 4 +- src/Adapter/SynchronousAdapter.php | 6 +- src/Debug/QueueCollector.php | 10 +-- src/Debug/QueueDecorator.php | 2 +- src/Enum/JobStatus.php | 63 ----------------- src/JobStatus.php | 21 ++++++ src/Queue.php | 1 - src/QueueInterface.php | 1 - stubs/StubAdapter.php | 4 +- stubs/StubQueue.php | 4 +- tests/App/DummyQueue.php | 2 +- tests/App/FakeAdapter.php | 2 +- tests/Benchmark/Support/VoidAdapter.php | 2 +- tests/Unit/Adapter/SynchronousAdapterTest.php | 4 +- tests/Unit/Debug/QueueCollectorTest.php | 4 +- tests/Unit/Debug/QueueDecoratorTest.php | 4 +- tests/Unit/JobStatusTest.php | 67 ------------------- tests/Unit/QueueTest.php | 5 +- tests/Unit/Stubs/StubAdapterTest.php | 3 +- tests/Unit/Stubs/StubQueueTest.php | 3 +- tests/Unit/Support/TestJobStatus.php | 15 ----- 21 files changed, 48 insertions(+), 179 deletions(-) delete mode 100644 src/Enum/JobStatus.php create mode 100644 src/JobStatus.php delete mode 100644 tests/Unit/JobStatusTest.php delete mode 100644 tests/Unit/Support/TestJobStatus.php diff --git a/src/Adapter/AdapterInterface.php b/src/Adapter/AdapterInterface.php index 7825bd9f..38f707d0 100644 --- a/src/Adapter/AdapterInterface.php +++ b/src/Adapter/AdapterInterface.php @@ -6,7 +6,7 @@ use BackedEnum; use InvalidArgumentException; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; interface AdapterInterface @@ -24,8 +24,6 @@ public function runExisting(callable $handlerCallback): void; * @param int|string $id ID of a job message. * * @throws InvalidArgumentException When there is no such id in the adapter. - * - * @return JobStatus */ public function status(string|int $id): JobStatus; diff --git a/src/Adapter/SynchronousAdapter.php b/src/Adapter/SynchronousAdapter.php index 367c2a4a..f815264a 100644 --- a/src/Adapter/SynchronousAdapter.php +++ b/src/Adapter/SynchronousAdapter.php @@ -7,7 +7,7 @@ use BackedEnum; use InvalidArgumentException; use Yiisoft\Queue\ChannelNormalizer; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Worker\WorkerInterface; @@ -55,11 +55,11 @@ public function status(string|int $id): JobStatus } if ($id < $this->current) { - return JobStatus::done(); + return JobStatus::DONE; } if (isset($this->messages[$id])) { - return JobStatus::waiting(); + return JobStatus::WAITING; } throw new InvalidArgumentException('There is no message with the given ID.'); diff --git a/src/Debug/QueueCollector.php b/src/Debug/QueueCollector.php index c0029fc1..bb688b74 100644 --- a/src/Debug/QueueCollector.php +++ b/src/Debug/QueueCollector.php @@ -4,9 +4,9 @@ namespace Yiisoft\Queue\Debug; +use Yiisoft\Queue\JobStatus; use Yiisoft\Yii\Debug\Collector\CollectorTrait; use Yiisoft\Yii\Debug\Collector\SummaryCollectorInterface; -use Yiisoft\Queue\Enum\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; use Yiisoft\Queue\QueueInterface; @@ -38,15 +38,9 @@ public function collectStatus(string $id, JobStatus $status): void return; } - $statusText = match (true) { - $status->isDone() => 'done', - $status->isReserved() => 'reserved', - $status->isWaiting() => 'waiting', - default => 'unknown' - }; $this->statuses[] = [ 'id' => $id, - 'status' => $statusText, + 'status' => $status->key(), ]; } diff --git a/src/Debug/QueueDecorator.php b/src/Debug/QueueDecorator.php index 5b4614f8..40ce77a0 100644 --- a/src/Debug/QueueDecorator.php +++ b/src/Debug/QueueDecorator.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Debug; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; use Yiisoft\Queue\QueueInterface; diff --git a/src/Enum/JobStatus.php b/src/Enum/JobStatus.php deleted file mode 100644 index 764f98d1..00000000 --- a/src/Enum/JobStatus.php +++ /dev/null @@ -1,63 +0,0 @@ -available(), true)) { - throw new InvalidStatusException($status); - } - - $this->status = $status; - } - - protected function available(): array - { - return [self::WAITING, self::RESERVED, self::DONE]; - } - - public static function waiting(): self - { - return new static(self::WAITING); - } - - public static function reserved(): self - { - return new static(self::RESERVED); - } - - public static function done(): self - { - return new static(self::DONE); - } - - public function isWaiting(): bool - { - return $this->status === self::WAITING; - } - - public function isReserved(): bool - { - return $this->status === self::RESERVED; - } - - public function isDone(): bool - { - return $this->status === self::DONE; - } -} diff --git a/src/JobStatus.php b/src/JobStatus.php new file mode 100644 index 00000000..6c252fbb --- /dev/null +++ b/src/JobStatus.php @@ -0,0 +1,21 @@ + 'waiting', + self::RESERVED => 'reserved', + self::DONE => 'done', + }; + } +} diff --git a/src/Queue.php b/src/Queue.php index b8462688..af38420d 100644 --- a/src/Queue.php +++ b/src/Queue.php @@ -7,7 +7,6 @@ use Psr\Log\LoggerInterface; use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\Cli\LoopInterface; -use Yiisoft\Queue\Enum\JobStatus; use Yiisoft\Queue\Exception\AdapterConfiguration\AdapterNotConfiguredException; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\AdapterPushHandler; diff --git a/src/QueueInterface.php b/src/QueueInterface.php index 93878540..5ec527ca 100644 --- a/src/QueueInterface.php +++ b/src/QueueInterface.php @@ -6,7 +6,6 @@ use InvalidArgumentException; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Enum\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; diff --git a/stubs/StubAdapter.php b/stubs/StubAdapter.php index a5f63172..98cf273f 100644 --- a/stubs/StubAdapter.php +++ b/stubs/StubAdapter.php @@ -7,7 +7,7 @@ use BackedEnum; use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\ChannelNormalizer; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\QueueInterface; @@ -30,7 +30,7 @@ public function runExisting(callable $handlerCallback): void public function status(int|string $id): JobStatus { - return JobStatus::done(); + return JobStatus::DONE; } public function push(MessageInterface $message): MessageInterface diff --git a/stubs/StubQueue.php b/stubs/StubQueue.php index 53587e70..bd6cdfbb 100644 --- a/stubs/StubQueue.php +++ b/stubs/StubQueue.php @@ -5,7 +5,7 @@ namespace Yiisoft\Queue\Stubs; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; use Yiisoft\Queue\QueueInterface; @@ -37,7 +37,7 @@ public function listen(): void public function status(int|string $id): JobStatus { - return JobStatus::done(); + return JobStatus::DONE; } public function getAdapter(): ?AdapterInterface diff --git a/tests/App/DummyQueue.php b/tests/App/DummyQueue.php index 75e8ff8d..d8a9828e 100644 --- a/tests/App/DummyQueue.php +++ b/tests/App/DummyQueue.php @@ -6,7 +6,7 @@ use Exception; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Middleware\Push\MiddlewarePushInterface; use Yiisoft\Queue\QueueInterface; diff --git a/tests/App/FakeAdapter.php b/tests/App/FakeAdapter.php index 69f1e0ea..db5cb39d 100644 --- a/tests/App/FakeAdapter.php +++ b/tests/App/FakeAdapter.php @@ -7,7 +7,7 @@ use BackedEnum; use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\ChannelNormalizer; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; final class FakeAdapter implements AdapterInterface diff --git a/tests/Benchmark/Support/VoidAdapter.php b/tests/Benchmark/Support/VoidAdapter.php index a6d4beb9..cb295eed 100644 --- a/tests/Benchmark/Support/VoidAdapter.php +++ b/tests/Benchmark/Support/VoidAdapter.php @@ -8,7 +8,7 @@ use InvalidArgumentException; use RuntimeException; use Yiisoft\Queue\Adapter\AdapterInterface; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\Message\MessageSerializerInterface; diff --git a/tests/Unit/Adapter/SynchronousAdapterTest.php b/tests/Unit/Adapter/SynchronousAdapterTest.php index 56dafcc3..d9ca6b37 100644 --- a/tests/Unit/Adapter/SynchronousAdapterTest.php +++ b/tests/Unit/Adapter/SynchronousAdapterTest.php @@ -6,7 +6,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use Yiisoft\Queue\Adapter\SynchronousAdapter; -use Yiisoft\Queue\Enum\JobStatus; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\IdEnvelope; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\QueueInterface; @@ -35,7 +35,7 @@ public function testNonIntegerId(): void $id = $envelope->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]; $wrongId = "$id "; - self::assertEquals(JobStatus::waiting(), $queue->status($wrongId)); + self::assertSame(JobStatus::WAITING, $queue->status($wrongId)); } public function testIdSetting(): void diff --git a/tests/Unit/Debug/QueueCollectorTest.php b/tests/Unit/Debug/QueueCollectorTest.php index ca0daea8..81fd1f75 100644 --- a/tests/Unit/Debug/QueueCollectorTest.php +++ b/tests/Unit/Debug/QueueCollectorTest.php @@ -4,10 +4,10 @@ namespace Yiisoft\Queue\Tests\Unit\Debug; +use Yiisoft\Queue\JobStatus; use Yiisoft\Yii\Debug\Collector\CollectorInterface; use Yiisoft\Yii\Debug\Tests\Shared\AbstractCollectorTestCase; use Yiisoft\Queue\Debug\QueueCollector; -use Yiisoft\Queue\Enum\JobStatus; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Tests\App\DummyQueue; @@ -26,7 +26,7 @@ protected function setUp(): void */ protected function collectTestData(CollectorInterface $collector): void { - $collector->collectStatus('12345', JobStatus::done()); + $collector->collectStatus('12345', JobStatus::DONE); $collector->collectPush('chan1', $this->pushMessage); $collector->collectPush('chan2', $this->pushMessage); $collector->collectWorkerProcessing( diff --git a/tests/Unit/Debug/QueueDecoratorTest.php b/tests/Unit/Debug/QueueDecoratorTest.php index f206c5ca..ead6c671 100644 --- a/tests/Unit/Debug/QueueDecoratorTest.php +++ b/tests/Unit/Debug/QueueDecoratorTest.php @@ -8,10 +8,10 @@ use Yiisoft\Queue\Adapter\AdapterInterface; use Yiisoft\Queue\Debug\QueueCollector; use Yiisoft\Queue\Debug\QueueDecorator; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\MessageInterface; use Yiisoft\Queue\QueueInterface; use Yiisoft\Queue\Tests\App\FakeAdapter; -use Yiisoft\Queue\Tests\Unit\Support\TestJobStatus; class QueueDecoratorTest extends TestCase { @@ -34,7 +34,7 @@ public function testWithAdapter(): void public function testStatus(): void { $queue = $this->createMock(QueueInterface::class); - $jobStatus = TestJobStatus::withStatus(1); + $jobStatus = JobStatus::WAITING; $queue->expects($this->once())->method('status')->willReturn($jobStatus); $collector = new QueueCollector(); $decorator = new QueueDecorator( diff --git a/tests/Unit/JobStatusTest.php b/tests/Unit/JobStatusTest.php deleted file mode 100644 index f0343745..00000000 --- a/tests/Unit/JobStatusTest.php +++ /dev/null @@ -1,67 +0,0 @@ - [ - 'waiting', - 'isWaiting', - [ - 'isReserved', - 'isDone', - ], - ], - 'reserved' => [ - 'reserved', - 'isReserved', - [ - 'isWaiting', - 'isDone', - ], - ], - 'done' => [ - 'done', - 'isDone', - [ - 'isWaiting', - 'isReserved', - ], - ], - ]; - } - - #[DataProvider('getStatusPairs')] - public function testInstanceValue(string $statusName, string $positiveMethod, array $negatives): void - { - $status = JobStatus::$statusName(); - - self::assertTrue($status->$positiveMethod(), "$positiveMethod must be true for status $statusName"); - foreach ($negatives as $negative) { - self::assertFalse($status->$negative(), "$negative must be false for status $statusName"); - } - } - - public function testException(): void - { - try { - TestJobStatus::withStatus(4)->isDone(); - } catch (InvalidStatusException $exception) { - self::assertSame($exception::class, InvalidStatusException::class); - self::assertSame($exception->getName(), 'Invalid job status provided'); - self::assertSame($exception->getStatus(), 4); - $this->assertMatchesRegularExpression('/JobStatus::DONE/', $exception->getSolution()); - } - } -} diff --git a/tests/Unit/QueueTest.php b/tests/Unit/QueueTest.php index 1bfe8001..25727285 100644 --- a/tests/Unit/QueueTest.php +++ b/tests/Unit/QueueTest.php @@ -6,6 +6,7 @@ use Yiisoft\Queue\Cli\SignalLoop; use Yiisoft\Queue\Exception\AdapterConfiguration\AdapterNotConfiguredException; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Tests\App\FakeAdapter; use Yiisoft\Queue\Tests\TestCase; @@ -96,11 +97,11 @@ public function testStatus(): void $id = $envelope->getMetadata()[IdEnvelope::MESSAGE_ID_KEY]; $status = $queue->status($id); - self::assertTrue($status->isWaiting()); + self::assertSame(JobStatus::WAITING, $status); $queue->run(); $status = $queue->status($id); - self::assertTrue($status->isDone()); + self::assertSame(JobStatus::DONE, $status); } public function testAdapterNotConfiguredException(): void diff --git a/tests/Unit/Stubs/StubAdapterTest.php b/tests/Unit/Stubs/StubAdapterTest.php index 520b9224..31ffff33 100644 --- a/tests/Unit/Stubs/StubAdapterTest.php +++ b/tests/Unit/Stubs/StubAdapterTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Stubs\StubAdapter; use Yiisoft\Queue\Tests\Unit\Support\IntEnum; @@ -19,7 +20,7 @@ public function testBase(): void $adapter = new StubAdapter(); $this->assertSame($message, $adapter->push($message)); - $this->assertTrue($adapter->status('test')->isDone()); + $this->assertSame(JobStatus::DONE, $adapter->status('test')); $this->assertNotSame($adapter, $adapter->withChannel('test')); $adapter->runExisting(static fn() => null); $adapter->subscribe(static fn() => null); diff --git a/tests/Unit/Stubs/StubQueueTest.php b/tests/Unit/Stubs/StubQueueTest.php index fbf5a291..566fa571 100644 --- a/tests/Unit/Stubs/StubQueueTest.php +++ b/tests/Unit/Stubs/StubQueueTest.php @@ -5,6 +5,7 @@ namespace Yiisoft\Queue\Tests\Unit\Stubs; use PHPUnit\Framework\TestCase; +use Yiisoft\Queue\JobStatus; use Yiisoft\Queue\Message\Message; use Yiisoft\Queue\Stubs\StubQueue; use Yiisoft\Queue\Stubs\StubAdapter; @@ -18,7 +19,7 @@ public function testBase(): void $this->assertSame($message, $queue->push($message)); $this->assertSame(0, $queue->run()); - $this->assertTrue($queue->status('test')->isDone()); + $this->assertSame(JobStatus::DONE, $queue->status('test')); $this->assertNull($queue->getChannel()); $this->assertNull($queue->getAdapter()); $queue->listen(); diff --git a/tests/Unit/Support/TestJobStatus.php b/tests/Unit/Support/TestJobStatus.php deleted file mode 100644 index 48478c7f..00000000 --- a/tests/Unit/Support/TestJobStatus.php +++ /dev/null @@ -1,15 +0,0 @@ -