package main import ( "bytes" "context" "os" "path/filepath" "strings" "testing" ) func TestReportRenderProblemsOnly(t *testing.T) { input := strings.Join([]string{ "ok\tArea\tHealthy\tok\t\t\tgraph\tquery", "warn\tArea\tWarning\tneeds attention\tdetail\tfix\tgraph\tquery", "", }, "\n") var output bytes.Buffer if err := runReportRender([]string{"--title", "Unit Report", "--only", "problems"}, strings.NewReader(input), &output); err != nil { t.Fatal(err) } got := output.String() if strings.Contains(got, "Healthy") { t.Fatalf("problems-only report included ok row:\n%s", got) } for _, want := range []string{"Unit Report", "warn=1", "Warning", "Next Fix", "fix"} { if !strings.Contains(got, want) { t.Fatalf("report missing %q:\n%s", want, got) } } } func TestReportRenderHidesOKGraphAndQuery(t *testing.T) { input := "ok\tArea\tHealthy\tok\tdetail\tfix\tgraph\tquery\n" var output bytes.Buffer if err := runReportRender([]string{"--title", "Unit Report", "--only", "all", "--details"}, strings.NewReader(input), &output); err != nil { t.Fatal(err) } got := output.String() if strings.Contains(got, "graph:") || strings.Contains(got, "query:") { t.Fatalf("ok row leaked graph/query links:\n%s", got) } } func TestExecuteDAGRespectsDependencies(t *testing.T) { dir := t.TempDir() first := filepath.Join(dir, "first") second := filepath.Join(dir, "second") spec := dagSpec{ Parallelism: 2, Tasks: []dagTask{ { ID: "first", Command: []string{"sh", "-c", "printf first > \"$1\"", "sh", first}, }, { ID: "second", Needs: []string{"first"}, Command: []string{"sh", "-c", "test -f \"$1\" && printf second > \"$2\"", "sh", first, second}, }, }, } var output bytes.Buffer if err := executeDAG(context.Background(), spec, &output, &output); err != nil { t.Fatal(err) } if _, err := os.Stat(second); err != nil { t.Fatalf("dependent task did not run after dependency: %v\n%s", err, output.String()) } } func TestExecuteDAGReturnsFailedTask(t *testing.T) { spec := dagSpec{ Parallelism: 2, Tasks: []dagTask{ {ID: "bad", Command: []string{"sh", "-c", "exit 7"}}, }, } var output bytes.Buffer err := executeDAG(context.Background(), spec, &output, &output) if err == nil || !strings.Contains(err.Error(), `dag task "bad" failed`) { t.Fatalf("expected failed task error, got %v\n%s", err, output.String()) } }