From 458434dafed6098efbc9f56dbc05806e1b2cd35f Mon Sep 17 00:00:00 2001 From: michalsn Date: Mon, 16 Feb 2026 19:18:08 +0100 Subject: [PATCH] fix: withIdentities/withGroups/withPermissions now work with first() --- src/Models/UserModel.php | 12 ++++++++++++ tests/Unit/UserTest.php | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Models/UserModel.php b/src/Models/UserModel.php index 9f928fa85..6a55655a5 100644 --- a/src/Models/UserModel.php +++ b/src/Models/UserModel.php @@ -143,6 +143,10 @@ protected function fetchIdentities(array $data): array $mappedUsers = $this->assignIdentities($data, $identities); + if ($data['singleton'] && ! isset($data['id'])) { + $data['id'] = $data['data']->id; + } + $data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers; return $data; @@ -213,6 +217,10 @@ protected function fetchGroups(array $data): array $mappedUsers = $this->assignProperties($data, $groups, 'groups'); + if ($data['singleton'] && ! isset($data['id'])) { + $data['id'] = $data['data']->id; + } + $data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers; return $data; @@ -246,6 +254,10 @@ protected function fetchPermissions(array $data): array $mappedUsers = $this->assignProperties($data, $permissions, 'permissions'); + if ($data['singleton'] && ! isset($data['id'])) { + $data['id'] = $data['data']->id; + } + $data['data'] = $data['singleton'] ? $mappedUsers[$data['id']] : $mappedUsers; return $data; diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index 4a057e507..4325a2b13 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -332,6 +332,40 @@ public function testModelFindAllWithGroupsAndPermissions(): void ); } + public function testModelFirstWithIdentities(): void + { + fake(UserIdentityModel::class, ['user_id' => $this->user->id, 'type' => 'password']); + fake(UserIdentityModel::class, ['user_id' => $this->user->id, 'type' => 'access_token']); + + $user = model(UserModel::class)->where('active', 1)->withIdentities()->first(); + + $this->assertInstanceOf(User::class, $user); + $this->assertCount(2, $user->identities); + } + + public function testModelFirstWithGroups(): void + { + fake(GroupModel::class, ['user_id' => $this->user->id, 'group' => 'superadmin']); + fake(GroupModel::class, ['user_id' => $this->user->id, 'group' => 'admin']); + + $user = model(UserModel::class)->where('active', 1)->withGroups()->first(); + + $this->assertInstanceOf(User::class, $user); + $this->assertTrue($user->inGroup('admin')); + } + + public function testModelFirstWithPermissions(): void + { + fake(PermissionModel::class, ['user_id' => $this->user->id, 'permission' => 'users.edit']); + fake(PermissionModel::class, ['user_id' => $this->user->id, 'permission' => 'users.delete']); + + $user = model(UserModel::class)->where('active', 1)->withPermissions()->first(); + + $this->assertInstanceOf(User::class, $user); + $this->assertTrue($user->hasPermission('users.delete')); + $this->assertFalse($user->hasPermission('users.add')); + } + public function testLastLogin(): void { fake(