From 14b275aa7e394d141f045627f23e3ef014313418 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 2 Oct 2025 20:43:22 -0500 Subject: [PATCH] Work on auth for PrelimJudging --- .../Judging/PrelimJudgingController.php | 7 ++- app/Policies/PrelimDefinitionPolicy.php | 5 ++ routes/judging.php | 2 +- .../Judging/PrelimJudgingControllerTest.php | 53 +++++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 tests/Feature/app/Http/Controllers/Judging/PrelimJudgingControllerTest.php diff --git a/app/Http/Controllers/Judging/PrelimJudgingController.php b/app/Http/Controllers/Judging/PrelimJudgingController.php index ffd5de4..20cf3ca 100644 --- a/app/Http/Controllers/Judging/PrelimJudgingController.php +++ b/app/Http/Controllers/Judging/PrelimJudgingController.php @@ -7,8 +7,11 @@ use App\Models\PrelimDefinition; class PrelimJudgingController extends Controller { - public function prelimEntryList(PrelimDefinition $prelimAudition) + public function prelimEntryList(PrelimDefinition $prelimDefinition) { - dd($prelimAudition); + if (auth()->user()->cannot('judge', $prelimDefinition)) { + return redirect()->route('dashboard')->with('error', 'You are not assigned to judge that prelim audition.'); + } + } } diff --git a/app/Policies/PrelimDefinitionPolicy.php b/app/Policies/PrelimDefinitionPolicy.php index 5b80664..e8d63e1 100644 --- a/app/Policies/PrelimDefinitionPolicy.php +++ b/app/Policies/PrelimDefinitionPolicy.php @@ -35,6 +35,11 @@ class PrelimDefinitionPolicy return $user->is_admin; } + public function judge(User $user, PrelimDefinition $prelimDefinition): bool + { + return $user->judgingAssignments->contains($prelimDefinition->room_id); + } + public function restore(User $user, PrelimDefinition $prelimDefinition): bool { } diff --git a/routes/judging.php b/routes/judging.php index 0eee86b..0919583 100644 --- a/routes/judging.php +++ b/routes/judging.php @@ -19,7 +19,7 @@ Route::middleware(['auth', 'verified', CheckIfCanJudge::class])->prefix('judging // Prelim Audition Related Routes Route::middleware(['auth', 'verified', CheckIfCanJudge::class])->prefix('judging/prelims')->controller(PrelimJudgingController::class)->group(function () { - Route::get('/{audition}', 'prelimEntryList')->name('judging.prelimEntryList'); + Route::get('/{prelimDefinition}', 'prelimEntryList')->name('judging.prelimEntryList'); }); // Bonus score judging routes diff --git a/tests/Feature/app/Http/Controllers/Judging/PrelimJudgingControllerTest.php b/tests/Feature/app/Http/Controllers/Judging/PrelimJudgingControllerTest.php new file mode 100644 index 0000000..a7f3dfc --- /dev/null +++ b/tests/Feature/app/Http/Controllers/Judging/PrelimJudgingControllerTest.php @@ -0,0 +1,53 @@ +create(); + $notJudgeUser = User::factory()->create(); + $finalsRoom = Room::factory()->create(); + $audition = Audition::factory()->create(['room_id' => $finalsRoom->id]); + $room = Room::factory()->create(); + $finalsRoom = Room::factory()->create(); + $prelimDefinition = PrelimDefinition::create([ + 'audition_id' => $audition->id, + 'room_id' => $room->id, + 'scoring_guide_id' => 0, + 'passing_score' => 75, + ]); + $room->addJudge($judgeUser); + $finalsRoom->addJudge($notJudgeUser); + + $this->actingAs($notJudgeUser); + $this->get(route('judging.prelimEntryList', $prelimDefinition)) + ->assertRedirect(route('dashboard')) + ->assertSessionHas('error', 'You are not assigned to judge that prelim audition.'); + $this->actingAs($judgeUser); + $this->get(route('judging.prelimEntryList', $prelimDefinition)) + ->assertOk(); + + }); + + it('shows all auditions entered in the given audition', function () { + + }); + + it('shows scores for previously judged entries', function () { + + }); + + it('has links to enter scores for each entry', function () { + + }); + + it('does not allow modifications to an entry that has finals scores', function () { + + }); +});