83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
package lock
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoadMissingIsEmpty(t *testing.T) {
|
|
l, err := Load(t.TempDir())
|
|
if err != nil || l.Packages == nil || len(l.Packages) != 0 {
|
|
t.Fatalf("leer erwartet: %+v, %v", l, err)
|
|
}
|
|
}
|
|
|
|
func TestRoundTrip(t *testing.T) {
|
|
l := New()
|
|
l.Packages["pub-a"] = &Package{Version: "1.0.0", Checksum: "sha256:aa",
|
|
Files: map[string]string{".claude/skills/pub-a/SKILL.md": "sha256:01"},
|
|
Keys: []Key{{File: ".mcp.json", Path: []string{"mcpServers", "munin"}, Sha256: "sha256:02"}}}
|
|
l.Packages["pub-b"] = &Package{Version: "2.0.0", Checksum: "sha256:bb",
|
|
Files: map[string]string{".hugin/rules/pub-b.md": "sha256:03"}}
|
|
l.Common = Common{
|
|
Keys: []Key{{File: "opencode.json", Path: []string{"instructions"}, Mode: "list_item", Value: ".hugin/rules/*.md"}},
|
|
Blocks: map[string]string{"CLAUDE.md#hugin": "sha256:04"},
|
|
Created: []string{"opencode.json"},
|
|
}
|
|
raw, err := l.Bytes()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.HasPrefix(string(raw), header) {
|
|
t.Errorf("Kopfzeile fehlt:\n%s", raw)
|
|
}
|
|
repo := t.TempDir()
|
|
if err := os.WriteFile(filepath.Join(repo, Filename), raw, 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
back, err := Load(repo)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(back.Files()) != 2 || back.Files()[".hugin/rules/pub-b.md"] != "sha256:03" {
|
|
t.Errorf("Files: %v", back.Files())
|
|
}
|
|
if len(back.AllKeys()) != 2 || !back.Created("opencode.json") || back.Created("CLAUDE.md") {
|
|
t.Errorf("Keys/Created: %+v", back)
|
|
}
|
|
if back.Common.Blocks["CLAUDE.md#hugin"] != "sha256:04" {
|
|
t.Errorf("Blocks: %v", back.Common.Blocks)
|
|
}
|
|
}
|
|
|
|
func TestFind(t *testing.T) {
|
|
keys := []Key{
|
|
{File: "opencode.json", Path: []string{"instructions"}, Mode: "list_item", Value: ".hugin/rules/*.md"},
|
|
{File: ".mcp.json", Path: []string{"mcpServers", "munin"}},
|
|
}
|
|
if Find(keys, ".mcp.json", []string{"mcpServers", "munin"}, "", nil) == nil {
|
|
t.Error("Schlüssel nicht gefunden")
|
|
}
|
|
if Find(keys, "opencode.json", []string{"instructions"}, "list_item", ".hugin/rules/*.md") == nil {
|
|
t.Error("Listeneintrag nicht gefunden")
|
|
}
|
|
// Bei list_item muss auch der Wert passen
|
|
if Find(keys, "opencode.json", []string{"instructions"}, "list_item", "andere.md") != nil {
|
|
t.Error("anderer Wert darf nicht passen")
|
|
}
|
|
if Find(keys, ".mcp.json", []string{"mcpServers"}, "", nil) != nil {
|
|
t.Error("kürzerer Pfad darf nicht passen")
|
|
}
|
|
}
|
|
|
|
func TestBrokenFile(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "trial.lock")
|
|
if err := os.WriteFile(path, []byte("packages: [kaputt"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := LoadFrom(path); err == nil {
|
|
t.Error("Fehler erwartet")
|
|
}
|
|
}
|