Merge pull request #16916 from marcusmoore/bug/sc-29153

Handle potential hard exception in Asset@getImageUrl method
This commit is contained in:
snipe
2025-05-14 14:52:33 +02:00
committed by GitHub
2 changed files with 40 additions and 1 deletions

View File

@@ -656,7 +656,7 @@ class Asset extends Depreciable
return Storage::disk('public')->url(app('assets_upload_path').e($this->image));
} elseif ($this->model && ! empty($this->model->image)) {
return Storage::disk('public')->url(app('models_upload_path').e($this->model->image));
} elseif ($this->model->category && ! empty($this->model->category->image)) {
} elseif ($this->model?->category && ! empty($this->model->category->image)) {
return Storage::disk('public')->url(app('categories_upload_path').e($this->model->category->image));
}

View File

@@ -199,4 +199,43 @@ class AssetTest extends TestCase
]);
$this->assertModelMissing($asset);
}
public function testGetImageUrlMethod()
{
$urlBase = config('filesystems.disks.public.url');
$category = Category::factory()->create(['image' => 'category-image.jpg']);
$model = AssetModel::factory()->for($category)->create(['image' => 'asset-model-image.jpg']);
$asset = Asset::factory()->for($model, 'model')->create(['image' => 'asset-image.jpg']);
$this->assertEquals(
"{$urlBase}/assets/asset-image.jpg",
$asset->getImageUrl()
);
$asset->update(['image' => null]);
$this->assertEquals(
"{$urlBase}/models/asset-model-image.jpg",
$asset->refresh()->getImageUrl()
);
$model->update(['image' => null]);
$this->assertEquals(
"{$urlBase}/categories/category-image.jpg",
$asset->refresh()->getImageUrl()
);
$category->image = null;
$category->save();
$this->assertFalse($asset->refresh()->getImageUrl());
// handles case where model does not exist
$asset->model_id = 9999999;
$asset->forceSave();
$this->assertFalse($asset->refresh()->getImageUrl());
}
}