admin(); $guest = Role::query()->firstOrCreate(['name' => 'guest', 'guard_name' => 'api']); $userRole = Role::query()->firstOrCreate(['name' => 'user', 'guard_name' => 'api']); $user = User::factory()->create(); $user->assignRole($guest); $response = $this->actingAs($admin, 'api')->putJson('/users/'.$user->id, [ 'nickname' => $user->nickname, 'email' => $user->email, 'phone' => $user->phone, 'role_ids' => [$guest->id, $userRole->id], ]); $response->assertOk(); $user->refresh(); $this->assertFalse($user->hasRole('guest', 'api')); $this->assertTrue($user->hasRole('user', 'api')); } public function test_batch_setting_non_guest_role_removes_guest_role(): void { $admin = $this->admin(); $guest = Role::query()->firstOrCreate(['name' => 'guest', 'guard_name' => 'api']); $userRole = Role::query()->firstOrCreate(['name' => 'user', 'guard_name' => 'api']); $user = User::factory()->create(); $user->assignRole($guest); $response = $this->actingAs($admin, 'api')->putJson('/users/batch-assignments', [ 'user_ids' => [$user->id], 'role_ids' => [$guest->id, $userRole->id], 'permission_ids' => [], ]); $response->assertOk(); $user->refresh(); $this->assertFalse($user->hasRole('guest', 'api')); $this->assertTrue($user->hasRole('user', 'api')); } private function admin(): User { $user = User::factory()->create(); $role = Role::query()->create(['name' => 'admin-'.strtolower(str()->random(8)), 'guard_name' => 'api']); $permission = Permission::query()->firstOrCreate(['name' => 'platform.users.manage', 'guard_name' => 'api']); $role->givePermissionTo($permission); $user->assignRole($role); return $user; } }