package config import ( "os" "path/filepath" "testing" ) func TestLoadTOML(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "config.toml") content := ` current_provider = "rainyun" output = "table" [providers.rainyun] api_key = "sk-test123" [providers.aliyun] access_key_id = "ak-xxx" access_key_secret = "sk-xxx" ` if err := os.WriteFile(path, []byte(content), 0600); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatalf("Load() error: %v", err) } if cfg.CurrentProvider != "rainyun" { t.Errorf("CurrentProvider = %q, want %q", cfg.CurrentProvider, "rainyun") } if cfg.Output != "table" { t.Errorf("Output = %q, want %q", cfg.Output, "table") } if cfg.Providers["rainyun"].APIKey != "sk-test123" { t.Errorf("rainyun api_key = %q, want %q", cfg.Providers["rainyun"].APIKey, "sk-test123") } if cfg.Providers["aliyun"].AccessKeyID != "ak-xxx" { t.Errorf("aliyun access_key_id = %q, want %q", cfg.Providers["aliyun"].AccessKeyID, "ak-xxx") } } func TestLoadDefaults(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "empty.toml") if err := os.WriteFile(path, []byte(""), 0600); err != nil { t.Fatal(err) } cfg, err := Load(path) if err != nil { t.Fatalf("Load() error: %v", err) } if cfg.Output != "table" { t.Errorf("default Output = %q, want %q", cfg.Output, "table") } } func TestSave(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "out.toml") cfg := &Config{ CurrentProvider: "test", Output: "json", Providers: map[string]ProviderConfig{ "test": {APIKey: "secret"}, }, } if err := Save(path, cfg); err != nil { t.Fatalf("Save() error: %v", err) } loaded, err := Load(path) if err != nil { t.Fatalf("re-Load() error: %v", err) } if loaded.CurrentProvider != "test" { t.Errorf("roundtrip CurrentProvider = %q", loaded.CurrentProvider) } } func TestDefaultPath(t *testing.T) { path := DefaultPath() if path == "" { t.Error("DefaultPath() returned empty") } } func TestEnsureDir(t *testing.T) { dir := filepath.Join(t.TempDir(), "sub", "dir") path := filepath.Join(dir, "config.toml") cfg := &Config{Output: "table"} if err := Save(path, cfg); err != nil { t.Fatalf("Save() to deep dir error: %v", err) } }