From 772115099ff6f391cd7afec858701c3ad40ef58b Mon Sep 17 00:00:00 2001 From: Matt Young Date: Sun, 14 Jul 2024 18:54:28 -0500 Subject: [PATCH] Complete issue --- .../Controllers/Admin/EnsembleController.php | 6 ++- .../Pages/Setup/EnsemblesIndexTest.php | 50 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/EnsembleController.php b/app/Http/Controllers/Admin/EnsembleController.php index d3a79e4..999963b 100644 --- a/app/Http/Controllers/Admin/EnsembleController.php +++ b/app/Http/Controllers/Admin/EnsembleController.php @@ -30,11 +30,14 @@ class EnsembleController extends Controller 'code' => ['required', 'max:6'], 'event_id' => ['required', 'exists:events,id'], ]); + // get the maximum value of rank from the ensembles table where event_id is equal to the request event_id + $maxCode = Ensemble::where('event_id', request('event_id'))->max('rank'); Ensemble::create([ 'name' => request('name'), 'code' => request('code'), 'event_id' => request('event_id'), + 'rank' => $maxCode + 1, ]); return redirect()->route('admin.ensembles.index')->with('success', 'Ensemble created successfully'); @@ -43,7 +46,8 @@ class EnsembleController extends Controller public function destroy(Request $request, Ensemble $ensemble) { if ($ensemble->seats->count() > 0) { - return redirect()->route('admin.ensembles.index')->with('error', 'Ensemble has students seated and cannot be deleted'); + return redirect()->route('admin.ensembles.index')->with('error', + 'Ensemble has students seated and cannot be deleted'); } $ensemble->delete(); diff --git a/tests/Feature/Pages/Setup/EnsemblesIndexTest.php b/tests/Feature/Pages/Setup/EnsemblesIndexTest.php index 45f7b58..04218cb 100644 --- a/tests/Feature/Pages/Setup/EnsemblesIndexTest.php +++ b/tests/Feature/Pages/Setup/EnsemblesIndexTest.php @@ -1,4 +1,4 @@ -name)->toBe($newData['name']) ->and($postCheck->code)->toBe($newData['code']); }); +it('allows an administrator to create an ensemble', function () { + $event = Event::factory()->create(); + $name = 'New Ensemble'; + $code = 'NE'; + $postData = [ + 'name' => $name, + 'code' => $code, + 'event_id' => $event->id, + ]; + actAsAdmin(); + post(route('admin.ensembles.store', $postData)) + ->assertSessionHasNoErrors() + ->assertRedirect(route('admin.ensembles.index')); + $testEnsemble = Ensemble::latest()->get(); + expect($testEnsemble[0]->name)->toBe($name) + ->and($testEnsemble[0]->code)->toBe($code) + ->and($testEnsemble[0]->event_id)->toBe($event->id); +}); +it('assigns the highest rank number to a new ensemble', function () { + // Arrange + $event1 = Event::factory()->create(); + $event2 = Event::factory()->create(); + Ensemble::factory()->create(['event_id' => $event1->id, 'rank' => 1]); + Ensemble::factory()->create(['event_id' => $event1->id, 'rank' => 2]); + Ensemble::factory()->create(['event_id' => $event1->id, 'rank' => 3]); + Ensemble::factory()->create(['event_id' => $event2->id, 'rank' => 1]); + Ensemble::factory()->create(['event_id' => $event2->id, 'rank' => 2]); + $postData1 = [ + 'name' => fake()->firstName, + 'code' => fake()->randomLetter.fake()->randomLetter, + 'event_id' => $event1->id, + ]; + $postData2 = [ + 'name' => fake()->firstName, + 'code' => fake()->randomLetter.fake()->randomLetter, + 'event_id' => $event2->id, + ]; + // Act & Assert + actAsAdmin(); + post(route('admin.ensembles.store', $postData1)); + $testEnsemble = Ensemble::where('name', $postData1['name'])->get(); + expect($testEnsemble[0]->rank)->toBe(4); + post(route('admin.ensembles.store', $postData2)); + $testEnsemble = Ensemble::where('name', $postData2['name'])->get(); + expect($testEnsemble[0]->rank)->toBe(3); + +});