room = Room::factory()->create(); }); it('can return its auditions in room order', function () { $trombone = Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 3, 'order_in_room' => 2]); $trumpet = Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 1, 'order_in_room' => 4]); $horn = Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 2, 'order_in_room' => 1]); $euphonium = Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 4, 'order_in_room' => 5]); $tuba = Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 5, 'order_in_room' => 3]); expect($this->room->auditions()->count())->toEqual(5) ->and($this->room->auditions()->first())->toBeInstanceOf(Audition::class); $orderedAuditions = $this->room->auditions; expect($orderedAuditions[0]->id)->toEqual($horn->id) ->and($orderedAuditions[1]->id)->toEqual($trombone->id) ->and($orderedAuditions[2]->id)->toEqual($tuba->id) ->and($orderedAuditions[3]->id)->toEqual($trumpet->id) ->and($orderedAuditions[4]->id)->toEqual($euphonium->id); }); it('can return its entries', function () { Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 3, 'order_in_room' => 2]); Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 1, 'order_in_room' => 4]); Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 2, 'order_in_room' => 1]); Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 4, 'order_in_room' => 5]); Audition::factory()->create(['room_id' => $this->room->id, 'score_order' => 5, 'order_in_room' => 3]); foreach (Audition::all() as $audition) { Entry::factory()->count(3)->create(['audition_id' => $audition->id]); } expect($this->room->entries()->count())->toEqual(15) ->and($this->room->entries()->first())->toBeInstanceOf(Entry::class); }); it('can return judges by calling either users or judges', function () { $judges = User::factory()->count(5)->create(); foreach ($judges as $judge) { $this->room->judges()->attach($judge); } expect($this->room->judges()->count())->toEqual(5) ->and($this->room->judges()->first())->toBeInstanceOf(User::class) ->and($this->room->users()->count())->toEqual(5) ->and($this->room->users()->first())->toBeInstanceOf(User::class); }); it('can add a judge', function () { $judge = User::factory()->create(); $this->room->addJudge($judge); expect($this->room->judges()->count())->toEqual(1) ->and($this->room->judges()->first())->toBeInstanceOf(User::class); }); it('can remove a judge', function () { $judge = User::factory()->create(); $this->room->addJudge($judge); expect($this->room->judges()->count())->toEqual(1) ->and($this->room->judges()->first())->toBeInstanceOf(User::class); $this->room->removeJudge($judge); expect($this->room->judges()->count())->toEqual(0); });