package builtin import ( "context" "io/fs" "strings" "testing" "gitea.maximumdirect.net/eric/promptkit/internal/backend" "gopkg.in/yaml.v3" ) func TestBuiltInProfilesValidateThroughRepository(t *testing.T) { repo := NewRepository() ids := loadBuiltInProfileIDs(t) if len(ids) == 0 { t.Fatal("expected built-in profiles") } for id := range ids { t.Run(id, func(t *testing.T) { p, err := repo.GetProfile(context.Background(), id) if err != nil { t.Fatalf("expected built-in profile %q to load, got %v", id, err) } if p.ID != id { t.Fatalf("expected profile id %q, got %q", id, p.ID) } if p.BackendID != backend.OpenRouterID { t.Fatalf("expected profile %q to select %q, got %q", id, backend.OpenRouterID, p.BackendID) } if p.Endpoint != "" || p.APIKeyEnv != "" { t.Fatalf("expected profile %q to inherit backend connection settings, got endpoint=%q api_key_env=%q", id, p.Endpoint, p.APIKeyEnv) } }) } } func TestBuiltInProfilesDoNotContainDuplicateIDsOrRawAPIKeys(t *testing.T) { loadBuiltInProfileIDs(t) } func loadBuiltInProfileIDs(t *testing.T) map[string]string { t.Helper() ids := map[string]string{} err := fs.WalkDir(assets, assetRoot, func(name string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() || !strings.HasSuffix(name, ".yml") { return nil } data, err := assets.ReadFile(name) if err != nil { t.Fatalf("failed to read built-in profile %s: %v", name, err) } var raw map[string]any if err := yaml.Unmarshal(data, &raw); err != nil { t.Fatalf("failed to decode built-in profile %s: %v", name, err) } if _, ok := raw["api_key"]; ok { t.Fatalf("built-in profile %s contains raw api_key", name) } if raw["backend"] != backend.OpenRouterID { t.Fatalf("built-in profile %s does not select %q", name, backend.OpenRouterID) } if _, ok := raw["endpoint"]; ok { t.Fatalf("built-in profile %s repeats endpoint", name) } if _, ok := raw["api_key_env"]; ok { t.Fatalf("built-in profile %s repeats api_key_env", name) } id, ok := raw["id"].(string) if !ok || strings.TrimSpace(id) == "" { t.Fatalf("built-in profile %s has missing id", name) } if previous, ok := ids[id]; ok { t.Fatalf("duplicate built-in profile id %q in %s and %s", id, previous, name) } ids[id] = name return nil }) if err != nil { t.Fatalf("failed to walk built-in profiles: %v", err) } return ids }