diff --git a/app/Models/Asset.php b/app/Models/Asset.php index eddb4f5e83..29231b22c8 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -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)); } diff --git a/tests/Unit/AssetTest.php b/tests/Unit/AssetTest.php index aea894f9fb..1316a385ce 100644 --- a/tests/Unit/AssetTest.php +++ b/tests/Unit/AssetTest.php @@ -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()); + } }