Files
2026-06-08 15:03:41 -05:00

81 lines
2.3 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
"time"
"gitocean/internal/model"
)
func TestClientConfigRoundTrip(t *testing.T) {
t.Setenv("GITOOCEAN_CONFIG", filepath.Join(t.TempDir(), "client.json"))
cfg := model.Config{Server: "http://example.test", Username: "alice", Token: "tok", ExpiresAt: time.Now().UTC()}
if err := SaveClient(cfg); err != nil {
t.Fatal(err)
}
got, err := LoadClient()
if err != nil {
t.Fatal(err)
}
if got.Server != cfg.Server || got.Username != cfg.Username || got.Token != cfg.Token {
t.Fatalf("unexpected config: %#v", got)
}
}
func TestLoadClientFailures(t *testing.T) {
t.Setenv("GITOOCEAN_CONFIG", filepath.Join(t.TempDir(), "missing.json"))
if _, err := LoadClient(); err == nil {
t.Fatal("expected missing client config to fail")
}
path := filepath.Join(t.TempDir(), "client.json")
t.Setenv("GITOOCEAN_CONFIG", path)
if err := os.WriteFile(path, []byte(`{"server":"http://example.test"}`), 0600); err != nil {
t.Fatal(err)
}
if _, err := LoadClient(); err == nil {
t.Fatal("expected missing token to fail")
}
if err := os.WriteFile(path, []byte(`{`), 0600); err != nil {
t.Fatal(err)
}
if _, err := LoadClient(); err == nil {
t.Fatal("expected invalid JSON to fail")
}
}
func TestEnvServerOverrides(t *testing.T) {
t.Setenv("GITOOCEAN_SERVER", "http://server.test/")
if got := EnvServer(); got != "http://server.test" {
t.Fatalf("EnvServer() = %q", got)
}
t.Setenv("GITOOCEAN_SERVER", "")
t.Setenv("GITOOCEAN_SERVER_CONFIG", filepath.Join(t.TempDir(), "missing.json"))
if got := EnvServer(); got != DefaultServerURL {
t.Fatalf("EnvServer() = %q, want default", got)
}
}
func TestServerConfigRoundTripAndEnvServer(t *testing.T) {
path := filepath.Join(t.TempDir(), "server.json")
t.Setenv("GITOOCEAN_SERVER_CONFIG", path)
t.Setenv("GITOOCEAN_SERVER", "")
cfg := model.ServerConfig{Addr: ":8080", PublicURL: "http://localhost:8080/", Storage: "storage", MySQLDSN: "u:p@tcp(localhost:3306)/gitocean"}
if err := SaveServer(path, cfg); err != nil {
t.Fatal(err)
}
got, err := LoadServer(path)
if err != nil {
t.Fatal(err)
}
if got.PublicURL != cfg.PublicURL || got.MySQLDSN != cfg.MySQLDSN {
t.Fatalf("unexpected server config: %#v", got)
}
if server := EnvServer(); server != "http://localhost:8080" {
t.Fatalf("unexpected env server: %q", server)
}
}