Spaces:
Sleeping
Sleeping
| package vercel | |
| import ( | |
| "encoding/json" | |
| "strings" | |
| "testing" | |
| "ds2api/internal/config" | |
| ) | |
| func TestParseVercelSyncOptionsFallsBackToSavedConfig(t *testing.T) { | |
| t.Setenv("VERCEL_TOKEN", "") | |
| t.Setenv("VERCEL_PROJECT_ID", "") | |
| t.Setenv("VERCEL_TEAM_ID", "") | |
| opts, err := parseVercelSyncOptions(map[string]any{ | |
| "vercel_token": "__USE_PRECONFIG__", | |
| }, config.VercelConfig{ | |
| Token: " saved-token ", | |
| ProjectID: " saved-project ", | |
| TeamID: " saved-team ", | |
| }) | |
| if err != nil { | |
| t.Fatalf("parse options error: %v", err) | |
| } | |
| if opts.VercelToken != "saved-token" || opts.ProjectID != "saved-project" || opts.TeamID != "saved-team" { | |
| t.Fatalf("unexpected options: %#v", opts) | |
| } | |
| if !opts.UsePreconfig { | |
| t.Fatal("expected preconfig mode") | |
| } | |
| } | |
| func TestSaveLocalVercelCredentialsStoresExplicitInput(t *testing.T) { | |
| t.Setenv("DS2API_CONFIG_JSON", `{"keys":["k1"]}`) | |
| store := config.LoadStore() | |
| h := &Handler{Store: store} | |
| saved, err := h.saveLocalVercelCredentials(vercelSyncOptions{ | |
| VercelToken: " token ", | |
| ProjectID: " project ", | |
| TeamID: " team ", | |
| SaveCreds: true, | |
| }) | |
| if err != nil { | |
| t.Fatalf("save local credentials error: %v", err) | |
| } | |
| if !saved { | |
| t.Fatal("expected credentials to be saved") | |
| } | |
| got := store.Snapshot().Vercel | |
| if got.Token != "token" || got.ProjectID != "project" || got.TeamID != "team" { | |
| t.Fatalf("unexpected saved credentials: %#v", got) | |
| } | |
| } | |
| func TestSaveLocalVercelCredentialsPreservesPreconfiguredTokenAndUpdatesProject(t *testing.T) { | |
| t.Setenv("DS2API_CONFIG_JSON", `{"keys":["k1"],"vercel":{"token":"saved-token","project_id":"old-project","team_id":"old-team"}}`) | |
| store := config.LoadStore() | |
| h := &Handler{Store: store} | |
| saved, err := h.saveLocalVercelCredentials(vercelSyncOptions{ | |
| VercelToken: "resolved-token", | |
| ProjectID: "new-project", | |
| TeamID: "new-team", | |
| SaveCreds: true, | |
| UsePreconfig: true, | |
| }) | |
| if err != nil { | |
| t.Fatalf("save local credentials error: %v", err) | |
| } | |
| if !saved { | |
| t.Fatal("expected project/team updates to be saved") | |
| } | |
| got := store.Snapshot().Vercel | |
| if got.Token != "saved-token" || got.ProjectID != "new-project" || got.TeamID != "new-team" { | |
| t.Fatalf("unexpected saved credentials: %#v", got) | |
| } | |
| } | |
| func TestExportSyncConfigStripsSavedVercelCredentials(t *testing.T) { | |
| t.Setenv("DS2API_CONFIG_JSON", `{"keys":["k1"],"vercel":{"token":"secret-token","project_id":"project","team_id":"team"}}`) | |
| store := config.LoadStore() | |
| h := &Handler{Store: store} | |
| jsonStr, _, err := h.exportSyncConfig(map[string]any{}) | |
| if err != nil { | |
| t.Fatalf("export sync config error: %v", err) | |
| } | |
| if strings.Contains(jsonStr, "secret-token") || strings.Contains(jsonStr, `"vercel"`) { | |
| t.Fatalf("expected sync export to strip Vercel credentials, got %s", jsonStr) | |
| } | |
| var exported config.Config | |
| if err := json.Unmarshal([]byte(jsonStr), &exported); err != nil { | |
| t.Fatalf("exported config is invalid JSON: %v", err) | |
| } | |
| if len(exported.Keys) != 1 || exported.Keys[0] != "k1" { | |
| t.Fatalf("unexpected exported config: %#v", exported) | |
| } | |
| } | |