assertRedirect(route('home')); actAsNormal(); get(route('admin.ensembles.seatingLimits')) ->assertRedirect('/dashboard') ->assertSessionHas('error', 'You are not authorized to perform this action'); actAsAdmin(); get(route('admin.ensembles.seatingLimits')) ->assertOk(); }); it('shows a dropdown of ensembles', function () { // Arrange $ensembles = Ensemble::factory()->count(5)->create(); actAsAdmin(); // Act & Assert $response = get(route('admin.ensembles.seatingLimits')); $response->assertOk(); foreach ($ensembles as $ensemble) { $response->assertSeeInOrder([ 'id.']"', 'value="', $limit, '"', ], false); } }); it('allows an administrator to modify seating limits', function () { // Arrange $ensemble = Ensemble::factory()->create(); $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); foreach ($auditions as $audition) { SeatingLimit::create([ 'ensemble_id' => $ensemble->id, 'audition_id' => $audition->id, 'maximum_accepted' => fake()->numberBetween(1, 15), ]); } $newData = [ 'audition' => [], ]; foreach ($auditions as $audition) { $newData['audition'][$audition->id] = 21; } // Act & Assert actAsAdmin(); $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); /** @noinspection PhpUnhandledExceptionInspection */ $response->assertSessionHasNoErrors() ->assertSessionHas('success', 'Seating limits set for '.$ensemble->name) ->assertRedirect(route('admin.ensembles.seatingLimits.ensemble', $ensemble)); $check = Ensemble::find($ensemble->id); foreach ($check->seatingLimits as $seatingLimit) { expect($seatingLimit->maximum_accepted)->toBe(21); } }); it('does not allow a guest to update seating limits', function () { // Arrange $ensemble = Ensemble::factory()->create(); $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); foreach ($auditions as $audition) { SeatingLimit::create([ 'ensemble_id' => $ensemble->id, 'audition_id' => $audition->id, 'maximum_accepted' => fake()->numberBetween(1, 15), ]); } $newData = [ 'audition' => [], ]; foreach ($auditions as $audition) { $newData['audition'][$audition->id] = 21; } $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); $response->assertRedirect(route('home')); $check = Ensemble::find($ensemble->id); foreach ($check->seatingLimits as $seatingLimit) { expect($seatingLimit->maximum_accepted)->toBeLessThan(16); } }); it('does not allow a normal user to update seating limits', function () { // Arrange $ensemble = Ensemble::factory()->create(); $auditions = Audition::factory()->count(5)->create(['event_id' => $ensemble->event_id]); foreach ($auditions as $audition) { SeatingLimit::create([ 'ensemble_id' => $ensemble->id, 'audition_id' => $audition->id, 'maximum_accepted' => fake()->numberBetween(1, 15), ]); } $newData = [ 'audition' => [], ]; foreach ($auditions as $audition) { $newData['audition'][$audition->id] = 21; } actAsNormal(); $response = post(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble), $newData); $response->assertRedirect(route('dashboard')) ->assertSessionHas('error', 'You are not authorized to perform this action'); $check = Ensemble::find($ensemble->id); foreach ($check->seatingLimits as $seatingLimit) { expect($seatingLimit->maximum_accepted)->toBeLessThan(16); } });