get(route('admin.auditions.index'))->assertRedirect(route('home')); actAsNormal(); $this->get(route('admin.auditions.index'))->assertRedirect(route('dashboard')); actAsTab(); $this->get(route('admin.auditions.index'))->assertRedirect(route('dashboard')); }); it('shows the audition index page', function () { $auditions = Audition::factory()->count(3)->create(); actAsAdmin(); $response = $this->get(route('admin.auditions.index'))->assertOk() ->assertViewIs('admin.auditions.index'); foreach ($auditions as $audition) { $response->assertSee($audition->name); } }); }); describe('AuditionController::create', function () { it('denies access to a non-admin user', function () { $this->get(route('admin.auditions.create'))->assertRedirect(route('home')); actAsNormal(); $this->get(route('admin.auditions.create'))->assertRedirect(route('dashboard')); actAsTab(); $this->get(route('admin.auditions.create'))->assertRedirect(route('dashboard')); }); it('shows the audition create page', function () { actAsAdmin(); $events = Event::factory()->count(3)->create(); $response = $this->get(route('admin.auditions.create'))->assertOk() ->assertViewIs('admin.auditions.create'); foreach ($events as $event) { $response->assertSee($event->name); } }); }); describe('AuditionController::store', function () { it('denies access to a non-admin user', function () { $this->post(route('admin.auditions.store'))->assertRedirect(route('home')); actAsNormal(); $this->post(route('admin.auditions.store'))->assertRedirect(route('dashboard')); actAsTab(); $this->post(route('admin.auditions.store'))->assertRedirect(route('dashboard')); }); it('creates an audition', function () { actAsAdmin(); $response = $this->post(route('admin.auditions.store'), [ 'name' => 'Test Audition', 'event_id' => Event::factory()->create()->id, 'entry_deadline' => '08/22/2025', 'entry_fee' => '20.00', 'minimum_grade' => '7', 'maximum_grade' => '12', 'for_advancement' => 'on', 'for_seating' => 'on', ]); $response->assertRedirect(route('admin.auditions.index'))->assertSessionHas('success'); $this->assertDatabaseHas('auditions', [ 'name' => 'Test Audition', ]); }); }); describe('AuditionController::edit', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->get(route('admin.auditions.edit', $audition))->assertRedirect(route('home')); actAsNormal(); $this->get(route('admin.auditions.edit', $audition))->assertRedirect(route('dashboard')); actAsTab(); $this->get(route('admin.auditions.edit', $audition))->assertRedirect(route('dashboard')); }); it('shows the audition edit page', function () { $audition = Audition::factory()->create(); actAsAdmin(); $response = $this->get(route('admin.auditions.edit', $audition))->assertOk() ->assertViewIs('admin.auditions.edit'); $response->assertSee($audition->name) ->assertSee(route('admin.auditions.update', $audition)); }); }); describe('AuditionController::update', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->patch(route('admin.auditions.update', $audition))->assertRedirect(route('home')); actAsNormal(); $this->patch(route('admin.auditions.update', $audition))->assertRedirect(route('dashboard')); actAsTab(); $this->patch(route('admin.auditions.update', $audition))->assertRedirect(route('dashboard')); }); it('updates an audition', function () { $audition = Audition::factory()->create(); actAsAdmin(); $response = $this->patch(route('admin.auditions.update', $audition), [ 'name' => 'Test Auditionnnnnn', 'event_id' => Event::factory()->create()->id, 'entry_deadline' => '08/22/2025', 'entry_fee' => '20.00', 'minimum_grade' => '7', 'maximum_grade' => '12', ]); $response->assertRedirect(route('admin.auditions.index'))->assertSessionHas('success'); $this->assertDatabaseHas('auditions', [ 'name' => 'Test Auditionnnnnn', ]); }); }); describe('AuditionController::reorder', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->post(route('admin.auditions.reorder'))->assertRedirect(route('home')); actAsNormal(); $this->post(route('admin.auditions.reorder'))->assertRedirect(route('dashboard')); actAsTab(); $this->post(route('admin.auditions.reorder'))->assertRedirect(route('dashboard')); }); it('reorders auditions', function () { $audition1 = Audition::factory()->create(); $audition2 = Audition::factory()->create(); $audition3 = Audition::factory()->create(); $audition4 = Audition::factory()->create(); $audition5 = Audition::factory()->create(); $input = [ 'order' => [ 1 => $audition3->id, 2 => $audition1->id, 3 => $audition4->id, 4 => $audition5->id, 5 => $audition2->id, ], ]; actAsAdmin(); $response = $this->post(route('admin.auditions.reorder'), $input); $response->assertJson(['status' => 'success']); $audition1->refresh(); $audition2->refresh(); $audition3->refresh(); $audition4->refresh(); $audition5->refresh(); expect($audition1->score_order)->toBe(2); expect($audition2->score_order)->toBe(5); expect($audition3->score_order)->toBe(1); expect($audition4->score_order)->toBe(3); expect($audition5->score_order)->toBe(4); }); }); describe('AuditionController::roomUpdate', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->post(route('admin.roomUpdate'))->assertRedirect(route('home')); actAsNormal(); $this->post(route('admin.roomUpdate'))->assertRedirect(route('dashboard')); actAsTab(); $this->post(route('admin.roomUpdate'))->assertRedirect(route('dashboard')); }); it('updates the room for an audition', function () { $audition1 = Audition::factory()->create(); $audition2 = Audition::factory()->create(); $audition3 = Audition::factory()->create(); $audition4 = Audition::factory()->create(); $audition5 = Audition::factory()->create(); $oddRoom = Room::factory()->create(['name' => 'odd']); $evenRoom = Room::factory()->create(['name' => 'even']); actAsAdmin(); $response = $this->post(route('admin.roomUpdate'), [ [ 'id' => $audition1->id, 'room_id' => $oddRoom->id, 'room_order' => 3, ], [ 'id' => $audition2->id, 'room_id' => $evenRoom->id, 'room_order' => 2, ], [ 'id' => $audition3->id, 'room_id' => $oddRoom->id, 'room_order' => 2, ], [ 'id' => $audition4->id, 'room_id' => $evenRoom->id, 'room_order' => 1, ], [ 'id' => $audition5->id, 'room_id' => $oddRoom->id, 'room_order' => 1, ], ]); $response->assertJson(['status' => 'success']); $audition1->refresh(); $audition2->refresh(); $audition3->refresh(); $audition4->refresh(); $audition5->refresh(); expect($audition1->room_id)->toEqual($oddRoom->id); expect($audition1->order_in_room)->toEqual(3); expect($audition2->room_id)->toEqual($evenRoom->id); expect($audition2->order_in_room)->toEqual(2); }); }); describe('AuditionController::scoringGuideUpdate', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->post(route('ajax.assignScoringGuideToAudition'))->assertRedirect(route('home')); actAsNormal(); $this->post(route('ajax.assignScoringGuideToAudition'))->assertRedirect(route('dashboard')); actAsTab(); $this->post(route('ajax.assignScoringGuideToAudition'))->assertRedirect(route('dashboard')); }); it('updates the scoring guide for an audition', function () { $audition = Audition::factory()->create(); $guide = ScoringGuide::factory()->create(); actAsAdmin(); $response = $this->post(route('ajax.assignScoringGuideToAudition'), [ 'audition_id' => $audition->id, 'new_guide_id' => $guide->id, ]); $response->assertJson(['success' => true]); $audition->refresh(); expect($audition->scoring_guide_id)->toEqual($guide->id); }); it('fails if an invalid audition is called for', function () { $audition = Audition::factory()->create(); $guide = ScoringGuide::factory()->create(); actAsAdmin(); $response = $this->post(route('ajax.assignScoringGuideToAudition'), [ 'audition_id' => $audition->id + 1, 'new_guide_id' => $guide->id, ]); $response->assertJson(['success' => false]); }); }); describe('AuditionController::destroy', function () { it('denies access to a non-admin user', function () { $audition = Audition::factory()->create(); $this->delete(route('admin.auditions.destroy', $audition))->assertRedirect(route('home')); actAsNormal(); $this->delete(route('admin.auditions.destroy', $audition))->assertRedirect(route('dashboard')); actAsTab(); $this->delete(route('admin.auditions.destroy', $audition))->assertRedirect(route('dashboard')); }); it('deletes an audition', function () { $audition = Audition::factory()->create(); actAsAdmin(); $this->delete(route('admin.auditions.destroy', $audition))->assertRedirect(route('admin.auditions.index'))->assertSessionHas('success'); $this->assertDatabaseMissing('auditions', [ 'id' => $audition->id, ]); }); it('will not delete an audition with entries', function () { $audition = Audition::factory()->create(); $entry = Entry::factory()->forAudition($audition)->create(); actAsAdmin(); $this->delete(route('admin.auditions.destroy', $audition)) ->assertRedirect(route('admin.auditions.index')) ->assertSessionHas('error', 'Cannot delete an audition with entries.'); expect(Audition::find($audition->id)->exists())->toBeTrue(); }); });