Refactor and test FilterController

This commit is contained in:
Matt Young 2025-07-05 15:22:18 -05:00
parent a56e908f8c
commit f3dd8bea0d
2 changed files with 120 additions and 3 deletions

View File

@ -20,14 +20,14 @@ class FilterController extends Controller
session(['adminEntryFilters' => $filters]); 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) public function clearAdminEntryFilter(Request $request)
{ {
session()->forget('adminEntryFilters'); 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) public function adminStudentFilter(Request $request)
@ -40,7 +40,7 @@ class FilterController extends Controller
session(['adminStudentFilters' => $filters]); session(['adminStudentFilters' => $filters]);
return redirect()->back()->with('success', 'Filters Applied'); return redirect(route('admin.students.index'))->with('success', 'Filters Applied');
} }
public function clearAdminStudentFilter() public function clearAdminStudentFilter()

View File

@ -0,0 +1,117 @@
<?php
use App\Models\Entry;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
describe('controls filters on the admin entry page', function () {
it('can set 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,
];
$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');
});
});