hugin/cli/internal/config/config_test.go
2026-10-27 08:33:21 +01:00

81 lines
2.3 KiB
Go

package config
import (
"os"
"path/filepath"
"strings"
"testing"
)
func write(t *testing.T, text string) string {
t.Helper()
repo := t.TempDir()
if err := os.WriteFile(filepath.Join(repo, Filename), []byte(text), 0o644); err != nil {
t.Fatal(err)
}
return repo
}
func TestLoadToolsAutoAndList(t *testing.T) {
k, err := Load(write(t, "server: https://hugin.intern\nproject: shop\ntools: auto\npackages: [pub-a]\n"))
if err != nil {
t.Fatal(err)
}
if !k.Tools.Auto || len(k.Packages) != 1 || !k.ReadsClaude() || k.Strict() {
t.Errorf("auto: %+v", k)
}
k, err = Load(write(t, "server: x\nproject: y\ntools: [claude, opencode]\ntool_check: strict\nopencode_reads_claude: false\n"))
if err != nil {
t.Fatal(err)
}
if k.Tools.Auto || strings.Join(k.Tools.List, ",") != "claude,opencode" || k.ReadsClaude() || !k.Strict() {
t.Errorf("Liste: %+v", k)
}
}
func TestLoadRejects(t *testing.T) {
for _, text := range []string{
"tools: immer\n",
"tools: [claude, cursor]\n",
"tool_check: hart\n",
} {
if _, err := Load(write(t, text)); err == nil {
t.Errorf("%q: Fehler erwartet", text)
}
}
if _, err := Load(t.TempDir()); err == nil || !strings.Contains(err.Error(), "hugin init") {
t.Errorf("fehlende Datei: %v", err)
}
}
func TestSaveRoundTrip(t *testing.T) {
repo := t.TempDir()
in := &Config{Server: "https://hugin.intern", Project: "shop", Tools: Tools{List: []string{"opencode"}},
Packages: []string{"pub-a", "pub-b"}, Unsubscribed: []string{"pub-c"}}
if err := in.Save(repo); err != nil {
t.Fatal(err)
}
out, err := Load(repo)
if err != nil {
t.Fatal(err)
}
if out.Server != in.Server || strings.Join(out.Tools.List, ",") != "opencode" ||
strings.Join(out.Packages, ",") != "pub-a,pub-b" || out.Unsubscribed[0] != "pub-c" {
t.Errorf("zurückgelesen: %+v", out)
}
raw, _ := os.ReadFile(filepath.Join(repo, Filename))
if !strings.Contains(string(raw), "tools:\n - opencode") {
t.Errorf("tools fehlt: %s", raw)
}
}
func TestEmptyToolsIsSavedAsAuto(t *testing.T) {
repo := t.TempDir()
if err := (&Config{Server: "x", Project: "y"}).Save(repo); err != nil {
t.Fatal(err)
}
raw, _ := os.ReadFile(filepath.Join(repo, Filename))
if !strings.Contains(string(raw), "tools: auto") {
t.Errorf("erwartet tools: auto, war:\n%s", raw)
}
}