From 5162e211e0dc5c14d78045716a9ab56b271543b1 Mon Sep 17 00:00:00 2001 From: 7OMI <36586477+7OMI@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:03:14 +0200 Subject: [PATCH 1/2] fix: update level_id in experiences table when levelled up --- src/Listeners/UserLevelledUpListener.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Listeners/UserLevelledUpListener.php b/src/Listeners/UserLevelledUpListener.php index 4050584..70a51d9 100644 --- a/src/Listeners/UserLevelledUpListener.php +++ b/src/Listeners/UserLevelledUpListener.php @@ -17,6 +17,9 @@ public function __invoke(UserLevelledUp $event): void 'level_to' => $event->level, 'type' => AuditType::LevelUp->value, ]); + $event->user->experience->update(attributes: [ + 'level_id' => $event->level, + ]); } } } From 59f73bb7128ef217c9eba6eb1d1274ab3cf83af0 Mon Sep 17 00:00:00 2001 From: Chris Mellor Date: Wed, 4 Oct 2023 20:38:52 +0100 Subject: [PATCH 2/2] fix: Level relationship updated correctly tests: Added a new sanity test --- src/Concerns/GiveExperience.php | 2 +- src/Listeners/UserLevelledUpListener.php | 3 --- tests/Concerns/GiveExperienceTest.php | 11 +++++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Concerns/GiveExperience.php b/src/Concerns/GiveExperience.php index 898e86c..44d101e 100644 --- a/src/Concerns/GiveExperience.php +++ b/src/Concerns/GiveExperience.php @@ -211,7 +211,7 @@ public function levelUp(int $to): void ->save(); $this->experience->status()->associate(model: $to); - $this->save(); + $this->experience->save(); // Fire an event for each level gained for ($lvl = $this->getLevel(); $lvl <= $to; $lvl++) { diff --git a/src/Listeners/UserLevelledUpListener.php b/src/Listeners/UserLevelledUpListener.php index 70a51d9..4050584 100644 --- a/src/Listeners/UserLevelledUpListener.php +++ b/src/Listeners/UserLevelledUpListener.php @@ -17,9 +17,6 @@ public function __invoke(UserLevelledUp $event): void 'level_to' => $event->level, 'type' => AuditType::LevelUp->value, ]); - $event->user->experience->update(attributes: [ - 'level_id' => $event->level, - ]); } } } diff --git a/tests/Concerns/GiveExperienceTest.php b/tests/Concerns/GiveExperienceTest.php index 9b18b78..40d77e4 100644 --- a/tests/Concerns/GiveExperienceTest.php +++ b/tests/Concerns/GiveExperienceTest.php @@ -50,6 +50,17 @@ ]); }); +test(description: 'levels are associated on point increments', closure: function () { + $this->user->addPoints(amount: 10); + + expect($this->user)->level_id->toBe(expected: 1); + + $this->user->addPoints(amount: 100); + + expect($this->user)->level_id->toBe(expected: 2) + ->and($this->user)->getLevel()->toBe(expected: 2); +}); + it(description: 'can deduct points from a User', closure: function (): void { Event::fake();