diff --git a/internal/web/handler_test.go b/internal/web/handler_test.go index 39c4f0b..76968f8 100644 --- a/internal/web/handler_test.go +++ b/internal/web/handler_test.go @@ -30,7 +30,20 @@ func TestRootServesAtlas(t *testing.T) { } } -func TestAtlasJSON_ServesAtlasWithGeneratedCIStage(t *testing.T) { +// This asserts the SHAPE the endpoint serves, not the exact CI job names. +// +// STAGE 06 has two sources: the embedded workflow (deterministic) and, when the +// forge is reachable, the live latest run — which overwrites it with real job +// names and a "▶ run #N" node. The old assertion demanded the workflow-derived +// names, so it passed on a laptop with no route to Gitea and failed inside CI, +// where the overlay works exactly as designed. It went red on 2026-08-19 for a +// commit that only touched atlas.json. +// +// The deterministic assertion lives in the atlas package +// (TestBuild_OverlaysCIStageNodesFromWorkflow), which feeds Build a fixed +// workflow and no network. Here we check the endpoint serves a usable atlas +// whichever source won. +func TestAtlasJSON_ServesAtlasWithPopulatedCIStage(t *testing.T) { srv := httptest.NewServer(NewHandler()) defer srv.Close() @@ -51,18 +64,21 @@ func TestAtlasJSON_ServesAtlasWithGeneratedCIStage(t *testing.T) { t.Fatal("atlas has no stages") } - // The generate:ci-jobs stage must be populated from the real cd.yml jobs. - got := map[string]bool{} - for _, s := range a.Stages { - if s.No == "STAGE 06" { - for _, n := range s.Nodes { - got[n.Title] = true - } + var ci *atlas.Stage + for i := range a.Stages { + if a.Stages[i].No == "STAGE 06" { + ci = &a.Stages[i] } } - for _, want := range []string{"guard", "check", "build", "deploy"} { - if !got[want] { - t.Fatalf("CI stage missing generated job %q (got %v)", want, got) + if ci == nil { + t.Fatal("STAGE 06 missing from the served atlas") + } + if len(ci.Nodes) == 0 { + t.Fatal("STAGE 06 has no nodes — neither the embedded workflow nor the live run populated it") + } + for _, n := range ci.Nodes { + if n.Title == "" { + t.Fatalf("STAGE 06 node with no title: %+v", n) } } }