From f3dd8bea0d7864fb317ee4821dccdbc74a1e36c1 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sat, 5 Jul 2025 15:22:18 -0500 Subject: [PATCH] Refactor and test FilterController --- app/Http/Controllers/FilterController.php | 6 +- .../Http/Controllers/FilterControllerTest.php | 117 ++++++++++++++++++ 2 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 tests/Feature/app/Http/Controllers/FilterControllerTest.php diff --git a/app/Http/Controllers/FilterController.php b/app/Http/Controllers/FilterController.php index 84e7a4e..84a820f 100644 --- a/app/Http/Controllers/FilterController.php +++ b/app/Http/Controllers/FilterController.php @@ -20,14 +20,14 @@ class FilterController extends Controller session(['adminEntryFilters' => $filters]); - return redirect('/admin/entries')->with('success', 'Filters Applied'); + return redirect(route('admin.entries.index'))->with('success', 'Filters Applied'); } public function clearAdminEntryFilter(Request $request) { session()->forget('adminEntryFilters'); - return redirect('/admin/entries')->with('success', 'Filters Cleared'); + return redirect(route('admin.entries.index'))->with('success', 'Filters Cleared'); } public function adminStudentFilter(Request $request) @@ -40,7 +40,7 @@ class FilterController extends Controller session(['adminStudentFilters' => $filters]); - return redirect()->back()->with('success', 'Filters Applied'); + return redirect(route('admin.students.index'))->with('success', 'Filters Applied'); } public function clearAdminStudentFilter() diff --git a/tests/Feature/app/Http/Controllers/FilterControllerTest.php b/tests/Feature/app/Http/Controllers/FilterControllerTest.php new file mode 100644 index 0000000..73bfcec --- /dev/null +++ b/tests/Feature/app/Http/Controllers/FilterControllerTest.php @@ -0,0 +1,117 @@ +create(); + $requestArray = [ + 'id_filter' => $entry->id, + 'audition_filter' => $entry->audition->id, + 'school_filter' => $entry->student->school_id, + 'grade_filter' => $entry->student->grade, + 'first_name_filter' => $entry->student->first_name, + 'last_name_filter' => $entry->student->last_name, + 'entry_type_filter' => 'seating', + 'entries_per_page_filter' => 20, + ]; + $expectedArray = [ + 'id' => $entry->id, + 'audition' => $entry->audition->id, + 'school' => $entry->student->school_id, + 'grade' => $entry->student->grade, + 'first_name' => $entry->student->first_name, + 'last_name' => $entry->student->last_name, + 'entry_type' => 'seating', + 'entries_per_page' => 20, + ]; + $response = $this->post(route('admin_entry_filter.set'), $requestArray); + $response->assertRedirect(route('admin.entries.index')) + ->assertSessionHas('success', 'Filters Applied') + ->assertSessionHas('adminEntryFilters', $expectedArray); + }); + + it('can clear filters for the adminEntry page', function () { + actAsAdmin(); + $entry = Entry::factory()->create(); + $requestArray = [ + 'id_filter' => $entry->id, + 'audition_filter' => $entry->audition->id, + 'school_filter' => $entry->student->school_id, + 'grade_filter' => $entry->student->grade, + 'first_name_filter' => $entry->student->first_name, + 'last_name_filter' => $entry->student->last_name, + 'entry_type_filter' => 'seating', + 'entries_per_page_filter' => 20, + ]; + $expectedArray = [ + 'id' => $entry->id, + 'audition' => $entry->audition->id, + 'school' => $entry->student->school_id, + 'grade' => $entry->student->grade, + 'first_name' => $entry->student->first_name, + 'last_name' => $entry->student->last_name, + 'entry_type' => 'seating', + 'entries_per_page' => 20, + ]; + $this->post(route('admin_entry_filter.set'), $requestArray)->assertSessionHas('adminEntryFilters', + $expectedArray); + + $response = $this->get(route('admin_entry_filter.clear'), $requestArray); + $response->assertRedirect(route('admin.entries.index')) + ->assertSessionHas('success', 'Filters Cleared') + ->assertSessionMissing('adminEntryFilters'); + }); +}); + +describe('controls filters on the admin student page', function () { + it('can set filters for the admin student page', function () { + actAsAdmin(); + $entry = Entry::factory()->create(); + $requestArray = [ + 'school_filter' => $entry->student->school_id, + 'grade_filter' => $entry->student->grade, + 'first_name_filter' => $entry->student->first_name, + 'last_name_filter' => $entry->student->last_name, + ]; + $expectedArray = [ + 'school' => $entry->student->school_id, + 'grade' => $entry->student->grade, + 'first_name' => $entry->student->first_name, + 'last_name' => $entry->student->last_name, + ]; + $response = $this->post(route('admin.students.filter.set'), $requestArray); + $response->assertRedirect(route('admin.students.index')) + ->assertSessionHas('success', 'Filters Applied') + ->assertSessionHas('adminStudentFilters', $expectedArray); + }); + + it('can clear filters for the admin student page', function () { + actAsAdmin(); + $entry = Entry::factory()->create(); + $requestArray = [ + 'school_filter' => $entry->student->school_id, + 'grade_filter' => $entry->student->grade, + 'first_name_filter' => $entry->student->first_name, + 'last_name_filter' => $entry->student->last_name, + ]; + $expectedArray = [ + 'school' => $entry->student->school_id, + 'grade' => $entry->student->grade, + 'first_name' => $entry->student->first_name, + 'last_name' => $entry->student->last_name, + ]; + $this->post(route('admin.students.filter.set'), $requestArray)->assertSessionHas('adminStudentFilters', + $expectedArray); + + $response = $this->get(route('admin.students.filter.clear')); + $response->assertRedirect(route('admin.students.index')) + ->assertSessionHas('success', 'Filters Cleared') + ->assertSessionMissing('adminStudentFilters'); + }); +});