create(['status' => 'error']); $run = ProvisioningRun::factory()->create([ 'subject_type' => Host::class, 'subject_id' => $host->id, 'pipeline' => 'host', 'status' => ProvisioningRun::STATUS_FAILED, 'attempt' => 3, 'current_step' => 4, 'error' => 'boom', ]); Livewire::actingAs(admin(), 'operator')->test(Provisioning::class)->call('retry', $run->uuid); $run->refresh(); expect($run->status)->toBe(ProvisioningRun::STATUS_RUNNING) ->and($run->attempt)->toBe(0) ->and($run->error)->toBeNull() ->and($host->fresh()->status)->toBe('onboarding'); Queue::assertPushed(AdvanceRunJob::class); }); it('ignores retry on a run that is not failed', function () { Queue::fake(); $host = Host::factory()->active()->create(); $run = ProvisioningRun::factory()->create([ 'subject_type' => Host::class, 'subject_id' => $host->id, 'pipeline' => 'host', 'status' => ProvisioningRun::STATUS_RUNNING, ]); Livewire::actingAs(admin(), 'operator')->test(Provisioning::class)->call('retry', $run->uuid); expect($run->fresh()->status)->toBe(ProvisioningRun::STATUS_RUNNING); Queue::assertNotPushed(AdvanceRunJob::class); });