diff --git a/app/Http/Controllers/Admin/EntryController.php b/app/Http/Controllers/Admin/EntryController.php index e135475..79e016a 100644 --- a/app/Http/Controllers/Admin/EntryController.php +++ b/app/Http/Controllers/Admin/EntryController.php @@ -76,11 +76,12 @@ class EntryController extends Controller public function create() { - if (! Auth::user()->is_admin) { - abort(403); - } $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); - $auditions = Audition::orderBy('score_order')->get(); + $auditionsRaw = Audition::with('flags')->orderBy('score_order')->get(); + + $auditions = $auditionsRaw->reject(function ($audition) { + return $audition->hasFlag('seats_published') || $audition->hasFlag('advancement_published'); + }); return view('admin.entries.create', ['students' => $students, 'auditions' => $auditions]); } diff --git a/database/factories/AuditionFactory.php b/database/factories/AuditionFactory.php index 124fd37..85bf5b4 100644 --- a/database/factories/AuditionFactory.php +++ b/database/factories/AuditionFactory.php @@ -50,6 +50,9 @@ class AuditionFactory extends Factory 'maximum_grade' => $this->faker->numberBetween(8, 12), 'for_seating' => 1, 'for_advancement' => 1, + 'room_id' => null, + 'order_in_room' => 0, + 'scoring_guide_id' => null, ]; } diff --git a/database/factories/EntryFactory.php b/database/factories/EntryFactory.php index 5ee40fa..80cec5c 100644 --- a/database/factories/EntryFactory.php +++ b/database/factories/EntryFactory.php @@ -26,6 +26,7 @@ class EntryFactory extends Factory 'draw_number' => null, 'for_seating' => 1, 'for_advancement' => 1, + ]; } diff --git a/resources/views/admin/entries/create.blade.php b/resources/views/admin/entries/create.blade.php index 998fa00..d1c4376 100644 --- a/resources/views/admin/entries/create.blade.php +++ b/resources/views/admin/entries/create.blade.php @@ -1,7 +1,7 @@ Create Entry - + @@ -35,7 +35,7 @@ @endif - + Create Entry diff --git a/tests/Feature/Pages/Admin/EntiesCreateTest.php b/tests/Feature/Pages/Admin/EntiesCreateTest.php new file mode 100644 index 0000000..dc71571 --- /dev/null +++ b/tests/Feature/Pages/Admin/EntiesCreateTest.php @@ -0,0 +1,49 @@ +assertRedirect(route('dashboard')); +}); +it('does not respond to a guest', function () { + // Act & Assert + get(route('admin.entries.create')) + ->assertRedirect(route('home')); +}); +it('passes a collection of all students with thier schools to the view', function () { + // Arrange + Student::factory()->count(8)->create(); + $students = Student::with('school')->orderBy('last_name')->orderBy('first_name')->get(); + actAsAdmin(); + // Act & Assert + get(route('admin.entries.create')) + ->assertViewHas('students', $students); +}); +it('passes a collection of available auditions to the view', function () { + // Arrange + for ($i = 3; $i < 9; $i++) { + Audition::factory()->create(['score_order' => $i]); + } + Audition::factory()->count(5)->create(); + $auditions = Audition::with('flags')->orderBy('score_order')->get(); + $auditions = $auditions->toArray(); + $seatedAudition = Audition::factory()->create(['score_order' => 1]); + $seatedAudition->addFlag('seats_published'); + $advancedAudition = Audition::factory()->create(['score_order' => 2]); + $advancedAudition->addFlag('advancement_published'); + actAsAdmin(); + // Act & Assert + $response = get(route('admin.entries.create')); + $viewAuditions = $response->viewData('auditions')->toArray(); + $response->assertOk(); + assertEquals(array_values($auditions), array_values($viewAuditions)); +});