package main import ( "encoding/json" "testing" "github.com/novox/mesh-controller/internal/link" ) // A dry run's outcome is looked at, never taken in (novox/hq issue 240). The daemon here holds no // store at all, so anything that tried to record or register would fail rather than pass quietly. func TestADryRunsOutcomeIsTakenInByNothing(t *testing.T) { err := builds{}.Built(t.Context(), link.BuildResult{ ID: "build-1", Repository: "ssh://forge/app.git", Ref: "unreviewed", Module: "app", DryRun: true, Manifest: json.RawMessage(`{"module":"app","version":"1"}`), }) if err != nil { t.Fatalf("a dry run's outcome was not simply set aside: %v", err) } } // The mark survives the wire both ways: asked as a dry run, answered as one. func TestTheDryRunMarkTravelsWithTheBuild(t *testing.T) { raw, _ := json.Marshal(link.BuildRequest{ID: "build-1", Repository: "r", DryRun: true}) var asked link.BuildRequest if err := json.Unmarshal(raw, &asked); err != nil || !asked.DryRun { t.Fatalf("the request lost its dry-run mark: %s", raw) } raw, _ = json.Marshal(link.BuildResult{ID: "build-1", DryRun: true}) var answered link.BuildResult if err := json.Unmarshal(raw, &answered); err != nil || !answered.DryRun { t.Fatalf("the outcome lost its dry-run mark: %s", raw) } raw, _ = json.Marshal(link.BuildResult{ID: "build-2"}) if string(raw) != `{"id":"build-2","repository":"","on":""}` { t.Fatalf("an ordinary outcome carries a dry-run mark: %s", raw) } }