package build import ( "encoding/json" "os" "testing" "git.novox.be/novox/mesh-sdk/go/delivery" ) // result reads a captured step value of mesh-build-image (testdata/captured/README) and returns its result. func captured(t *testing.T, name string) json.RawMessage { t.Helper() raw, err := os.ReadFile("testdata/captured/" + name) if err != nil { t.Fatal(err) } var step delivery.Step if err := json.Unmarshal(raw, &step); err != nil { t.Fatalf("%s: %v", name, err) } if step.State != delivery.StepPassed || len(step.Result) == 0 { t.Fatalf("%s: state %q, result %s, want a passed step with a result", name, step.State, step.Result) } return step.Result } func TestCapturedImageStepsDecodeWithTheBuildersOwnTypes(t *testing.T) { // review r2, mesh-catalog 2; ADR 0487 clause 1 var f fetchResult if err := json.Unmarshal(captured(t, "fetch.json"), &f); err != nil || f.Workspace == "" { t.Errorf("fetch = %+v, %v, want a workspace (the field the builder reads)", f, err) } var trunk buildResult if err := json.Unmarshal(captured(t, "build-trunk.json"), &trunk); err != nil || trunk.Digest == "" || trunk.Reference == "" { t.Errorf("trunk build = %+v, %v, want a digest and a reference", trunk, err) } var cand buildResult if err := json.Unmarshal(captured(t, "build-candidate.json"), &cand); err != nil || cand.Digest == "" || cand.Reference != "" { t.Errorf("candidate build = %+v, %v, want a digest and no reference", cand, err) } }