diff --git a/src/Signal.php b/src/Signal.php index 659be9a..f64efbf 100644 --- a/src/Signal.php +++ b/src/Signal.php @@ -13,7 +13,7 @@ use Workflow\Middleware\WithoutOverlappingMiddleware; use Workflow\Models\StoredWorkflow; -final class Signal implements ShouldBeEncrypted, ShouldQueue +class Signal implements ShouldBeEncrypted, ShouldQueue { use Dispatchable; use InteractsWithQueue; diff --git a/src/Timer.php b/src/Timer.php new file mode 100644 index 0000000..ab47fa4 --- /dev/null +++ b/src/Timer.php @@ -0,0 +1,25 @@ +storedWorkflow->id . ':' . $this->index; + } +} diff --git a/src/Traits/Timers.php b/src/Traits/Timers.php index a32e7fc..b807ee6 100644 --- a/src/Traits/Timers.php +++ b/src/Traits/Timers.php @@ -9,7 +9,7 @@ use React\Promise\PromiseInterface; use function React\Promise\resolve; use Workflow\Serializers\Serializer; -use Workflow\Signal; +use Workflow\Timer; trait Timers { @@ -66,7 +66,7 @@ public static function timer(int|string|CarbonInterval $seconds): PromiseInterfa ->create([ 'index' => self::$context->index, 'now' => self::$context->now, - 'class' => Signal::class, + 'class' => Timer::class, 'result' => Serializer::serialize(true), ]); } catch (\Illuminate\Database\UniqueConstraintViolationException $exception) { @@ -90,7 +90,12 @@ public static function timer(int|string|CarbonInterval $seconds): PromiseInterfa } } - Signal::dispatch(self::$context->storedWorkflow, self::connection(), self::queue())->delay($delay); + Timer::dispatch( + self::$context->storedWorkflow, + self::$context->index, + self::connection(), + self::queue() + )->delay($delay); } ++self::$context->index; diff --git a/tests/Unit/Traits/TimersTest.php b/tests/Unit/Traits/TimersTest.php index 8a5a2d5..36a701d 100644 --- a/tests/Unit/Traits/TimersTest.php +++ b/tests/Unit/Traits/TimersTest.php @@ -15,8 +15,8 @@ use Tests\TestCase; use Workflow\Models\StoredWorkflow; use Workflow\Serializers\Serializer; -use Workflow\Signal; use Workflow\States\WorkflowPendingStatus; +use Workflow\Timer; use Workflow\WorkflowStub; final class TimersTest extends TestCase @@ -109,7 +109,7 @@ public function testStoresResult(): void $this->assertDatabaseHas('workflow_logs', [ 'stored_workflow_id' => $workflow->id(), 'index' => 0, - 'class' => Signal::class, + 'class' => Timer::class, ]); $this->assertSame(true, Serializer::unserialize($workflow->logs()->firstWhere('index', 0)->result)); } @@ -127,7 +127,7 @@ public function testLoadsStoredResult(): void ->create([ 'index' => 0, 'now' => now(), - 'class' => Signal::class, + 'class' => Timer::class, 'result' => Serializer::serialize(true), ]); @@ -141,7 +141,7 @@ public function testLoadsStoredResult(): void $this->assertDatabaseHas('workflow_logs', [ 'stored_workflow_id' => $workflow->id(), 'index' => 0, - 'class' => Signal::class, + 'class' => Timer::class, ]); $this->assertSame(true, Serializer::unserialize($workflow->logs()->firstWhere('index', 0)->result)); } @@ -159,7 +159,7 @@ public function testHandlesDuplicateLogInsertionProperly(): void ->create([ 'index' => 0, 'now' => now(), - 'class' => Signal::class, + 'class' => Timer::class, 'result' => Serializer::serialize(true), ]); @@ -296,7 +296,7 @@ public function testTimerCapsDelayForSqsDriver(): void $this->assertNull($result); - Bus::assertDispatched(Signal::class, function ($job) use ($now) { + Bus::assertDispatched(Timer::class, function ($job) use ($now) { $delaySeconds = $job->delay->diffInSeconds($now); $this->assertLessThanOrEqual(900, $delaySeconds); $this->assertGreaterThanOrEqual(899, $delaySeconds); diff --git a/tests/Unit/WorkflowStubTest.php b/tests/Unit/WorkflowStubTest.php index fde6f76..c6680f5 100644 --- a/tests/Unit/WorkflowStubTest.php +++ b/tests/Unit/WorkflowStubTest.php @@ -20,6 +20,7 @@ use Workflow\States\WorkflowCreatedStatus; use Workflow\States\WorkflowPendingStatus; use Workflow\States\WorkflowWaitingStatus; +use Workflow\Timer; use Workflow\WorkflowStub; final class WorkflowStubTest extends TestCase @@ -204,7 +205,7 @@ public function testAwaitWithTimeoutTimedout(): void $this->assertDatabaseHas('workflow_logs', [ 'stored_workflow_id' => $workflow->id(), 'index' => 1, - 'class' => Signal::class, + 'class' => Timer::class, ]); $this->assertTrue(Serializer::unserialize($workflow->logs()->firstWhere('index', 1)->result)); }