From 3abf0e09aa902926cb6639a50c18e538846757a3 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Thu, 3 Jul 2025 15:43:44 -0500 Subject: [PATCH] Create tests for app/Models/NominationEnsembleEntry --- app/Models/Room.php | 4 +- tests/Feature/app/Models/RoomTest.php | 72 +++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 tests/Feature/app/Models/RoomTest.php diff --git a/app/Models/Room.php b/app/Models/Room.php index be84eb1..ce615ad 100644 --- a/app/Models/Room.php +++ b/app/Models/Room.php @@ -24,9 +24,9 @@ class Room extends Model return $this->hasManyThrough( Entry::class, Audition::class, - 'room_id', // Foreign key on the auditions table + 'room_id', // Foreign key on the audition table 'audition_id', //Foreign key on the Entries table - 'id', // Local key on the rooms table + 'id', // Local key on the room table 'id' // Local key on the Auditions table ); } diff --git a/tests/Feature/app/Models/RoomTest.php b/tests/Feature/app/Models/RoomTest.php new file mode 100644 index 0000000..64b4111 --- /dev/null +++ b/tests/Feature/app/Models/RoomTest.php @@ -0,0 +1,72 @@ +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); +});