From ead4b14d94d6daecdc7869c9c0f4ce597ef8f58c Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sun, 28 Jan 2018 14:08:14 +0000 Subject: [PATCH] Updated user profile image delete to delete all uploads Also moved test and made more comprehensive --- app/Repos/UserRepo.php | 21 +++++++++++---------- app/Services/ImageService.php | 1 + tests/ImageTest.php | 24 ++++++++++++++++++++++++ tests/UserProfileTest.php | 16 +--------------- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/app/Repos/UserRepo.php b/app/Repos/UserRepo.php index a159606da..e21568d63 100644 --- a/app/Repos/UserRepo.php +++ b/app/Repos/UserRepo.php @@ -1,9 +1,11 @@ user = $user; $this->role = $role; $this->entityRepo = $entityRepo; - $this->imageService = $imageService; } /** @@ -88,7 +88,7 @@ class UserRepo // Get avatar from gravatar and save if (!config('services.disable_services')) { try { - $avatar = \Images::saveUserGravatar($user); + $avatar = Images::saveUserGravatar($user); $user->avatar()->associate($avatar); $user->save(); } catch (Exception $e) { @@ -143,16 +143,17 @@ class UserRepo /** * Remove the given user from storage, Delete all related content. * @param User $user + * @throws Exception */ public function destroy(User $user) { $user->socialAccounts()->delete(); $user->delete(); - // Deleting User profile pics - $profilePic = $user->image_id ? $user->avatar->findOrFail($user->image_id) : FALSE; - if ($profilePic) { - $this->imageService->destroyImage($profilePic); + // Delete user profile images + $profileImages = $images = Image::where('type', '=', 'user')->where('created_by', '=', $user->id)->get(); + foreach ($profileImages as $image) { + Images::destroyImage($image); } } @@ -165,7 +166,7 @@ class UserRepo */ public function getActivity(User $user, $count = 20, $page = 0) { - return \Activity::userActivity($user, $count, $page); + return Activity::userActivity($user, $count, $page); } /** diff --git a/app/Services/ImageService.php b/app/Services/ImageService.php index 5eea285e5..f87e980df 100644 --- a/app/Services/ImageService.php +++ b/app/Services/ImageService.php @@ -236,6 +236,7 @@ class ImageService extends UploadService * Destroys an Image object along with its files and thumbnails. * @param Image $image * @return bool + * @throws Exception */ public function destroyImage(Image $image) { diff --git a/tests/ImageTest.php b/tests/ImageTest.php index c75617c0e..881f73b55 100644 --- a/tests/ImageTest.php +++ b/tests/ImageTest.php @@ -184,4 +184,28 @@ class ImageTest extends TestCase $this->assertTrue($testImageData === $uploadedImageData, "Uploaded image file data does not match our test image as expected"); } + public function test_user_images_deleted_on_user_deletion() + { + $editor = $this->getEditor(); + $this->actingAs($editor); + + $imageName = 'profile.png'; + $relPath = $this->getTestImagePath('gallery', $imageName); + $this->deleteImage($relPath); + + $file = $this->getTestImage($imageName); + $this->call('POST', '/images/user/upload', [], [], ['file' => $file], []); + $this->call('POST', '/images/user/upload', [], [], ['file' => $file], []); + + $profileImages = Image::where('type', '=', 'user')->where('created_by', '=', $editor->id)->get(); + $this->assertTrue($profileImages->count() === 2, "Found profile images does not match upload count"); + + $userDelete = $this->asAdmin()->delete("/settings/users/{$editor->id}"); + $userDelete->assertStatus(302); + $this->assertDatabaseMissing('images', [ + 'type' => 'user', + 'created_by' => $editor->id + ]); + } + } \ No newline at end of file diff --git a/tests/UserProfileTest.php b/tests/UserProfileTest.php index e6b0b4f5f..c1e254090 100644 --- a/tests/UserProfileTest.php +++ b/tests/UserProfileTest.php @@ -115,19 +115,5 @@ class UserProfileTest extends BrowserKitTest ->visit('/books') ->pageHasElement('.featured-image-container'); } - - public function test_user_delete() - { - $newUser = $this->getNewBlankUser(); - $this->actingAs($newUser); - $this->asAdmin()->visit('/settings/users/' . $newUser->id . '/delete') - ->see('Delete User') - ->press('Confirm') - ->seePageIs('/settings/users/') - ->see('USERS')->see('ADD NEW USER'); - - $this->dontSeeInDatabase('images', [ - 'id' => $newUser->image_id - ]); - } + }