repository = new SettingsRepository( new SaveFile(), new UserSetting() ); } #[Test] public function it_gets_user_saves(): void { $user = User::factory()->create(); SaveFile::factory()->count(3)->create(['user_id' => $user->id]); SaveFile::factory()->count(2)->create(); $saves = $this->repository->getUserSaves($user); $this->assertCount(3, $saves); } #[Test] public function it_gets_user_settings(): void { $user = User::factory()->create(); UserSetting::factory()->count(2)->create(['user_id' => $user->id]); UserSetting::factory()->count(3)->create(); $settings = $this->repository->getUserSettings($user); $this->assertCount(2, $settings); } #[Test] public function it_gets_a_setting_by_key(): void { $user = User::factory()->create(); UserSetting::factory()->create([ 'user_id' => $user->id, 'setting_key' => 'theme', 'setting_value' => 'dark', ]); $value = $this->repository->getSetting($user, 'theme'); $this->assertEquals('dark', $value); } #[Test] public function it_returns_default_when_setting_not_found(): void { $user = User::factory()->create(); $value = $this->repository->getSetting($user, 'nonexistent', 'default_value'); $this->assertEquals('default_value', $value); } #[Test] public function it_returns_null_when_setting_not_found_without_default(): void { $user = User::factory()->create(); $value = $this->repository->getSetting($user, 'nonexistent'); $this->assertNull($value); } #[Test] public function it_creates_a_setting(): void { $user = User::factory()->create(); $this->repository->setSetting($user, 'theme', 'dark'); $this->assertDatabaseHas('user_settings', [ 'user_id' => $user->id, 'setting_key' => 'theme', 'setting_value' => 'dark', ]); } #[Test] public function it_updates_an_existing_setting(): void { $user = User::factory()->create(); UserSetting::factory()->create([ 'user_id' => $user->id, 'setting_key' => 'theme', 'setting_value' => 'light', ]); $this->repository->setSetting($user, 'theme', 'dark'); $this->assertDatabaseHas('user_settings', [ 'user_id' => $user->id, 'setting_key' => 'theme', 'setting_value' => 'dark', ]); $this->assertDatabaseCount('user_settings', 1); } }