diff --git a/database/factories/ConversionJobFactory.php b/database/factories/ConversionJobFactory.php index e8e2569..36120d0 100644 --- a/database/factories/ConversionJobFactory.php +++ b/database/factories/ConversionJobFactory.php @@ -36,4 +36,38 @@ public function definition(): array 'error_message' => null, ]; } + + public function queued(): static + { + return $this->state(['status' => ConversionStatus::Queued, 'progress' => 0]); + } + + public function processing(): static + { + return $this->state([ + 'status' => ConversionStatus::Processing, + 'progress' => 10, + 'started_at' => now(), + ]); + } + + public function completed(): static + { + return $this->state([ + 'status' => ConversionStatus::Completed, + 'progress' => 100, + 'started_at' => now()->subSeconds(5), + 'completed_at' => now(), + ]); + } + + public function failed(): static + { + return $this->state([ + 'status' => ConversionStatus::Failed, + 'error_code' => 'driver_failed', + 'error_message' => 'Conversion driver encountered an error.', + 'completed_at' => now(), + ]); + } } diff --git a/tests/Feature/Livewire/DashboardConverterConvertTest.php b/tests/Feature/Livewire/DashboardConverterConvertTest.php index 4856bda..df0ab1b 100644 --- a/tests/Feature/Livewire/DashboardConverterConvertTest.php +++ b/tests/Feature/Livewire/DashboardConverterConvertTest.php @@ -31,6 +31,22 @@ expect(ConversionJob::query()->count())->toBe(1); }); +it('renders converting state while conversion is processing', function () { + $user = User::factory()->create(); + $job = ConversionJob::factory()->for($user)->processing()->create([ + 'source_format' => 'png', + 'target_format' => 'jpg', + ]); + + Livewire::actingAs($user) + ->test(DashboardConverter::class) + ->set('step', 'converting') + ->set('currentConversionJobId', $job->id) + ->assertSee('Converting') + ->assertSee('PNG') + ->assertSee('JPG'); +}); + it('does not create duplicate conversion jobs on repeated convert calls', function () { Queue::fake(); Storage::fake('local');