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; }); });