package memory import ( "context" "testing" "git.threesix.ai/jordan/slate-v3-1770514618/services/preferences-api/internal/domain" ) func TestPreferencesRepository_GetMissing(t *testing.T) { repo := NewPreferencesRepository() _, err := repo.Get(context.Background(), "nonexistent") if err != domain.ErrPreferencesNotFound { t.Errorf("expected ErrPreferencesNotFound, got %v", err) } } func TestPreferencesRepository_UpsertAndGet(t *testing.T) { repo := NewPreferencesRepository() ctx := context.Background() prefs := domain.NewDefaultPreferences("user-1") prefs.Theme = "dark" if err := repo.Upsert(ctx, "user-1", prefs); err != nil { t.Fatalf("unexpected error on upsert: %v", err) } got, err := repo.Get(ctx, "user-1") if err != nil { t.Fatalf("unexpected error on get: %v", err) } if got.Theme != "dark" { t.Errorf("expected theme 'dark', got '%s'", got.Theme) } if got.UserID != "user-1" { t.Errorf("expected user_id 'user-1', got '%s'", got.UserID) } } func TestPreferencesRepository_UpsertOverwrites(t *testing.T) { repo := NewPreferencesRepository() ctx := context.Background() prefs1 := domain.NewDefaultPreferences("user-1") prefs1.Theme = "dark" _ = repo.Upsert(ctx, "user-1", prefs1) prefs2 := domain.NewDefaultPreferences("user-1") prefs2.Theme = "light" _ = repo.Upsert(ctx, "user-1", prefs2) got, _ := repo.Get(ctx, "user-1") if got.Theme != "light" { t.Errorf("expected theme 'light' after overwrite, got '%s'", got.Theme) } } func TestPreferencesRepository_ReturnsCopy(t *testing.T) { repo := NewPreferencesRepository() ctx := context.Background() prefs := domain.NewDefaultPreferences("user-1") _ = repo.Upsert(ctx, "user-1", prefs) got, _ := repo.Get(ctx, "user-1") got.Theme = "modified" got2, _ := repo.Get(ctx, "user-1") if got2.Theme != "system" { t.Errorf("expected stored theme 'system' unchanged, got '%s'", got2.Theme) } }