put('presseecho/company/logo-a.jpg', 'logo-a'); Storage::disk('public')->put('presseecho/company/unused.jpg', 'unused'); $company = Company::factory()->create([ 'portal' => Portal::Presseecho->value, 'legacy_portal' => Portal::Presseecho->value, 'legacy_id' => 123, 'logo_path' => 'logo-a.jpg', ]); $this->artisan('legacy:sync-company-logos', [ '--portal' => Portal::Presseecho->value, ]) ->assertSuccessful() ->expectsOutputToContain('presseecho: referenziert 1, kopiert 1, DB-Updates 1') ->expectsOutputToContain('ungenutzt 1'); $company->refresh(); expect($company->logo_path)->toBe("company-logos/presseecho/{$company->id}/logo-a.jpg"); expect(Storage::disk('public')->exists($company->logo_path))->toBeTrue(); }); test('legacy company logo sync dry run does not copy or update records', function () { /** @var TestCase $this */ Storage::fake('public'); Storage::disk('public')->put('businessportal24/company/logo-b.png', 'logo-b'); $company = Company::factory()->create([ 'portal' => Portal::Businessportal24->value, 'legacy_portal' => Portal::Businessportal24->value, 'legacy_id' => 456, 'logo_path' => 'logo-b.png', ]); $this->artisan('legacy:sync-company-logos', [ '--portal' => Portal::Businessportal24->value, '--dry-run' => true, ]) ->assertSuccessful() ->expectsOutputToContain('(Dry-Run)'); $company->refresh(); expect($company->logo_path)->toBe('logo-b.png'); expect(Storage::disk('public')->exists("company-logos/businessportal24/{$company->id}/logo-b.png"))->toBeFalse(); }); test('legacy company logo sync reports missing referenced files', function () { /** @var TestCase $this */ Storage::fake('public'); Company::factory()->create([ 'portal' => Portal::Presseecho->value, 'legacy_portal' => Portal::Presseecho->value, 'legacy_id' => 789, 'logo_path' => 'missing.jpg', ]); $this->artisan('legacy:sync-company-logos', [ '--portal' => Portal::Presseecho->value, ]) ->assertFailed() ->expectsOutputToContain('Fehlt: presseecho/company/missing.jpg'); }); test('company logo url resolves normalized local legacy logo before external legacy url', function () { /** @var TestCase $this */ Storage::fake('public'); $company = Company::factory()->create([ 'portal' => Portal::Businessportal24->value, 'legacy_portal' => Portal::Businessportal24->value, 'legacy_id' => 321, 'logo_path' => 'https://legacy.example/company/logo-c.png', ]); Storage::disk('public')->put("company-logos/businessportal24/{$company->id}/logo-c.png", 'logo-c'); expect($company->logoUrl())->toBe(asset("storage/company-logos/businessportal24/{$company->id}/logo-c.png")); }); test('company logo url resolves storage-prefixed local path', function () { /** @var TestCase $this */ Storage::fake('public'); $company = Company::factory()->create([ 'portal' => Portal::Presseecho->value, 'logo_path' => '/storage/company-logos/presseecho/99/logo-d.png', ]); Storage::disk('public')->put('company-logos/presseecho/99/logo-d.png', 'logo-d'); expect($company->logoUrl())->toBe(asset('storage/company-logos/presseecho/99/logo-d.png')); });