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);
+ });
+});