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) } }