From b7b5d0fc943a3a80619b67088d52f177d045e273 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 11 Sep 2025 23:02:37 -0500 Subject: [PATCH] Most basic management function of prelim definitions done. Need to add delete method and listener for logging next. --- .../Admin/PrelimDefinitionController.php | 24 +++++++- .../createOrUpdate.blade.php | 35 +++++++---- routes/admin.php | 1 + .../Admin/PrelimDefinitionControllerTest.php | 58 +++++++++++++++++++ 4 files changed, 104 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/Admin/PrelimDefinitionController.php b/app/Http/Controllers/Admin/PrelimDefinitionController.php index e7bb25b..cd094c5 100644 --- a/app/Http/Controllers/Admin/PrelimDefinitionController.php +++ b/app/Http/Controllers/Admin/PrelimDefinitionController.php @@ -25,9 +25,11 @@ class PrelimDefinitionController extends Controller $auditions = Audition::doesntHave('prelimDefinition')->get(); $rooms = Room::all(); $guides = ScoringGuide::all(); - $action = 'create'; + $method = 'POST'; + $action = route('admin.prelim_definitions.store'); + $prelim = false; - return view('admin.prelim_definitions.createOrUpdate', compact('auditions', 'rooms', 'guides', 'action')); + return view('admin.prelim_definitions.createOrUpdate', compact('auditions', 'rooms', 'guides', 'method', 'action', 'prelim')); } public function store(PrelimDefinitionStoreOrUpdateRequest $request) @@ -35,11 +37,27 @@ class PrelimDefinitionController extends Controller $validated = $request->validated(); PrelimDefinition::create($validated); - return redirect()->route('admin.prelim_definitions.index'); + return redirect()->route('admin.prelim_definitions.index')->with('success', 'Prelim definition created'); } public function edit(PrelimDefinition $prelimDefinition) { + $auditions = Audition::doesntHave('prelimDefinition')->get(); + $rooms = Room::all(); + $guides = ScoringGuide::all(); + $method = 'PATCH'; + $action = route('admin.prelim_definitions.update', $prelimDefinition); + $prelim = $prelimDefinition; + + return view('admin.prelim_definitions.createOrUpdate', compact('auditions', 'rooms', 'guides', 'method', 'action', 'prelim')); } + + public function update(PrelimDefinition $prelimDefinition, PrelimDefinitionStoreOrUpdateRequest $request) + { + $validated = $request->validated(); + $prelimDefinition->update($validated); + + return redirect()->route('admin.prelim_definitions.index')->with('success', 'Prelim definition updated'); + } } diff --git a/resources/views/admin/prelim_definitions/createOrUpdate.blade.php b/resources/views/admin/prelim_definitions/createOrUpdate.blade.php index be14659..ed620b0 100644 --- a/resources/views/admin/prelim_definitions/createOrUpdate.blade.php +++ b/resources/views/admin/prelim_definitions/createOrUpdate.blade.php @@ -2,16 +2,28 @@ Manage Prelim Auditions
- Create Prelim Audition + + @if($prelim) + Modify Prelim - {{ $prelim->audition->name }} + @else + Create Prelim Audition + @endif + + + - Audition - - @foreach($auditions as $audition) - - @endforeach + @if($prelim) + + @else + + @foreach($auditions as $audition) + + @endforeach + @endif + @error('audition_id')
{{ $message }}
@@ -20,7 +32,7 @@ Room @foreach($rooms as $room) - + @endforeach @error('room_id') @@ -30,16 +42,17 @@ Scoring Guide @foreach($guides as $guide) - + @endforeach @error('scoring_guide_id')
{{ $message }}
@enderror - + - +
diff --git a/routes/admin.php b/routes/admin.php index d5e505a..54bee53 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -211,6 +211,7 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')-> Route::get('/new', 'create')->name('admin.prelim_definitions.create'); Route::post('/', 'store')->name('admin.prelim_definitions.store'); Route::get('/{prelimDefinition}', 'edit')->name('admin.prelim_definitions.edit'); + Route::patch('/{prelimDefinition}', 'update')->name('admin.prelim_definitions.update'); Route::delete('/{prelimDefinition}', 'destroy')->name('admin.prelim_definitions.destroy'); }); }); diff --git a/tests/Feature/app/Http/Controllers/Admin/PrelimDefinitionControllerTest.php b/tests/Feature/app/Http/Controllers/Admin/PrelimDefinitionControllerTest.php index 06db972..3b7dd2b 100644 --- a/tests/Feature/app/Http/Controllers/Admin/PrelimDefinitionControllerTest.php +++ b/tests/Feature/app/Http/Controllers/Admin/PrelimDefinitionControllerTest.php @@ -88,3 +88,61 @@ describe('PrelimDefinitionController::store', function () { ->assertRedirect(route('admin.prelim_definitions.create')); }); }); + +describe('PrelimDefinitionController::edit', function () { + beforeEach(function () { + $this->audition = Audition::factory()->create(); + $this->prelim = PrelimDefinition::create([ + 'audition_id' => $this->audition->id, + 'room_id' => 0, + 'scoring_guide_id' => 0, + 'passing_score' => 75, + ]); + }); + it('denies access to a non-admin user', function () { + $this->get(route('admin.prelim_definitions.edit', $this->prelim))->assertRedirect(route('home')); + actAsNormal(); + $this->get(route('admin.prelim_definitions.edit', $this->prelim))->assertRedirect(route('dashboard')); + actAsTab(); + $this->get(route('admin.prelim_definitions.edit', $this->prelim))->assertRedirect(route('dashboard')); + }); + it('shows a form to edit a prelim definition', function () { + actAsAdmin(); + $response = $this->get(route('admin.prelim_definitions.edit', $this->prelim)) + ->assertViewIs('admin.prelim_definitions.createOrUpdate') + ->assertSee($this->audition->name) + ->assertSee('PATCH') + ->assertSee(route('admin.prelim_definitions.update', $this->prelim)); + }); +}); + +describe('PrelimDefinitionController::update', function () { + beforeEach(function () { + $this->audition = Audition::factory()->create(); + $this->prelim = PrelimDefinition::create([ + 'audition_id' => $this->audition->id, + 'room_id' => 0, + 'scoring_guide_id' => 0, + 'passing_score' => 75, + ]); + }); + it('denies access to a non-admin user', function () { + $this->patch(route('admin.prelim_definitions.update', $this->prelim))->assertRedirect(route('home')); + actAsNormal(); + $this->patch(route('admin.prelim_definitions.update', $this->prelim))->assertRedirect(route('dashboard')); + actAsTab(); + $this->patch(route('admin.prelim_definitions.update', $this->prelim))->assertRedirect(route('dashboard')); + }); + it('can update a prelim definition', function () { + actAsAdmin(); + $response = $this->patch(route('admin.prelim_definitions.update', $this->prelim), [ + 'audition_id' => $this->audition->id, + 'room_id' => 0, + 'scoring_guide_id' => 0, + 'passing_score' => 90, + ]); + $response + ->assertRedirect(route('admin.prelim_definitions.index')); + expect($this->prelim->fresh()->passing_score)->toEqual(90); + }); +});