diff --git a/src/HasImageUploads.php b/src/HasImageUploads.php index f394352..1b2a25a 100644 --- a/src/HasImageUploads.php +++ b/src/HasImageUploads.php @@ -106,7 +106,8 @@ public function imageUrl(?string $field = null): string // check for placeholder defined in option $placeholderImage = Arr::get($this->uploadFieldOptions, 'placeholder'); - return (empty($attributeValue) && $placeholderImage) + $exists = !empty($attributeValue) && $this->getStorageDisk()->exists($attributeValue); + return (!$exists && $placeholderImage) ? $placeholderImage : $this->getStorageDisk()->url($attributeValue); } diff --git a/tests/ImageUpTest.php b/tests/ImageUpTest.php index f4adaaa..43d0046 100644 --- a/tests/ImageUpTest.php +++ b/tests/ImageUpTest.php @@ -207,11 +207,40 @@ public function it_uploads_image_by_field_name() } /** - * it gives image url if image saved in db + * it gives image url if image saved in db and file exists * * @test */ - public function it_gives_image_url_if_image_saved_in_db() + public function it_gives_image_url_if_image_saved_in_db_and_file_exists() + { + $this->user = new User(); + $this->user->setImagesField([ + 'avatar' => ['placeholder' => '/images/cover-placeholder.png'] + ]); + + $this->user->forceFill([ + 'name' => 'John', + 'email' => 'John@email.com', + 'password' => 'secret', + 'avatar' => 'uploads/my-avatar.png' + ])->save(); + + Storage::fake('public'); + $image = UploadedFile::fake()->image('my-avatar.png', 400, 500); + $this->user->uploadImage($image); + + $this->assertEquals($this->user->getOriginal('avatar'), 'uploads/'.$image->hashName()); + + $this->assertEquals('/storage/uploads/' . $image->hashName(), $this->user->imageUrl()); + $this->assertEquals('/storage/uploads/' . $image->hashName(), $this->user->imageUrl('avatar')); + } + + /** + * it gives image url if image saved in db and file not exists + * + * @test + */ + public function it_gives_placeholder_url_if_image_saved_in_db_and_file_not_exists() { $this->user = new User(); $this->user->setImagesField([ @@ -227,8 +256,8 @@ public function it_gives_image_url_if_image_saved_in_db() $this->assertEquals($this->user->getOriginal('avatar'), 'uploads/my-avatar.png'); - $this->assertEquals('/storage/uploads/my-avatar.png', $this->user->imageUrl()); - $this->assertEquals('/storage/uploads/my-avatar.png', $this->user->imageUrl('avatar')); + $this->assertEquals('/images/cover-placeholder.png', $this->user->imageUrl()); + $this->assertEquals('/images/cover-placeholder.png', $this->user->imageUrl('avatar')); } /**