From df4095d45aed6f33c6ad95afc687bfb05ba0a545 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Fri, 5 Jul 2024 10:26:36 -0500 Subject: [PATCH] SeatingLImits Page Tests done --- .../Controllers/Admin/EnsembleController.php | 10 +- .../seatingLimits-limitForm.blade.php | 9 +- .../admin/ensembles/seatingLimits.blade.php | 9 +- .../Feature/Pages/Setup/SeatingLimitsTest.php | 174 ++++++++++++++++++ 4 files changed, 193 insertions(+), 9 deletions(-) create mode 100644 tests/Feature/Pages/Setup/SeatingLimitsTest.php diff --git a/app/Http/Controllers/Admin/EnsembleController.php b/app/Http/Controllers/Admin/EnsembleController.php index da056db..d3a79e4 100644 --- a/app/Http/Controllers/Admin/EnsembleController.php +++ b/app/Http/Controllers/Admin/EnsembleController.php @@ -67,12 +67,16 @@ class EnsembleController extends Controller public function seatingLimits(Ensemble $ensemble) { - $ensembles = Ensemble::with('event')->orderBy('event_id')->get(); + $limits = []; + $ensembles = Ensemble::with(['event'])->orderBy('event_id')->get(); if ($ensemble->exists()) { $ensemble->load('seatingLimits'); + foreach ($ensemble->seatingLimits as $lim) { + $limits[$lim->audition_id] = $lim->maximum_accepted; + } } - return view('admin.ensembles.seatingLimits', compact('ensemble', 'ensembles')); + return view('admin.ensembles.seatingLimits', compact('ensemble', 'ensembles', 'limits')); } public function seatingLimitsSet(Request $request, Ensemble $ensemble) @@ -96,7 +100,7 @@ class EnsembleController extends Controller ); } - return redirect()->route('admin.ensembles.seatingLimits')->with('success', + return redirect()->route('admin.ensembles.seatingLimits.ensemble', $ensemble)->with('success', 'Seating limits set for '.$ensemble->name); } diff --git a/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php b/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php index da1f81b..21ba468 100644 --- a/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php +++ b/resources/views/admin/ensembles/seatingLimits-limitForm.blade.php @@ -1,9 +1,8 @@ @php - $limits = []; - foreach ($ensemble->seatingLimits as $lim) { - $limits[$lim->audition_id] = $lim->maximum_accepted; - } - +/** +* @var \App\Models\Ensemble $ensemble The ensemble for which a seating form is shown + * @var array $limits An array of audition_id => maximum_accepted for the ensemble +**/ @endphp {{ $ensemble->name }} diff --git a/resources/views/admin/ensembles/seatingLimits.blade.php b/resources/views/admin/ensembles/seatingLimits.blade.php index 67ad1f7..1987c93 100644 --- a/resources/views/admin/ensembles/seatingLimits.blade.php +++ b/resources/views/admin/ensembles/seatingLimits.blade.php @@ -11,7 +11,14 @@ `{{ route('admin.ensembles.seatingLimits') }}/${event.target.value}`"> @foreach($ensembles as $optionEnsemble) - + @php + if ($ensemble && $ensemble->id == $optionEnsemble->id) { + $selected = 'selected'; + } else { + $selected = ''; + } + @endphp + @endforeach diff --git a/tests/Feature/Pages/Setup/SeatingLimitsTest.php b/tests/Feature/Pages/Setup/SeatingLimitsTest.php new file mode 100644 index 0000000..a10ff9e --- /dev/null +++ b/tests/Feature/Pages/Setup/SeatingLimitsTest.php @@ -0,0 +1,174 @@ +assertRedirect(route('home')); + actAsNormal(); + get(route('admin.ensembles.seatingLimits')) + ->assertRedirect('/dashboard') + ->assertSessionHas('error', 'You are not authorized to perform this action'); + actAsAdmin(); + get(route('admin.ensembles.seatingLimits')) + ->assertOk(); +}); +it('shows a dropdown of ensembles', function () { + // Arrange + $ensembles = Ensemble::factory()->count(5)->create(); + actAsAdmin(); + // Act & Assert + $response = get(route('admin.ensembles.seatingLimits')); + $response->assertOk(); + foreach ($ensembles as $ensemble) { + $response->assertSeeInOrder([ + 'id.']"', 'value="', $limit, '"', + ], false); + } +}); + +it('allows an administrator to modify seating limits', function () { + // Arrange + $ensemble = Ensemble::factory()->create(); + $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); + foreach ($auditions as $audition) { + SeatingLimit::create([ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $audition->id, + 'maximum_accepted' => fake()->numberBetween(1, 15), + ]); + } + $newData = [ + 'audition' => [], + ]; + foreach ($auditions as $audition) { + $newData['audition'][$audition->id] = 21; + } + // Act & Assert + actAsAdmin(); + $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); + /** @noinspection PhpUnhandledExceptionInspection */ + $response->assertSessionHasNoErrors() + ->assertSessionHas('success', 'Seating limits set for '.$ensemble->name) + ->assertRedirect(route('admin.ensembles.seatingLimits.ensemble', $ensemble)); + $check = Ensemble::find($ensemble->id); + foreach ($check->seatingLimits as $seatingLimit) { + expect($seatingLimit->maximum_accepted)->toBe(21); + } +}); +it('does not allow a guest to update seating limits', function () { + // Arrange + $ensemble = Ensemble::factory()->create(); + $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); + foreach ($auditions as $audition) { + SeatingLimit::create([ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $audition->id, + 'maximum_accepted' => fake()->numberBetween(1, 15), + ]); + } + $newData = [ + 'audition' => [], + ]; + foreach ($auditions as $audition) { + $newData['audition'][$audition->id] = 21; + } + $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); + $response->assertRedirect(route('home')); + $check = Ensemble::find($ensemble->id); + foreach ($check->seatingLimits as $seatingLimit) { + expect($seatingLimit->maximum_accepted)->toBeLessThan(16); + } +}); +it('does not allow a normal user to update seating limits', function () { + // Arrange + $ensemble = Ensemble::factory()->create(); + $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); + foreach ($auditions as $audition) { + SeatingLimit::create([ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $audition->id, + 'maximum_accepted' => fake()->numberBetween(1, 15), + ]); + } + $newData = [ + 'audition' => [], + ]; + foreach ($auditions as $audition) { + $newData['audition'][$audition->id] = 21; + } + actAsNormal(); + $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); + $response->assertRedirect(route('dashboard')) + ->assertSessionHas('error', 'You are not authorized to perform this action'); + $check = Ensemble::find($ensemble->id); + foreach ($check->seatingLimits as $seatingLimit) { + expect($seatingLimit->maximum_accepted)->toBeLessThan(16); + } +});