package manifest import ( "testing" "time" ) func TestRunManifestStageMarkHelpers(t *testing.T) { rm := NewRun("2026-05-03", "forsaken", "20260517T000000Z-abcdef12", false, []string{"prepare"}, time.Date(2026, 5, 3, 10, 0, 0, 0, time.UTC)) if rm.Status != RunManifestStatusRunning { t.Fatalf("status = %q, want %q", rm.Status, RunManifestStatusRunning) } runningAt := time.Date(2026, 5, 3, 10, 1, 0, 0, time.UTC) rm.SetStageAction("prepare", RunStageActionRun, runningAt) rm.MarkStageRunning("prepare", runningAt) rm.MarkStageSucceeded("prepare", runningAt.Add(30*time.Second), []ArtifactRecord{ {Kind: "input", LocalPath: "inputs/session.yml"}, }) stage := rm.Stages["prepare"] if stage == nil { t.Fatal("prepare stage missing") } if stage.Action != RunStageActionRun { t.Fatalf("action = %q, want %q", stage.Action, RunStageActionRun) } if stage.Status != StatusSucceeded { t.Fatalf("status = %q, want %q", stage.Status, StatusSucceeded) } skippedAt := runningAt.Add(1 * time.Minute) rm.SetStageAction("notify", RunStageActionSkip, skippedAt) rm.MarkStageSkipped("notify", skippedAt, "already_succeeded") skipped := rm.Stages["notify"] if skipped == nil { t.Fatal("notify stage missing") } if skipped.Action != RunStageActionSkip { t.Fatalf("action = %q, want %q", skipped.Action, RunStageActionSkip) } if skipped.Status != StatusSkipped { t.Fatalf("status = %q, want %q", skipped.Status, StatusSkipped) } rm.MarkSucceeded(skippedAt.Add(10 * time.Second)) if rm.Status != RunManifestStatusSucceeded { t.Fatalf("status = %q, want %q", rm.Status, RunManifestStatusSucceeded) } }