From 396a1dcc076afb09b7c07b521ce61cc011eee3aa Mon Sep 17 00:00:00 2001 From: Matt Young Date: Tue, 2 Jul 2024 11:26:50 -0500 Subject: [PATCH] AdminUsersCreate Test --- resources/views/admin/users/create.blade.php | 4 +- tests/Feature/Pages/Admin/UsersCreateTest.php | 140 ++++++++++++++++++ tests/Feature/Pages/Admin/UsersEditTest.php | 10 ++ 3 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 tests/Feature/Pages/Admin/UsersCreateTest.php diff --git a/resources/views/admin/users/create.blade.php b/resources/views/admin/users/create.blade.php index 5e28ea4..ebc9fdf 100644 --- a/resources/views/admin/users/create.blade.php +++ b/resources/views/admin/users/create.blade.php @@ -1,7 +1,7 @@ Create User - + @@ -18,7 +18,7 @@ - + Create User diff --git a/tests/Feature/Pages/Admin/UsersCreateTest.php b/tests/Feature/Pages/Admin/UsersCreateTest.php new file mode 100644 index 0000000..6818903 --- /dev/null +++ b/tests/Feature/Pages/Admin/UsersCreateTest.php @@ -0,0 +1,140 @@ +adminUser = User::factory()->admin()->create(); + $this->nonAdminUser = User::factory()->create(); + $this->tabUser = User::factory()->tab()->create(); + $this->users = User::factory(3)->create(); + $this->schools = []; + foreach ($this->users as $user) { + $school = School::factory()->create(); + $user->school_id = $school->id; + $user->save(); + } +}); + +it('only shows for an admin user', function () { + // Act & Assert + $checkRoute = 'admin.users.create'; + get(route($checkRoute, $this->users[0]))->assertRedirect(route('home')); + actingAs($this->adminUser); + get(route($checkRoute, $this->users[0]))->assertOk(); + actingAs($this->nonAdminUser); + get(route($checkRoute, $this->users[0]))->assertRedirect(route('dashboard')); +}); +it('submits a post request', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.users.create')); + $response->assertOk(); + $response->assertSeeInOrder([ + 'form', + 'method', + 'POST', + 'action=', + route('admin.users.store'), + '/form', + ]); +}); +it('has all needed fields', function () { + // Arrange + actingAs($this->adminUser); + $fieldNames = [ + 'first_name', + 'last_name', + 'email', + 'cell_phone', + 'judging_preference', + ]; + // Act & Assert + $response = get(route('admin.users.create')); + $response->assertOk(); + foreach ($fieldNames as $fieldName) { + $response->assertSeeInOrder([ + 'input', + 'name=', + $fieldName, + '/', + ]); + } + $response->assertSeeInOrder([ + 'select', + 'name', + 'school_id', + '/select', + ]); +}); +it('has all schools in a dropdown', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.users.create')); + $response->assertOk(); + foreach ($this->schools as $school) { + $response->assertSeeInOrder([ + 'option', + 'value=', + $school->id, + $school->name, + '/option', + ]); + } +}); +it('rejects a submission by a non administrator', function () { + // Arrange + actingAs($this->nonAdminUser); + // Act & Assert + $response = post(route('admin.users.store'), [ + 'first_name' => 'New First Name', + 'last_name' => 'New Last Name', + ]); + $response->assertRedirect(route('dashboard')); +}); +it('allows an administrator to create a user', function () { + // Arrange + $newSchool = School::factory()->create(['name' => 'New School']); + actingAs($this->adminUser); + $newData = [ + 'first_name' => 'New First Name', + 'last_name' => 'New Last Name', + 'email' => 'new@emailllllll.com', + 'cell_phone' => '123-456-7890', + 'judging_preference' => 'New Judging Preference', + 'school_id' => $newSchool->id, + ]; + // Act + $response = post(route('admin.users.store'), $newData); + /** @noinspection PhpUnhandledExceptionInspection */ + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('admin.users.index')); + + // Get the latest created user + $createdUser = User::where('email', $newData['email'])->first(); + expect($createdUser->first_name)->toBe($newData['first_name']) + ->and($createdUser->last_name)->toBe($newData['last_name']) + ->and($createdUser->email)->toBe($newData['email']) + ->and($createdUser->cell_phone)->toBe($newData['cell_phone']) + ->and($createdUser->judging_preference)->toBe($newData['judging_preference']) + ->and($createdUser->school->name)->toBe($newSchool->name); + + get(route('admin.users.index')) + ->assertOk() + ->assertSee($newData['first_name']) + ->assertSee($newData['last_name']) + ->assertSee($newData['email']) + ->assertSee($newData['cell_phone']) + ->assertSee($newData['judging_preference']) + ->assertSee($newSchool->name); +}); diff --git a/tests/Feature/Pages/Admin/UsersEditTest.php b/tests/Feature/Pages/Admin/UsersEditTest.php index eacde34..202c7cb 100644 --- a/tests/Feature/Pages/Admin/UsersEditTest.php +++ b/tests/Feature/Pages/Admin/UsersEditTest.php @@ -147,6 +147,7 @@ it('allows an administrator to modify a user', function () { ]; // Act $response = patch(route('admin.users.update', $this->users[0]), $newData); + /** @noinspection PhpUnhandledExceptionInspection */ $response ->assertSessionHasNoErrors() ->assertRedirect(route('admin.users.index')); @@ -157,4 +158,13 @@ it('allows an administrator to modify a user', function () { ->and($this->users[0]->cell_phone)->toBe($newData['cell_phone']) ->and($this->users[0]->judging_preference)->toBe($newData['judging_preference']) ->and($this->users[0]->school->name)->toBe($newSchool->name); + + get(route('admin.users.index')) + ->assertOk() + ->assertSee($newData['first_name']) + ->assertSee($newData['last_name']) + ->assertSee($newData['email']) + ->assertSee($newData['cell_phone']) + ->assertSee($newData['judging_preference']) + ->assertSee($newSchool->name); });