diff --git a/internal/config/config_test.go b/internal/config/config_test.go index b87b118..bd8b714 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -2,6 +2,7 @@ package config import ( "encoding/base64" + "os" "testing" ) @@ -50,6 +51,33 @@ func TestLoadStoreDropsLegacyTokenOnlyAccounts(t *testing.T) { } } +func TestLoadStorePreservesFileBackedTokensForRuntime(t *testing.T) { + tmp, err := os.CreateTemp(t.TempDir(), "config-*.json") + if err != nil { + t.Fatalf("create temp config: %v", err) + } + defer tmp.Close() + + if _, err := tmp.WriteString(`{ + "accounts":[{"email":"u@example.com","password":"p","token":"persisted-token"}] + }`); err != nil { + t.Fatalf("write temp config: %v", err) + } + + t.Setenv("DS2API_CONFIG_JSON", "") + t.Setenv("CONFIG_JSON", "") + t.Setenv("DS2API_CONFIG_PATH", tmp.Name()) + + store := LoadStore() + accounts := store.Accounts() + if len(accounts) != 1 { + t.Fatalf("expected 1 account, got %d", len(accounts)) + } + if accounts[0].Token != "persisted-token" { + t.Fatalf("expected file-backed token preserved for runtime use, got %q", accounts[0].Token) + } +} + func TestStoreUpdateAccountTokenKeepsIdentifierResolvable(t *testing.T) { t.Setenv("DS2API_CONFIG_JSON", `{ "accounts":[{"email":"user@example.com","password":"p"}] diff --git a/internal/config/store.go b/internal/config/store.go index 10e26f4..c607f81 100644 --- a/internal/config/store.go +++ b/internal/config/store.go @@ -57,7 +57,6 @@ func loadConfig() (Config, bool, error) { if err := json.Unmarshal(content, &cfg); err != nil { return Config{}, false, err } - cfg.ClearAccountTokens() cfg.DropInvalidAccounts() if IsVercel() { // Vercel filesystem is ephemeral/read-only for runtime writes; avoid save errors.