From a2678a7eaf39010b6a62af63dec44218a677a926 Mon Sep 17 00:00:00 2001 From: Ivan Moroz Date: Mon, 1 Jun 2026 23:06:50 +0300 Subject: [PATCH] CONV-149: Add duplicate convert protection Co-Authored-By: Claude Sonnet 4.6 --- .../dashboard/dashboard-converter.blade.php | 12 +++++++++++- .../DashboardConverterConvertTest.php | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/resources/views/livewire/dashboard/dashboard-converter.blade.php b/resources/views/livewire/dashboard/dashboard-converter.blade.php index b60b2b3..13661ec 100644 --- a/resources/views/livewire/dashboard/dashboard-converter.blade.php +++ b/resources/views/livewire/dashboard/dashboard-converter.blade.php @@ -191,8 +191,18 @@ class="flex items-center justify-between gap-4 rounded-[var(--ca-radius-md)] bor

Ready to convert {{ strtoupper($file->extension) }} to {{ strtoupper($selectedTargetFormat) }}

-

Conversion will be available in Phase 9.

+ + + Convert Now + Starting… + @endif diff --git a/tests/Feature/Livewire/DashboardConverterConvertTest.php b/tests/Feature/Livewire/DashboardConverterConvertTest.php index f8380c3..4856bda 100644 --- a/tests/Feature/Livewire/DashboardConverterConvertTest.php +++ b/tests/Feature/Livewire/DashboardConverterConvertTest.php @@ -30,3 +30,22 @@ expect(ConversionJob::query()->count())->toBe(1); }); + +it('does not create duplicate conversion jobs on repeated convert calls', function () { + Queue::fake(); + Storage::fake('local'); + + $user = User::factory()->create(); + + $component = Livewire::actingAs($user) + ->test(DashboardConverter::class) + ->set('upload', UploadedFile::fake()->image('avatar.png', 800, 600)) + ->call('selectTargetFormat', 'jpg') + ->set('options.quality', 'high') + ->call('continueFromSettings'); + + $component->call('convert'); + $component->call('convert'); + + expect(ConversionJob::query()->count())->toBe(1); +});