package atlas_test import ( "testing" "git.d-ma.be/mathias/cad-atlas/internal/atlas" ) func stagedAtlas() *atlas.Atlas { return &atlas.Atlas{Stages: []atlas.Stage{ {No: "STAGE 03", Generate: atlas.GenerateKeys{"gitea-issues"}, Nodes: []atlas.Node{{Title: "authored issue node"}}}, {No: "STAGE 05", Generate: atlas.GenerateKeys{"gitea-repos"}, Nodes: []atlas.Node{{Title: "authored repo node"}}}, {No: "STAGE 08", Nodes: []atlas.Node{{Title: "untouched"}}}, }} } func TestPrependGenerated_LiveNodesComeFirstAndAuthoredSurvive(t *testing.T) { a := stagedAtlas() atlas.PrependGenerated(a, "gitea-repos", []atlas.Node{{Title: "live repo"}}) got := a.Stages[1].Nodes if len(got) != 2 { t.Fatalf("want 2 nodes, got %d: %+v", len(got), got) } if got[0].Title != "live repo" || got[1].Title != "authored repo node" { t.Fatalf("order wrong: %+v", got) } } func TestPrependGenerated_OnlyTouchesMatchingStage(t *testing.T) { a := stagedAtlas() atlas.PrependGenerated(a, "gitea-repos", []atlas.Node{{Title: "live repo"}}) if len(a.Stages[0].Nodes) != 1 || a.Stages[0].Nodes[0].Title != "authored issue node" { t.Fatalf("stage 03 disturbed: %+v", a.Stages[0].Nodes) } if len(a.Stages[2].Nodes) != 1 || a.Stages[2].Nodes[0].Title != "untouched" { t.Fatalf("stage 08 disturbed: %+v", a.Stages[2].Nodes) } } // The graceful-skip contract: with GITEA_TOKEN unset the overlay yields no // nodes, and the atlas must still render its authored placeholders unchanged. func TestPrependGenerated_NoLiveNodesLeavesAuthoredIntact(t *testing.T) { a := stagedAtlas() atlas.PrependGenerated(a, "gitea-repos", nil) if len(a.Stages[1].Nodes) != 1 || a.Stages[1].Nodes[0].Title != "authored repo node" { t.Fatalf("authored nodes lost on empty overlay: %+v", a.Stages[1].Nodes) } } func TestPrependGenerated_UnknownKeyIsANoop(t *testing.T) { a := stagedAtlas() atlas.PrependGenerated(a, "no-such-key", []atlas.Node{{Title: "live"}}) for i, s := range a.Stages { if len(s.Nodes) != 1 { t.Fatalf("stage %d changed: %+v", i, s.Nodes) } } }