From a2ba06898f3bc40d06850f2797aba79e102576fe Mon Sep 17 00:00:00 2001 From: Matt Young Date: Tue, 2 Jul 2024 12:04:24 -0500 Subject: [PATCH] Admin UserEditPage test --- app/Http/Controllers/Admin/UserController.php | 11 ++++++- resources/views/admin/users/edit.blade.php | 13 +++++++- resources/views/admin/users/index.blade.php | 2 +- tests/Feature/Pages/Admin/UsersEditTest.php | 33 +++++++++++++++++++ tests/Feature/Pages/Admin/UsersIndexTest.php | 10 +++--- 5 files changed, 61 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 60d38ef..1da19b7 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -79,7 +79,7 @@ class UserController extends Controller 'email' => ['required', 'email', 'unique:users'], ]); - // Genearte a random password + // Generate a random password $randomPassword = Str::random(12); $user = \App\Models\User::make([ @@ -103,4 +103,13 @@ class UserController extends Controller return redirect('/admin/users'); } + + public function destroy(Request $request, User $user) + { + if (! Auth::user()->is_admin) { + abort(403); + } + $user->delete(); + return redirect()->route('admin.users.index')->with('success', 'User deleted successfully'); + } } diff --git a/resources/views/admin/users/edit.blade.php b/resources/views/admin/users/edit.blade.php index 99c4aad..c78ce44 100644 --- a/resources/views/admin/users/edit.blade.php +++ b/resources/views/admin/users/edit.blade.php @@ -1,6 +1,17 @@ - Edit User + + Edit User + + @if($user->id != Auth::user()->id) +
+ @csrf + @method('DELETE') + + + @endif +
+
diff --git a/resources/views/admin/users/index.blade.php b/resources/views/admin/users/index.blade.php index 137e5e2..46da2fe 100644 --- a/resources/views/admin/users/index.blade.php +++ b/resources/views/admin/users/index.blade.php @@ -4,7 +4,7 @@ Users - Click name to edit + Click name to edit or delete New User diff --git a/tests/Feature/Pages/Admin/UsersEditTest.php b/tests/Feature/Pages/Admin/UsersEditTest.php index 202c7cb..b0f12a6 100644 --- a/tests/Feature/Pages/Admin/UsersEditTest.php +++ b/tests/Feature/Pages/Admin/UsersEditTest.php @@ -5,6 +5,7 @@ use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use function Pest\Laravel\actingAs; +use function Pest\Laravel\delete; use function Pest\Laravel\get; use function Pest\Laravel\patch; @@ -168,3 +169,35 @@ it('allows an administrator to modify a user', function () { ->assertSee($newData['judging_preference']) ->assertSee($newSchool->name); }); +it('has a delete link for the user if not the current user', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.users.edit', $this->users[0])); + $response->assertOk(); + $response->assertSee(route('admin.users.destroy', $this->users[0])); + $response->assertSee('', false); +}); +it('does not show a delete link for the current user', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.users.edit', $this->adminUser)); + $response->assertOk(); + $response->assertDontSee('', false); +}); +it('allows an administrator to destroy a user', function () { + // Arrange + $newUser = User::factory()->create(); + actingAs($this->adminUser); + // Act & Assert + assert($newUser->exists()); + $response = delete(route('admin.users.destroy', $newUser)); + /** @noinspection PhpUnhandledExceptionInspection */ + $response + ->assertSessionHasNoErrors() + ->assertSessionHas('success', 'User deleted successfully') + ->assertRedirect(route('admin.users.index')); + + expect(User::find($newUser->id))->toBeNull(); +}); diff --git a/tests/Feature/Pages/Admin/UsersIndexTest.php b/tests/Feature/Pages/Admin/UsersIndexTest.php index c9198ff..bee9992 100644 --- a/tests/Feature/Pages/Admin/UsersIndexTest.php +++ b/tests/Feature/Pages/Admin/UsersIndexTest.php @@ -10,13 +10,13 @@ use function Pest\Laravel\get; uses(RefreshDatabase::class); beforeEach(function () { - $this->adminUser = User::factory()->admin()->create(); + $this->adminUser = User::factory()->admin()->create(); $this->nonAdminUser = User::factory()->create(); - $this->tabUser = User::factory()->tab()->create(); - $this->users = User::factory(3)->create(); - $this->schools = []; + $this->tabUser = User::factory()->tab()->create(); + $this->users = User::factory(3)->create(); + $this->schools = []; foreach ($this->users as $user) { - $school = School::factory()->create(); + $school = School::factory()->create(); $user->school_id = $school->id; $user->save(); }