vault/tools/pipeline/internal/pkg/github/templates_test.go
Ryan Cragun 3611b8b709
[VAULT-32028] pipeline(github): add sync branches sub-command (#31252)
Add a new `pipeline github sync branches` command that can synchronize
two branches. We'll use this to synchronize the
`hashicorp/vault-enterprise/ce/*` branches with `hashicorp/vault/*`.

As the community repository is effectively a mirror of what is hosted in
Enterprise, a scheduled sync cadence is probably fine. Eventually we'll
hook the workflow and sync into the release pipeline to ensure that
`hashicorp/vault` branches are up-to-date when cutting community
releases.

As part of this I also fixed a few static analysis issues that popped up
when running `golangci-lint` and fixed a few smaller bugs.

Signed-off-by: Ryan Cragun <me@ryan.ec>
2025-07-11 14:08:14 -06:00

169 lines
4.8 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package github
import (
"errors"
"io"
"testing"
libgithub "github.com/google/go-github/v68/github"
"github.com/stretchr/testify/require"
)
func Test_renderEmbeddedTemplate_backportPRMessage(t *testing.T) {
t.Parallel()
for name, test := range map[string]struct {
expectContains []string
expectNotContains []string
origin *libgithub.PullRequest
attempt *CreateBackportAttempt
}{
"no error": {
expectContains: []string{"original body"},
expectNotContains: []string{"error body"},
origin: &libgithub.PullRequest{
Body: libgithub.Ptr("original body"),
Number: libgithub.Ptr(1234),
HTMLURL: libgithub.Ptr("https://github.com/hashicorp/vault-enterprise/pull/1234"),
MergedBy: &libgithub.User{Login: libgithub.Ptr("my-login")},
},
attempt: &CreateBackportAttempt{
TargetRef: "release/1.19.x",
},
},
"error": {
expectContains: []string{"original body", "error body"},
origin: &libgithub.PullRequest{
Body: libgithub.Ptr("original body"),
Number: libgithub.Ptr(1234),
HTMLURL: libgithub.Ptr("https://github.com/hashicorp/vault-enterprise/pull/1234"),
MergedBy: &libgithub.User{Login: libgithub.Ptr("my-login")},
},
attempt: &CreateBackportAttempt{
TargetRef: "release/1.19.x",
Error: errors.New("error body"),
},
},
} {
t.Run(name, func(t *testing.T) {
t.Parallel()
got, err := renderEmbeddedTemplate("backport-pr-message.tmpl", struct {
OriginPullRequest *libgithub.PullRequest
Attempt *CreateBackportAttempt
}{test.origin, test.attempt})
require.NoError(t, err)
for _, c := range test.expectContains {
require.Containsf(t, got, c, got)
}
for _, nc := range test.expectNotContains {
require.NotContainsf(t, got, nc, got)
}
})
}
}
func Test_renderEmbeddedTemplate_copyPRMessage(t *testing.T) {
t.Parallel()
for name, test := range map[string]struct {
expectContains []string
expectNotContains []string
origin *libgithub.PullRequest
error error
targetRef string
}{
"no error": {
expectContains: []string{"original body"},
expectNotContains: []string{"error body"},
origin: &libgithub.PullRequest{
Body: libgithub.Ptr("original body"),
Number: libgithub.Ptr(1234),
HTMLURL: libgithub.Ptr("https://github.com/hashicorp/vault-enterprise/pull/1234"),
MergedBy: &libgithub.User{Login: libgithub.Ptr("my-login")},
},
targetRef: "release/1.19.x",
error: nil,
},
"error": {
expectContains: []string{"original body", "error body"},
origin: &libgithub.PullRequest{
Body: libgithub.Ptr("original body"),
Number: libgithub.Ptr(1234),
HTMLURL: libgithub.Ptr("https://github.com/hashicorp/vault-enterprise/pull/1234"),
MergedBy: &libgithub.User{Login: libgithub.Ptr("my-login")},
},
targetRef: "release/1.19.x",
error: errors.New("error body"),
},
} {
t.Run(name, func(t *testing.T) {
t.Parallel()
got, err := renderEmbeddedTemplate("copy-pr-message.tmpl", struct {
OriginPullRequest *libgithub.PullRequest
TargetRef string
Error error
}{
test.origin,
test.targetRef,
test.error,
})
require.NoError(t, err)
for _, c := range test.expectContains {
require.Containsf(t, got, c, got)
}
for _, nc := range test.expectNotContains {
require.NotContainsf(t, got, nc, got)
}
})
}
}
func Test_renderEmbeddedTemplateToTmpFile_copyPRComment(t *testing.T) {
t.Parallel()
for name, test := range map[string]struct {
coAuthoredByTrailers []string
originPullRequest *libgithub.PullRequest
targetRef string
}{
"Co-Authored-By": {
coAuthoredByTrailers: []string{
"Co-Authored-By: Jane Doe <jane@example.com>",
"Co-Authored-By: John Doe <john@example.com>",
},
originPullRequest: &libgithub.PullRequest{
Body: libgithub.Ptr("original body"),
Number: libgithub.Ptr(1234),
HTMLURL: libgithub.Ptr("https://github.com/hashicorp/vault-enterprise/pull/1234"),
MergedBy: &libgithub.User{Login: libgithub.Ptr("my-login")},
},
targetRef: "release/1.19.x+ent",
},
} {
t.Run(name, func(t *testing.T) {
t.Parallel()
file, err := renderEmbeddedTemplateToTmpFile("copy-pr-commit-message.tmpl", struct {
CoAuthoredByTrailers []string
OriginPullRequest *libgithub.PullRequest
TargetRef string
}{
test.coAuthoredByTrailers,
test.originPullRequest,
test.targetRef,
})
require.NoError(t, err)
defer file.Close()
bytes, err := io.ReadAll(file)
require.NoError(t, err)
require.NotEmpty(t, bytes)
for _, c := range test.coAuthoredByTrailers {
require.Contains(t, string(bytes), c)
}
})
}
}