From 8e6c966edea9eb1523bf0421680c240a129c1753 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Wed, 3 Jul 2024 02:21:22 -0500 Subject: [PATCH] AdminStudentCreate Test --- .../views/admin/students/create.blade.php | 4 +- .../Feature/Pages/Admin/StudentCreateTest.php | 128 ++++++++++++++++++ tests/Feature/Pages/Admin/UsersCreateTest.php | 6 +- 3 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 tests/Feature/Pages/Admin/StudentCreateTest.php diff --git a/resources/views/admin/students/create.blade.php b/resources/views/admin/students/create.blade.php index 40bca42..fd3556a 100644 --- a/resources/views/admin/students/create.blade.php +++ b/resources/views/admin/students/create.blade.php @@ -1,7 +1,7 @@ Create Student - + @@ -22,7 +22,7 @@ - + Create Student diff --git a/tests/Feature/Pages/Admin/StudentCreateTest.php b/tests/Feature/Pages/Admin/StudentCreateTest.php new file mode 100644 index 0000000..3a86d63 --- /dev/null +++ b/tests/Feature/Pages/Admin/StudentCreateTest.php @@ -0,0 +1,128 @@ +adminUser = User::factory()->admin()->create(); + $this->schools = School::factory()->count(5)->create(); +}); + +it('only shows for an admin user', function () { + // Act & Assert + $checkRoute = 'admin.students.create'; + get(route($checkRoute))->assertRedirect(route('home')); + actingAs($this->adminUser); + get(route($checkRoute))->assertOk(); + actingAs(User::factory()->create()); + get(route($checkRoute))->assertRedirect(route('dashboard')); +}); +it('submits a post request', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.students.create')); + $response->assertOk(); + $response->assertSeeInOrder([ + 'form', + 'method', + 'POST', + 'action=', + route('admin.students.store'), + '/form', + ]); +}); +it('has all needed fields', function () { + // Arrange + actingAs($this->adminUser); + $fieldNames = [ + 'first_name', + 'last_name', + ]; + // Act & Assert + $response = get(route('admin.students.create')); + $response->assertOk(); + foreach ($fieldNames as $fieldName) { + $response->assertSeeInOrder([ + 'input', + 'name=', + $fieldName, + '/', + ]); + } + $response->assertSeeInOrder([ + 'select', + 'name=', + 'school_id', + '/select', + ]); + $response->assertSeeInOrder([ + 'select', + 'name=', + 'grade', + '/select', + ]); +}); +it('has all schools in a dropdown', function () { + // Arrange + actingAs($this->adminUser); + // Act & Assert + $response = get(route('admin.students.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(User::factory()->create()); + // Act & Assert + $response = post(route('admin.students.store'), [ + 'first_name' => 'New First Name', + 'last_name' => 'New Last Name', + ]); + $response->assertRedirect(route('dashboard')); +}); +it('allows an administrator to create a student', function () { + // Arrange + $newSchool = School::factory()->create(['name' => 'New School']); + actingAs($this->adminUser); + $newData = [ + 'first_name' => 'New First Name', + 'last_name' => 'New Last Name', + 'grade' => '9', + 'school_id' => $newSchool->id, + ]; + // Act + $response = post(route('admin.students.store'), $newData); + /** @noinspection PhpUnhandledExceptionInspection */ + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('admin.students.index')); + + // Get the latest created user + $createdStudent = Student::where('first_name', $newData['first_name'])->first(); + expect($createdStudent->first_name)->toBe($newData['first_name']) + ->and($createdStudent->last_name)->toBe($newData['last_name']) + ->and($createdStudent->grade)->toEqual($newData['grade']) + ->and($createdStudent->school->name)->toBe($newSchool->name); + + get(route('admin.students.index')) + ->assertOk() + ->assertSee($newData['first_name']) + ->assertSee($newData['last_name']) + ->assertSee($newData['grade']) + ->assertSee($newSchool->name); +}); diff --git a/tests/Feature/Pages/Admin/UsersCreateTest.php b/tests/Feature/Pages/Admin/UsersCreateTest.php index 6818903..35ee3eb 100644 --- a/tests/Feature/Pages/Admin/UsersCreateTest.php +++ b/tests/Feature/Pages/Admin/UsersCreateTest.php @@ -26,11 +26,11 @@ beforeEach(function () { it('only shows for an admin user', function () { // Act & Assert $checkRoute = 'admin.users.create'; - get(route($checkRoute, $this->users[0]))->assertRedirect(route('home')); + get(route($checkRoute))->assertRedirect(route('home')); actingAs($this->adminUser); - get(route($checkRoute, $this->users[0]))->assertOk(); + get(route($checkRoute))->assertOk(); actingAs($this->nonAdminUser); - get(route($checkRoute, $this->users[0]))->assertRedirect(route('dashboard')); + get(route($checkRoute))->assertRedirect(route('dashboard')); }); it('submits a post request', function () { // Arrange