Fresh repository history for elektrine/tarakan-client hosted at https://git.elektrine.com/elektrine/tarakan-client.
97 lines
2.7 KiB
Go
97 lines
2.7 KiB
Go
package api
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadConfigPrefersExplicitOverEnv(t *testing.T) {
|
|
isolateSavedConfig(t)
|
|
t.Setenv("TARAKAN_URL", "https://env.example")
|
|
t.Setenv("TARAKAN_API_TOKEN", "env-token")
|
|
|
|
cfg := LoadConfig("https://cli.example", "cli-token")
|
|
if cfg.BaseURL != "https://cli.example" || cfg.Token != "cli-token" {
|
|
t.Fatalf("cfg = %#v", cfg)
|
|
}
|
|
|
|
cfg = LoadConfig("", "")
|
|
if cfg.BaseURL != "https://env.example" || cfg.Token != "env-token" {
|
|
t.Fatalf("env cfg = %#v", cfg)
|
|
}
|
|
}
|
|
|
|
func TestLoadConfigDefaultsURL(t *testing.T) {
|
|
isolateSavedConfig(t)
|
|
t.Setenv("TARAKAN_URL", "")
|
|
t.Setenv("TARAKAN_API_TOKEN", "t")
|
|
cfg := LoadConfig("", "t")
|
|
if cfg.BaseURL != "https://tarakan.lol" {
|
|
t.Fatalf("BaseURL = %q", cfg.BaseURL)
|
|
}
|
|
}
|
|
|
|
func TestConfigWithOverrides(t *testing.T) {
|
|
isolateSavedConfig(t)
|
|
cfg := LoadConfig("https://a.example", "one").WithOverrides("https://b.example", "")
|
|
if cfg.BaseURL != "https://b.example" || cfg.Token != "one" {
|
|
t.Fatalf("cfg = %#v", cfg)
|
|
}
|
|
}
|
|
|
|
func TestMaskedToken(t *testing.T) {
|
|
if got := (Config{}).MaskedToken(); got != "(not set)" {
|
|
t.Fatalf("empty = %q", got)
|
|
}
|
|
if got := (Config{Token: "abcdefghijklmnop"}).MaskedToken(); got != "abcd…mnop" {
|
|
t.Fatalf("masked = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestSavedConfigIsLoadedAndProtected(t *testing.T) {
|
|
isolateSavedConfig(t)
|
|
t.Setenv("TARAKAN_URL", "")
|
|
t.Setenv("TARAKAN_API_TOKEN", "")
|
|
|
|
path, err := SaveConfig(Config{BaseURL: "https://saved.example/", Token: "saved-token"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if want := filepath.Join(os.Getenv("XDG_CONFIG_HOME"), "tarakan", "config.json"); path != want {
|
|
t.Fatalf("path = %q, want %q", path, want)
|
|
}
|
|
if info, err := os.Stat(path); err != nil || info.Mode().Perm() != 0o600 {
|
|
t.Fatalf("config mode = %v, err = %v", info.Mode().Perm(), err)
|
|
}
|
|
if info, err := os.Stat(filepath.Dir(path)); err != nil || info.Mode().Perm() != 0o700 {
|
|
t.Fatalf("config dir mode = %v, err = %v", info.Mode().Perm(), err)
|
|
}
|
|
|
|
cfg := LoadConfig("", "")
|
|
if cfg.BaseURL != "https://saved.example" || cfg.Token != "saved-token" {
|
|
t.Fatalf("saved cfg = %#v", cfg)
|
|
}
|
|
|
|
t.Setenv("TARAKAN_URL", "https://env.example")
|
|
t.Setenv("TARAKAN_API_TOKEN", "env-token")
|
|
cfg = LoadConfig("https://explicit.example", "explicit-token")
|
|
if cfg.BaseURL != "https://explicit.example" || cfg.Token != "explicit-token" {
|
|
t.Fatalf("precedence cfg = %#v", cfg)
|
|
}
|
|
|
|
if err := RemoveSavedConfig(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := os.Stat(path); !os.IsNotExist(err) {
|
|
t.Fatalf("saved config still exists: %v", err)
|
|
}
|
|
if err := RemoveSavedConfig(); err != nil {
|
|
t.Fatalf("second removal should be harmless: %v", err)
|
|
}
|
|
}
|
|
|
|
func isolateSavedConfig(t *testing.T) {
|
|
t.Helper()
|
|
t.Setenv("XDG_CONFIG_HOME", t.TempDir())
|
|
}
|