Return EvCompany logo as a full URL in the API resource
PHP Tests / php-tests (push) Has been cancelled

EvCompanyResource returned the raw disk-relative path stored by
Filament's FileUpload (e.g. "logos/xxx.png"), not something API
consumers can render directly.

- EvCompany::logoUrl() builds an absolute URL from the configured
  filesystem disk, guarding against a disk (e.g. s3) that already
  returns an absolute URL so it isn't double-prefixed.
- EvCompanyResource now exposes that as 'logo' instead of the raw path.
This commit is contained in:
Nyan Lin Paing
2026-08-23 23:59:13 +07:00
parent 98dacef556
commit 4f0f20659d
3 changed files with 44 additions and 1 deletions
@@ -1,6 +1,7 @@
<?php
use App\Models\User;
use Illuminate\Support\Facades\Storage;
use Modules\Catalog\Models\Destination;
use Modules\Catalog\Models\EvCompany;
@@ -19,6 +20,24 @@ test('lists active ev companies', function () {
->assertJsonFragment(['id' => $active->id]);
});
test('returns the company logo as a full absolute url', function () {
$company = EvCompany::factory()->create(['is_active' => true, 'logo' => 'logos/example.png']);
$this->withHeader('Authorization', "Bearer {$this->token}")
->getJson('/api/v1/companies')
->assertSuccessful()
->assertJsonFragment(['logo' => url(Storage::disk(config('filesystems.default'))->url($company->logo))]);
});
test('returns a null logo when the company has none', function () {
EvCompany::factory()->create(['is_active' => true, 'logo' => null]);
$this->withHeader('Authorization', "Bearer {$this->token}")
->getJson('/api/v1/companies')
->assertSuccessful()
->assertJsonFragment(['logo' => null]);
});
test('lists active destinations', function () {
$active = Destination::factory()->create(['is_active' => true]);
Destination::factory()->create(['is_active' => false]);