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([
'',
], false);
}
});
it('shows a seating list from when called with an ensemble id', function () {
// Arrange
$ensembles = Ensemble::factory()->count(5)->create();
// Act & Assert
actAsAdmin();
foreach ($ensembles as $ensemble) {
$response = get(route('admin.ensembles.seatingLimits.ensemble', $ensemble));
$response->assertOk();
$response->assertSeeInOrder(['
name), '
'], false);
$response->assertSee(route('admin.ensembles.seatingLimits.ensemble.set', $ensemble));
}
});
it('shows a field for each audition for a called ensemble', 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),
]);
}
// Act & Assert
actAsAdmin();
$response = get(route('admin.ensembles.seatingLimits.ensemble', $ensemble));
$response->assertOk()
->assertSeeInOrder(['
name), '
'], false);
foreach ($auditions as $audition) {
$response->assertSeeInOrder([
'
id, e($audition->name), 'id, ']', '
',
], false);
}
});
it('shows existing seating limits on the fields', 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),
]);
}
// Act & Assert
actAsAdmin();
$response = get(route('admin.ensembles.seatingLimits.ensemble', $ensemble));
$response->assertOk();
foreach ($auditions as $audition) {
$limit = $ensemble->seatingLimits->where('audition_id', $audition->id)->first()->maximum_accepted;
$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);
}
});