diff --git a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge-tools/main_test.go b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge-tools/main_test.go index b36dc76c..2454e5ec 100644 --- a/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge-tools/main_test.go +++ b/modules/mesh-delivery-forge-bridge/cmd/mesh-delivery-forge-bridge-tools/main_test.go @@ -118,73 +118,73 @@ func TestTheBridgeToolsReadTheGroupsAndAskTheEndAgain(t *testing.T) { } } } -} -// 1585: bridge_merged_message answers the merged message as the bridge publishes it: for a lone pull request the same bytes -// the event gives through Convert, for a member of a delivery group those with its group and members set as the process -// sets them; a merge the gate does not hold, or a forge that does not answer, is said. -func TestTheBridgeToolAnswersTheMergedMessageAsPublished(t *testing.T) { - h1, h2 := strings.Repeat("1", 40), strings.Repeat("2", 40) - c1, c2 := strings.Repeat("c", 40), strings.Repeat("d", 40) - trees := func(owner, repo, sha string) (string, map[string]string, error) { - return "root-" + sha[:4], map[string]string{"": "r", "modules/a": "ta-" + sha[:4]}, nil - } - files := func(owner, repo, path, ref string) ([]byte, error) { - if strings.HasSuffix(path, "module.json") { - return []byte(`{"module":"a"}`), nil + // 1585: bridge_merged_message answers the merged message as the bridge publishes it: for a lone pull request the same bytes + // the event gives through Convert, for a member of a delivery group those with its group and members set as the process + // sets them; a merge the gate does not hold, or a forge that does not answer, is said. + t.Run("bridge_merged_message answers the merged message as published", func(t *testing.T) { + h1, h2 := strings.Repeat("1", 40), strings.Repeat("2", 40) + c1, c2 := strings.Repeat("c", 40), strings.Repeat("d", 40) + trees := func(owner, repo, sha string) (string, map[string]string, error) { + return "root-" + sha[:4], map[string]string{"": "r", "modules/a": "ta-" + sha[:4]}, nil } - return nil, bridge.ErrNotFound - } - published := func(repo string, number int, head, branch, merge string) forgemsg.Forge { - body, _ := json.Marshal(map[string]any{"owner": "novox", "repo": repo, "number": number, "head": branch, "head_sha": head, "base": "main", "merge_commit_sha": merge}) - msg, err := bridge.Convert(bridge.MergedSubject, body, trees, files) - if err != nil { - t.Fatal(err) + files := func(owner, repo, path, ref string) ([]byte, error) { + if strings.HasSuffix(path, "module.json") { + return []byte(`{"module":"a"}`), nil + } + return nil, bridge.ErrNotFound } - f, err := forgemsg.DecodeForge(msg.Data) - if err != nil { - t.Fatal(err) - } - return f - } - lone, _ := delivery.EncodeMerge(delivery.Merge{Group: "solo", Ask: "a", Approved: map[string]string{"novox/a@5": h1}, - Pulls: []delivery.MergePull{{Head: delivery.Head{Repository: "novox/a", Number: 5, Head: h1}, State: delivery.MergeMerged, Commit: c1}}}) - group, _ := delivery.EncodeMerge(delivery.Merge{Group: "feat/g", Ask: "a", Approved: map[string]string{"novox/a@6": h1, "novox/b@7": h2}, - Pulls: []delivery.MergePull{{Head: delivery.Head{Repository: "novox/a", Number: 6, Head: h1}, State: delivery.MergeMerged, Commit: c1}, - {Head: delivery.Head{Repository: "novox/b", Number: 7, Head: h2}, State: delivery.MergeMerging}}}) - for _, c := range []struct { - name string - raws map[string][]byte - repository string - merge string - want forgemsg.Forge - fail string - }{ - {name: "a lone pull request", raws: map[string][]byte{"solo": lone}, repository: "novox/a", merge: c1, want: published("a", 5, h1, "solo", c1)}, - {name: "a member of a group", raws: map[string][]byte{"feat~g": group}, repository: "novox/a", merge: c1, want: func() forgemsg.Forge { - f := published("a", 6, h1, "feat/g", c1) - f.Group, f.Members = "feat/g", []delivery.Head{{Repository: "novox/a", Number: 6, Head: h1}, {Repository: "novox/b", Number: 7, Head: h2}} + published := func(repo string, number int, head, branch, merge string) forgemsg.Forge { + body, _ := json.Marshal(map[string]any{"owner": "novox", "repo": repo, "number": number, "head": branch, "head_sha": head, "base": "main", "merge_commit_sha": merge}) + msg, err := bridge.Convert(bridge.MergedSubject, body, trees, files) + if err != nil { + t.Fatal(err) + } + f, err := forgemsg.DecodeForge(msg.Data) + if err != nil { + t.Fatal(err) + } return f - }()}, - {name: "a merge the gate does not hold", raws: map[string][]byte{"solo": lone, "bad": []byte("{")}, repository: "novox/a", merge: c2, fail: "hold no merge"}, - } { - t.Run(c.name, func(t *testing.T) { - raw, err := MergedOf(c.raws, c.repository, c.merge, trees, files) - if c.fail != "" { - if err == nil || !strings.Contains(err.Error(), c.fail) { - t.Fatalf("err %v, want %q", err, c.fail) + } + lone, _ := delivery.EncodeMerge(delivery.Merge{Group: "solo", Ask: "a", Approved: map[string]string{"novox/a@5": h1}, + Pulls: []delivery.MergePull{{Head: delivery.Head{Repository: "novox/a", Number: 5, Head: h1}, State: delivery.MergeMerged, Commit: c1}}}) + group, _ := delivery.EncodeMerge(delivery.Merge{Group: "feat/g", Ask: "a", Approved: map[string]string{"novox/a@6": h1, "novox/b@7": h2}, + Pulls: []delivery.MergePull{{Head: delivery.Head{Repository: "novox/a", Number: 6, Head: h1}, State: delivery.MergeMerged, Commit: c1}, + {Head: delivery.Head{Repository: "novox/b", Number: 7, Head: h2}, State: delivery.MergeMerging}}}) + for _, c := range []struct { + name string + raws map[string][]byte + repository string + merge string + want forgemsg.Forge + fail string + }{ + {name: "a lone pull request", raws: map[string][]byte{"solo": lone}, repository: "novox/a", merge: c1, want: published("a", 5, h1, "solo", c1)}, + {name: "a member of a group", raws: map[string][]byte{"feat~g": group}, repository: "novox/a", merge: c1, want: func() forgemsg.Forge { + f := published("a", 6, h1, "feat/g", c1) + f.Group, f.Members = "feat/g", []delivery.Head{{Repository: "novox/a", Number: 6, Head: h1}, {Repository: "novox/b", Number: 7, Head: h2}} + return f + }()}, + {name: "a merge the gate does not hold", raws: map[string][]byte{"solo": lone, "bad": []byte("{")}, repository: "novox/a", merge: c2, fail: "hold no merge"}, + } { + t.Run(c.name, func(t *testing.T) { + raw, err := MergedOf(c.raws, c.repository, c.merge, trees, files) + if c.fail != "" { + if err == nil || !strings.Contains(err.Error(), c.fail) { + t.Fatalf("err %v, want %q", err, c.fail) + } + return } - return - } - want, _ := forgemsg.EncodeForge(c.want) - if err != nil || !bytes.Equal(raw, want) { - t.Fatalf("err %v, answer\n%s\nwant the published message\n%s", err, raw, want) - } - }) - } - if _, err := MergedOf(map[string][]byte{"solo": lone}, "novox/a", c1, func(string, string, string) (string, map[string]string, error) { - return "", nil, errors.New("the forge does not answer") - }, files); err == nil || !strings.Contains(err.Error(), "does not answer") { - t.Errorf("a forge that does not answer: %v", err) - } + want, _ := forgemsg.EncodeForge(c.want) + if err != nil || !bytes.Equal(raw, want) { + t.Fatalf("err %v, answer\n%s\nwant the published message\n%s", err, raw, want) + } + }) + } + if _, err := MergedOf(map[string][]byte{"solo": lone}, "novox/a", c1, func(string, string, string) (string, map[string]string, error) { + return "", nil, errors.New("the forge does not answer") + }, files); err == nil || !strings.Contains(err.Error(), "does not answer") { + t.Errorf("a forge that does not answer: %v", err) + } + }) }