package main import ( "testing" "time" "github.com/novox/mesh-controller/internal/builder" ) // A try's outcome, as the build seat says it in the build's log (novox/hq issue 686): the repository's own // check's verdict, how long it took, and each line naming what failed. func TestATrysOutcomeNamesWhatFailed(t *testing.T) { tried := triedOf(builder.CheckVerdict{Verdict: "pass", Summary: "the change touches no module", Took: 303 * time.Second, Head: "c0ffee", Trunk: "ca3f43c", Gate: &builder.Layer{Verdict: "pass"}, Repo: &builder.Layer{Verdict: "fail", Summary: "its merge-check.sh failed: TestX", Failed: "--- FAIL: TestX (0.01s)\n x_test.go:12: got 1, want 2"}}) if tried.Verdict != "fail" || tried.Took != "5m3s" || len(tried.Failed) != 2 || tried.Trunk != "ca3f43c" || tried.Summary != "its merge-check.sh failed: TestX" { t.Fatalf("a failed try: %+v", tried) } // A head that does not merge fails both layers: the check's own word. conflict := triedOf(builder.CheckVerdict{Verdict: "fail", Summary: "does not merge", Gate: &builder.Layer{Verdict: "fail"}, Repo: &builder.Layer{Verdict: "fail", Summary: "does not merge"}}) if conflict.Verdict != "fail" || conflict.Summary != "does not merge" { t.Fatalf("a try that does not merge: %+v", conflict) } // No verdict is an error, never a pass. if none := triedOf(builder.CheckVerdict{}); none.Verdict != "error" { t.Fatalf("a try with no verdict: %+v", none) } }