Complete issue

This commit is contained in:
Matt Young 2024-07-14 18:54:28 -05:00
parent 0597831dc1
commit 772115099f
2 changed files with 54 additions and 2 deletions

View File

@ -30,11 +30,14 @@ class EnsembleController extends Controller
'code' => ['required', 'max:6'], 'code' => ['required', 'max:6'],
'event_id' => ['required', 'exists:events,id'], '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([ Ensemble::create([
'name' => request('name'), 'name' => request('name'),
'code' => request('code'), 'code' => request('code'),
'event_id' => request('event_id'), 'event_id' => request('event_id'),
'rank' => $maxCode + 1,
]); ]);
return redirect()->route('admin.ensembles.index')->with('success', 'Ensemble created successfully'); 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) public function destroy(Request $request, Ensemble $ensemble)
{ {
if ($ensemble->seats->count() > 0) { 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(); $ensemble->delete();

View File

@ -1,4 +1,4 @@
<?php <?php /** @noinspection PhpUnhandledExceptionInspection */
use App\Models\Audition; use App\Models\Audition;
use App\Models\Ensemble; use App\Models\Ensemble;
@ -10,6 +10,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
use function Pest\Laravel\delete; use function Pest\Laravel\delete;
use function Pest\Laravel\get; use function Pest\Laravel\get;
use function Pest\Laravel\patch; use function Pest\Laravel\patch;
use function Pest\Laravel\post;
uses(RefreshDatabase::class); uses(RefreshDatabase::class);
@ -132,3 +133,50 @@ it('allows an administrator to update an ensemble', function () {
expect($postCheck->name)->toBe($newData['name']) expect($postCheck->name)->toBe($newData['name'])
->and($postCheck->code)->toBe($newData['code']); ->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);
});