| 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) |
| } |
| } |
|
|