163 lines
6.1 KiB
PHP
163 lines
6.1 KiB
PHP
<?php
|
|
|
|
use App\Models\Audition;
|
|
use App\Models\Entry;
|
|
use App\Models\ScoreSheet;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
use function Pest\Laravel\get;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
it('will not answer to guest or normal user', function () {
|
|
get(route('seating.status'))
|
|
->assertRedirect(route('home'));
|
|
actAsNormal();
|
|
get(route('seating.status'))
|
|
->assertRedirect(route('dashboard'))
|
|
->assertSessionHas('error', 'You are not authorized to perform this action');
|
|
});
|
|
it('responds to an admin', function () {
|
|
// Arrange
|
|
actAsAdmin();
|
|
// Act & Assert
|
|
get(route('seating.status'))
|
|
->assertOk();
|
|
});
|
|
it('responds to a tabulator', function () {
|
|
// Arrange
|
|
actAsTab();
|
|
// Act & Assert
|
|
get(route('seating.status'))
|
|
->assertOk();
|
|
});
|
|
it('sends the view a collection of audition data that includes data needed by the view', function () {
|
|
// Arrange
|
|
$auditions = Audition::factory()->count(5)->create();
|
|
actAsAdmin();
|
|
// Act
|
|
$response = get(route('seating.status'));
|
|
// Assert
|
|
foreach ($auditions as $audition) {
|
|
$response->assertOk()
|
|
->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['id'] === $audition->id;
|
|
});
|
|
$response->assertOk()
|
|
->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['name'] === $audition->name;
|
|
});
|
|
}
|
|
});
|
|
it('has correct count info for an audition with 5 entries none scored', function () {
|
|
$audition = Audition::factory()->create();
|
|
Entry::factory()->count(5)->create(['audition_id' => $audition->id]);
|
|
|
|
actAsAdmin();
|
|
$response = get(route('seating.status'));
|
|
$response->assertOk();
|
|
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredEntriesCount'] === 0;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['totalEntriesCount'] === 5;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredPercentage'] === 0;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoringComplete'] === false;
|
|
});
|
|
});
|
|
it('has correct count info for an audition with 8 entries 2 scored', function () {
|
|
$judge = User::factory()->create();
|
|
|
|
$audition = Audition::factory()->create();
|
|
$entries = Entry::factory()->count(2)->create(['audition_id' => $audition->id]);
|
|
$entries->each(fn ($entry) => ScoreSheet::create([
|
|
'user_id' => $judge->id,
|
|
'entry_id' => $entry->id,
|
|
'subscores' => 7,
|
|
]));
|
|
Entry::factory()->count(6)->create(['audition_id' => $audition->id]);
|
|
|
|
actAsAdmin();
|
|
$response = get(route('seating.status'));
|
|
$response->assertOk();
|
|
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredEntriesCount'] === 2;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['totalEntriesCount'] === 8;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredPercentage'] == 25;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoringComplete'] === false;
|
|
});
|
|
});
|
|
|
|
it('has correct count info for an audition with 1 entries 1 scored', function () {
|
|
$judge = User::factory()->create();
|
|
|
|
$audition = Audition::factory()->create();
|
|
$entry = Entry::factory()->create(['audition_id' => $audition->id]);
|
|
ScoreSheet::create([
|
|
'user_id' => $judge->id,
|
|
'entry_id' => $entry->id,
|
|
'subscores' => 3,
|
|
]);
|
|
|
|
actAsAdmin();
|
|
$response = get(route('seating.status'));
|
|
$response->assertOk();
|
|
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredEntriesCount'] === 1;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['totalEntriesCount'] === 1;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoredPercentage'] == 100;
|
|
});
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['scoringComplete'] === true;
|
|
});
|
|
});
|
|
|
|
it('correctly shows a flag when the audition is flagged as seated', function () {
|
|
$audition = Audition::factory()->create();
|
|
|
|
actAsAdmin();
|
|
$response = get(route('seating.status'));
|
|
$response->assertOk();
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['seatsPublished'] === false;
|
|
});
|
|
$audition->addFlag('seats_published');
|
|
$response = get(route('seating.status'));
|
|
$response->assertOk();
|
|
$response->assertViewHas('auditionData', function ($viewAuditionData) use ($audition) {
|
|
return $viewAuditionData[$audition->id]['seatsPublished'] === true;
|
|
});
|
|
});
|
|
it('shows seating auditions', function() {
|
|
$audition = Audition::factory()->create();
|
|
actAsAdmin();
|
|
get(route('seating.status'))
|
|
->assertOk()
|
|
->assertSee($audition->name);
|
|
});
|
|
it('does not show advancement only auditions', function() {
|
|
$audition = Audition::factory()->advancementOnly()->create();
|
|
actAsAdmin();
|
|
get(route('seating.status'))
|
|
->assertOk()
|
|
->assertDontSee($audition->name);
|
|
});
|