diff --git a/app/Models/Multiplayer/Room.php b/app/Models/Multiplayer/Room.php index fd6e409635f..c310f408a5f 100644 --- a/app/Models/Multiplayer/Room.php +++ b/app/Models/Multiplayer/Room.php @@ -597,7 +597,7 @@ public function startPlay(User $user, PlaylistItem $playlistItem) return $this->getConnection()->transaction(function () use ($user, $playlistItem) { $agg = UserScoreAggregate::new($user, $this); - if ($agg->isNew) { + if ($agg->wasRecentlyCreated) { $this->incrementInstance('participant_count'); } diff --git a/app/Models/Multiplayer/UserScoreAggregate.php b/app/Models/Multiplayer/UserScoreAggregate.php index 784682853f2..38dbe095e19 100644 --- a/app/Models/Multiplayer/UserScoreAggregate.php +++ b/app/Models/Multiplayer/UserScoreAggregate.php @@ -43,8 +43,6 @@ class UserScoreAggregate extends Model ]; protected $table = 'multiplayer_rooms_high'; - public $isNew = false; - public static function getPlaylistItemUserHighScore(Score $score) { return PlaylistItemUserHighScore::firstOrNew([ @@ -86,7 +84,6 @@ public static function new(User $user, Room $room): self $obj = static::lookupOrDefault($user, $room); if (!$obj->exists) { - $obj->isNew = true; $obj->save(); // force a save now to avoid being trolled later. $obj->recalculate(); } diff --git a/tests/Models/Multiplayer/RoomTest.php b/tests/Models/Multiplayer/RoomTest.php index 0a174ded628..e10a870fe00 100644 --- a/tests/Models/Multiplayer/RoomTest.php +++ b/tests/Models/Multiplayer/RoomTest.php @@ -103,6 +103,22 @@ public function testRoomHasEnded() $room->startPlay($user, $playlistItem); } + public function testStartPlay(): void + { + $user = User::factory()->create(); + $room = Room::factory()->create(); + $playlistItem = PlaylistItem::factory()->create(['room_id' => $room]); + + $this->expectCountChange(fn () => $room->participant_count, 1); + $this->expectCountChange(fn () => $room->userHighScores()->count(), 1); + $this->expectCountChange(fn () => $room->scores()->count(), 1); + + $room->startPlay($user, $playlistItem); + $room->refresh(); + + $this->assertSame($user->getKey(), $room->scores()->last()->user_id); + } + public function testMaxAttemptsReached() { $user = User::factory()->create();