From 5bd9ecb8df50ac64839aac2b98cb1c0d3505c6e5 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 13:28:37 +0100 Subject: [PATCH 01/11] Created DeleteUser request Signed-off-by: snipe --- app/Http/Requests/DeleteUserRequest.php | 89 +++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 app/Http/Requests/DeleteUserRequest.php diff --git a/app/Http/Requests/DeleteUserRequest.php b/app/Http/Requests/DeleteUserRequest.php new file mode 100644 index 000000000..a640d6a9d --- /dev/null +++ b/app/Http/Requests/DeleteUserRequest.php @@ -0,0 +1,89 @@ +|string> + */ + public function rules(): array + { + + $user_to_delete = User::find(request()->route('user')); + + if ($user_to_delete) { + $this->merge([ + 'user' => request()->route('user'), + 'admin_id' => Auth::user()->id, + 'managed_users' => $user_to_delete->managesUsers()->count(), + 'managed_locations' => $user_to_delete->managedLocations()->count(), + 'assigned_assets' => $user_to_delete->assets()->count(), + 'assigned_licenses' => $user_to_delete->licenses()->count(), + 'assigned_accessories' => $user_to_delete->accessories()->count(), + ]); + } + + return [ + 'id' => ['exists:users,id'], + 'user' => Rule::notIn([Auth::user()->id]), + 'managed_users' => Rule::in([0]), + 'managed_locations' => Rule::in([0]), + 'assigned_assets' => Rule::in([0]), + 'assigned_licenses' => Rule::in([0]), + 'assigned_accessories' => Rule::in([0]), + ]; + } + + public function messages(): array + { + + $user_to_delete = User::find(request()->route('user')); + $messages = ['id.exists' => trans('admin/users/message.user_not_found')]; + + if ($user_to_delete) { + + $messages = array_merge([ + + // Cannot delete yourself + 'user.not_in' => trans('admin/users/message.error.cannot_delete_yourself'), + + // managed users is not 0 + 'managed_users.in' => trans_choice('admin/users/message.error.delete_has_users_var', $user_to_delete->managesUsers()->count(), ['count' => $user_to_delete->managesUsers()->count()]), + + // managed locations is not 0 + 'managed_locations.in' => trans_choice('admin/users/message.error.delete_has_locations_var', $user_to_delete->managedLocations()->count(), ['count' => $user_to_delete->managedLocations()->count()]), + + + // assigned_assets is not 0 + 'assigned_assets.in' => trans_choice('admin/users/message.error.delete_has_assets_var', $user_to_delete->assets()->count(), ['count' => $user_to_delete->assets()->count()]), + + // assigned licenses is not 0 + 'assigned_licenses.in' => trans_choice('admin/users/message.error.delete_has_licenses_var', $user_to_delete->licenses()->count(), ['count' => $user_to_delete->licenses()->count()]), + + // assigned accessories is not 0 + 'assigned_accessories.in' => trans_choice('admin/users/message.error.delete_has_accessories_var', $user_to_delete->accessories()->count(), ['count' => $user_to_delete->accessories()->count()]), + + ], $messages); + } + + return $messages; + } +} From 065a47a44640794846c04fb6905aaf741df47a7d Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 13:28:44 +0100 Subject: [PATCH 02/11] Use the DeleteUser request Signed-off-by: snipe --- app/Http/Controllers/Api/UsersController.php | 35 ++++--------------- .../Controllers/Users/UsersController.php | 5 +-- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 4b3b00e7a..848adb66f 100644 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -22,6 +22,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Log; +use App\Http\Requests\DeleteUserRequest; class UsersController extends Controller { @@ -530,40 +531,16 @@ class UsersController extends Controller * @param int $id * @return \Illuminate\Http\Response */ - public function destroy($id) + public function destroy(DeleteUserRequest $request, $id) { $this->authorize('delete', User::class); - $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc'); $user = Company::scopeCompanyables($user)->find($id); $this->authorize('delete', $user); + if ($user) { - - if ($user->id === Auth::id()) { - // Redirect to the user management page - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.cannot_delete_yourself'))); - } - - if (($user->assets) && ($user->assets->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans_choice('admin/users/message.error.delete_has_assets_var', $user->assets()->count(), ['count'=> $user->assets()->count()]))); - } - - if (($user->licenses) && ($user->licenses->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans_choice('admin/users/message.error.delete_has_licenses_var', $user->licenses()->count(), ['count'=> $user->licenses()->count()]))); - } - - if (($user->accessories) && ($user->accessories->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans_choice('admin/users/message.error.delete_has_accessories_var', $user->accessories()->count(), ['count'=> $user->accessories()->count()]))); - } - - if (($user->managedLocations()) && ($user->managedLocations()->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans_choice('admin/users/message.error.delete_has_locations_var', $user->managedLocations()->count(), ['count'=> $user->managedLocations()->count()]))); - } - - if (($user->managesUsers()) && ($user->managesUsers()->count() > 0)) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans_choice('admin/users/message.error.delete_has_users_var', $user->managesUsers()->count(), ['count'=> $user->managesUsers()->count()]))); - } - + if ($user->delete()) { // Remove the user's avatar if they have one @@ -579,7 +556,7 @@ class UsersController extends Controller } } - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.error.delete'))); + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/users/message.user_not_found', compact('id')))); } /** diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 8df584292..4d891be19 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Users; use App\Helpers\Helper; use App\Http\Controllers\Controller; +use App\Http\Requests\DeleteUserRequest; use App\Http\Requests\ImageUploadRequest; use App\Http\Requests\SaveUserRequest; use App\Models\Actionlog; @@ -333,11 +334,11 @@ class UsersController extends Controller * @return \Illuminate\Http\RedirectResponse * @throws \Illuminate\Auth\Access\AuthorizationException */ - public function destroy($id = null) + public function destroy(DeleteUserRequest $request, $id = null) { $this->authorize('delete', User::class); - $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc')->withTrashed(); + $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc'); $user = Company::scopeCompanyables($user)->find($id); From d4c080c7e4a5bdfcf0c342a4d772e12cf03a730d Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 13:40:32 +0100 Subject: [PATCH 03/11] Use the form request on the UI controller Signed-off-by: snipe --- .../Controllers/Users/UsersController.php | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index 4d891be19..b40694f38 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -343,39 +343,6 @@ class UsersController extends Controller if ($user) { - // Check if we are not trying to delete ourselves - if ($user->id === Auth::id()) { - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans('admin/users/message.error.cannot_delete_yourself')); - } - - if (($user->assets()) && ($user->assets()->count() > 0)) { - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans_choice('admin/users/message.error.delete_has_assets_var', $user->assets()->count(), ['count'=> $user->assets()->count()])); - } - - if (($user->licenses()) && ($user->licenses()->count() > 0)) { - return redirect()->route('users.index')->with('error', trans_choice('admin/users/message.error.delete_has_licenses_var', $user->licenses()->count(), ['count'=> $user->licenses()->count()])); - } - - if (($user->accessories()) && ($user->accessories()->count() > 0)) { - // Redirect to the user management page - return redirect()->route('users.index')->with('error', trans_choice('admin/users/message.error.delete_has_accessories_var', $user->accessories()->count(), ['count'=> $user->accessories()->count()])); - } - - if (($user->managedLocations()) && ($user->managedLocations()->count() > 0)) { - // Redirect to the user management page - return redirect()->route('users.index') - ->with('error', trans_choice('admin/users/message.error.delete_has_locations_var', $user->managedLocations()->count(), ['count'=> $user->managedLocations()->count()])); - } - - if (($user->managesUsers()) && ($user->managesUsers()->count() > 0)) { - return redirect()->route('users.index') - ->with('error', trans_choice('admin/users/message.error.delete_has_users_var', $user->managesUsers()->count(), ['count'=> $user->managesUsers()->count()])); - } - // Delete the user $user->delete(); return redirect()->route('users.index')->with('success', trans('admin/users/message.success.delete')); From 5cdb2b7163bf2fce74ecbe0b2feb93babe5aba35 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:00:35 +0100 Subject: [PATCH 04/11] Check that the user was not aready deleted Signed-off-by: snipe --- app/Http/Controllers/Users/UsersController.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php index b40694f38..e88572b58 100755 --- a/app/Http/Controllers/Users/UsersController.php +++ b/app/Http/Controllers/Users/UsersController.php @@ -341,8 +341,7 @@ class UsersController extends Controller $user = User::with('assets', 'assets.model', 'consumables', 'accessories', 'licenses', 'userloc'); $user = Company::scopeCompanyables($user)->find($id); - - if ($user) { + if (($user) && ($user->deleted_at = '')) { // Delete the user $user->delete(); return redirect()->route('users.index')->with('success', trans('admin/users/message.success.delete')); From 47420a802a5294b44beef5095e019214269f8923 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:02:04 +0100 Subject: [PATCH 05/11] More (failing) tests Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index a3bb7364b..ad4f7f282 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -2,6 +2,7 @@ namespace Tests\Feature\Users\Ui; +use App\Models\LicenseSeat; use App\Models\Location; use App\Models\User; use Tests\TestCase; @@ -40,6 +41,37 @@ class DeleteUserTest extends TestCase $this->followRedirects($response)->assertSee('Error'); } + public function testDisallowUserDeletionIfStillHaveAccessories() + { + $user = User::factory()->create(); + Accessory::factory()->count(3)->create(['assigned_to' => $user->id]); + + $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); + + $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) + ->delete(route('users.destroy', $user->id)) + ->assertStatus(302) + ->assertRedirect(route('users.index')); + + $this->followRedirects($response)->assertSee('Error'); + } + + public function testDisallowUserDeletionIfStillHaveLicenses() + { + $user = User::factory()->create(); + LicenseSeat::factory()->count(3)->create(['assigned_to' => $user->id]); + + $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); + + $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) + ->delete(route('users.destroy', $user->id)) + ->assertStatus(302) + ->assertRedirect(route('users.index')); + + $this->followRedirects($response)->assertSee('Error'); + } + + public function testAllowUserDeletionIfNotManagingLocations() { $manager = User::factory()->create(); @@ -61,5 +93,18 @@ class DeleteUserTest extends TestCase $this->actingAs(User::factory()->editUsers()->create())->assertFalse($manager->isDeletable()); } + public function testUsersCannotDeleteThemselves() + { + $manager = User::factory()->deleteUsers()->create(); + $this->actingAs(User::factory()->deleteUsers()->create())->assertTrue($manager->isDeletable()); + + $response = $this->actingAs($manager) + ->delete(route('users.destroy', $manager->id)) + ->assertStatus(302) + ->assertRedirect(route('users.index')); + + $this->followRedirects($response)->assertSee('Error'); + } + } From 64dd8f5d6533000821216dc379d09758493db514 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:03:33 +0100 Subject: [PATCH 06/11] Missed a use statement Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index ad4f7f282..f5e4b46b0 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -4,6 +4,7 @@ namespace Tests\Feature\Users\Ui; use App\Models\LicenseSeat; use App\Models\Location; +use App\Models\Accessory; use App\Models\User; use Tests\TestCase; From 2479ccc4c636af1517cdc5184c2d9903177ffefa Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:07:18 +0100 Subject: [PATCH 07/11] Fixed accessory assignment Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index f5e4b46b0..2be224056 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -45,7 +45,7 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfStillHaveAccessories() { $user = User::factory()->create(); - Accessory::factory()->count(3)->create(['assigned_to' => $user->id]); + Accessory::factory()->count(3)->checkedOutToUser()->create($user); $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); From a2346e466633759cc3e5a2744760bca5acc2423d Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:09:57 +0100 Subject: [PATCH 08/11] Changed numbers Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index 2be224056..9fb5ba15d 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -15,7 +15,7 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfStillManagingPeople() { $manager = User::factory()->create(); - User::factory()->count(3)->create(['manager_id' => $manager->id]); + User::factory()->count(1)->create(['manager_id' => $manager->id]); $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($manager->isDeletable()); @@ -30,7 +30,7 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfStillManagingLocations() { $manager = User::factory()->create(); - Location::factory()->count(3)->create(['manager_id' => $manager->id]); + Location::factory()->count(2)->create(['manager_id' => $manager->id]); $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($manager->isDeletable()); @@ -45,7 +45,7 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfStillHaveAccessories() { $user = User::factory()->create(); - Accessory::factory()->count(3)->checkedOutToUser()->create($user); + Accessory::factory()->count(3)->checkedOutToUser($user)->create(); $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); @@ -60,7 +60,7 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfStillHaveLicenses() { $user = User::factory()->create(); - LicenseSeat::factory()->count(3)->create(['assigned_to' => $user->id]); + LicenseSeat::factory()->count(4)->create(['assigned_to' => $user->id]); $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); From c5cbe37007c075057e18c61499449688d008c7e9 Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:13:51 +0100 Subject: [PATCH 09/11] Added view permissions for the redirects Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index 9fb5ba15d..991043fdb 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -17,7 +17,7 @@ class DeleteUserTest extends TestCase $manager = User::factory()->create(); User::factory()->count(1)->create(['manager_id' => $manager->id]); - $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($manager->isDeletable()); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($manager->isDeletable()); $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) ->delete(route('users.destroy', $manager->id)) @@ -32,7 +32,7 @@ class DeleteUserTest extends TestCase $manager = User::factory()->create(); Location::factory()->count(2)->create(['manager_id' => $manager->id]); - $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($manager->isDeletable()); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($manager->isDeletable()); $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) ->delete(route('users.destroy', $manager->id)) @@ -47,7 +47,7 @@ class DeleteUserTest extends TestCase $user = User::factory()->create(); Accessory::factory()->count(3)->checkedOutToUser($user)->create(); - $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($user->isDeletable()); $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) ->delete(route('users.destroy', $user->id)) @@ -62,7 +62,7 @@ class DeleteUserTest extends TestCase $user = User::factory()->create(); LicenseSeat::factory()->count(4)->create(['assigned_to' => $user->id]); - $this->actingAs(User::factory()->deleteUsers()->create())->assertFalse($user->isDeletable()); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($user->isDeletable()); $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) ->delete(route('users.destroy', $user->id)) @@ -76,7 +76,7 @@ class DeleteUserTest extends TestCase public function testAllowUserDeletionIfNotManagingLocations() { $manager = User::factory()->create(); - $this->actingAs(User::factory()->deleteUsers()->create())->assertTrue($manager->isDeletable()); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertTrue($manager->isDeletable()); $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) ->delete(route('users.destroy', $manager->id)) @@ -91,13 +91,13 @@ class DeleteUserTest extends TestCase { $manager = User::factory()->create(); Location::factory()->create(['manager_id' => $manager->id]); - $this->actingAs(User::factory()->editUsers()->create())->assertFalse($manager->isDeletable()); + $this->actingAs(User::factory()->editUsers()->viewUsers()->create())->assertFalse($manager->isDeletable()); } public function testUsersCannotDeleteThemselves() { - $manager = User::factory()->deleteUsers()->create(); - $this->actingAs(User::factory()->deleteUsers()->create())->assertTrue($manager->isDeletable()); + $manager = User::factory()->deleteUsers()->viewUsers()->create(); + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertTrue($manager->isDeletable()); $response = $this->actingAs($manager) ->delete(route('users.destroy', $manager->id)) From 374c6845d6e13c1b4c8c5810e524ae779c6e1d4f Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:16:28 +0100 Subject: [PATCH 10/11] Added test if user has assets Signed-off-by: snipe --- tests/Feature/Users/Ui/DeleteUserTest.php | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index 991043fdb..137a498d6 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -2,11 +2,13 @@ namespace Tests\Feature\Users\Ui; +use Tests\TestCase; use App\Models\LicenseSeat; use App\Models\Location; use App\Models\Accessory; use App\Models\User; -use Tests\TestCase; + +use App\Models\Asset; class DeleteUserTest extends TestCase { @@ -94,6 +96,22 @@ class DeleteUserTest extends TestCase $this->actingAs(User::factory()->editUsers()->viewUsers()->create())->assertFalse($manager->isDeletable()); } + public function testDisallowUserDeletionIfTheyStillHaveAssets() + { + $user = User::factory()->create(); + Asset::factory()->count(6)->checkedOutToUser($user)->create(); + + $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($user->isDeletable()); + + $response = $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create()) + ->delete(route('users.destroy', $user->id)) + ->assertStatus(302) + ->assertRedirect(route('users.index')); + + $this->followRedirects($response)->assertSee('Error'); + } + + public function testUsersCannotDeleteThemselves() { $manager = User::factory()->deleteUsers()->viewUsers()->create(); From 7ac315e1eb22e51851519661e8bafee9a005cdfc Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 5 Jun 2024 14:50:45 +0100 Subject: [PATCH 11/11] Fixed tests Signed-off-by: snipe --- app/Http/Requests/DeleteUserRequest.php | 3 +++ tests/Feature/Users/Ui/DeleteUserTest.php | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/Http/Requests/DeleteUserRequest.php b/app/Http/Requests/DeleteUserRequest.php index a640d6a9d..8136bd68e 100644 --- a/app/Http/Requests/DeleteUserRequest.php +++ b/app/Http/Requests/DeleteUserRequest.php @@ -11,6 +11,9 @@ use Illuminate\Http\Request; class DeleteUserRequest extends FormRequest { + + protected $redirectRoute = 'users.index'; + /** * Determine if the user is authorized to make this request. */ diff --git a/tests/Feature/Users/Ui/DeleteUserTest.php b/tests/Feature/Users/Ui/DeleteUserTest.php index 137a498d6..0f5fbdcec 100644 --- a/tests/Feature/Users/Ui/DeleteUserTest.php +++ b/tests/Feature/Users/Ui/DeleteUserTest.php @@ -99,7 +99,14 @@ class DeleteUserTest extends TestCase public function testDisallowUserDeletionIfTheyStillHaveAssets() { $user = User::factory()->create(); - Asset::factory()->count(6)->checkedOutToUser($user)->create(); + $asset = Asset::factory()->create(); + + $this->actingAs(User::factory()->checkoutAssets()->create()) + ->post(route('hardware.checkout.store', $asset->id), [ + 'checkout_to_type' => 'user', + 'assigned_user' => $user->id, + 'name' => 'Changed Name', + ]); $this->actingAs(User::factory()->deleteUsers()->viewUsers()->create())->assertFalse($user->isDeletable());