image('seed.jpg', $width, $height)->get(); } test('legacy press release images are copied with variants and database is updated', function () { /** @var TestCase $this */ Storage::fake('public'); Storage::disk('public')->put('presseecho/press_release/photo-a.jpg', fakeImageBytes(1600, 1200)); Storage::disk('public')->put('presseecho/press_release/unused.jpg', fakeImageBytes()); $pr = PressRelease::factory()->create([ 'portal' => Portal::Presseecho->value, 'legacy_portal' => Portal::Presseecho->value, ]); $image = PressReleaseImage::query()->create([ 'press_release_id' => $pr->id, 'legacy_portal' => Portal::Presseecho->value, 'legacy_id' => 99, 'disk' => 'public', 'path' => 'photo-a.jpg', ]); $this->artisan('legacy:sync-press-release-images', [ '--portal' => Portal::Presseecho->value, ]) ->assertSuccessful() ->expectsOutputToContain('referenziert 1, kopiert 1'); $image->refresh(); expect($image->path)->toBe("press-releases/{$pr->id}/images/photo-a.jpg"); expect(Storage::disk('public')->exists($image->path))->toBeTrue(); expect($image->variants)->toBeArray(); expect($image->variants)->toHaveKeys(['thumb', 'medium', 'large']); foreach ($image->variants as $variantPath) { expect(Storage::disk('public')->exists($variantPath))->toBeTrue(); } }); test('legacy press release image sync dry run does not copy or update anything', function () { /** @var TestCase $this */ Storage::fake('public'); Storage::disk('public')->put('businessportal24/press_release/photo-b.jpg', fakeImageBytes()); $pr = PressRelease::factory()->create([ 'portal' => Portal::Businessportal24->value, 'legacy_portal' => Portal::Businessportal24->value, ]); $image = PressReleaseImage::query()->create([ 'press_release_id' => $pr->id, 'legacy_portal' => Portal::Businessportal24->value, 'legacy_id' => 5, 'disk' => 'public', 'path' => 'photo-b.jpg', ]); $this->artisan('legacy:sync-press-release-images', [ '--portal' => Portal::Businessportal24->value, '--dry-run' => true, ]) ->assertSuccessful() ->expectsOutputToContain('(Dry-Run)'); $image->refresh(); expect($image->path)->toBe('photo-b.jpg'); expect($image->variants)->toBeNull(); expect(Storage::disk('public')->exists("press-releases/{$pr->id}/images/photo-b.jpg"))->toBeFalse(); }); test('legacy press release image sync reports missing files', function () { /** @var TestCase $this */ Storage::fake('public'); $pr = PressRelease::factory()->create([ 'portal' => Portal::Presseecho->value, 'legacy_portal' => Portal::Presseecho->value, ]); PressReleaseImage::query()->create([ 'press_release_id' => $pr->id, 'legacy_portal' => Portal::Presseecho->value, 'legacy_id' => 7, 'disk' => 'public', 'path' => 'gone.jpg', ]); $this->artisan('legacy:sync-press-release-images', [ '--portal' => Portal::Presseecho->value, ]) ->assertFailed() ->expectsOutputToContain('Fehlt: presseecho/press_release/gone.jpg'); }); test('legacy press release image sync skips already migrated paths but generates missing variants', function () { /** @var TestCase $this */ Storage::fake('public'); $pr = PressRelease::factory()->create([ 'portal' => Portal::Presseecho->value, 'legacy_portal' => Portal::Presseecho->value, ]); Storage::disk('public')->put("press-releases/{$pr->id}/images/already-here.jpg", fakeImageBytes(1200, 900)); $image = PressReleaseImage::query()->create([ 'press_release_id' => $pr->id, 'legacy_portal' => Portal::Presseecho->value, 'legacy_id' => 11, 'disk' => 'public', 'path' => "press-releases/{$pr->id}/images/already-here.jpg", 'variants' => null, ]); $this->artisan('legacy:sync-press-release-images', [ '--portal' => Portal::Presseecho->value, ]) ->assertSuccessful() ->expectsOutputToContain('bereits synchron 1'); $image->refresh(); expect($image->variants)->toBeArray(); expect($image->variants)->toHaveKeys(['thumb', 'medium', 'large']); });