github.com/windmeup/goreleaser@v1.21.95/internal/pipe/release/body_test.go (about) 1 package release 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 "github.com/windmeup/goreleaser/internal/artifact" 10 "github.com/windmeup/goreleaser/internal/golden" 11 "github.com/windmeup/goreleaser/internal/testctx" 12 "github.com/windmeup/goreleaser/internal/testlib" 13 "github.com/windmeup/goreleaser/pkg/config" 14 "github.com/windmeup/goreleaser/pkg/context" 15 ) 16 17 func TestDescribeBody(t *testing.T) { 18 changelog := "feature1: description\nfeature2: other description" 19 ctx := testctx.New() 20 ctx.ReleaseNotes = changelog 21 out, err := describeBody(ctx) 22 require.NoError(t, err) 23 24 golden.RequireEqual(t, out.Bytes()) 25 } 26 27 func TestDontEscapeHTML(t *testing.T) { 28 changelog := "<h1>test</h1>" 29 ctx := testctx.New() 30 ctx.ReleaseNotes = changelog 31 32 out, err := describeBody(ctx) 33 require.NoError(t, err) 34 require.Contains(t, out.String(), changelog) 35 } 36 37 func TestDescribeBodyWithHeaderAndFooter(t *testing.T) { 38 changelog := "feature1: description\nfeature2: other description" 39 ctx := testctx.NewWithCfg( 40 config.Project{ 41 Release: config.Release{ 42 Header: "## Yada yada yada\nsomething\n", 43 Footer: ` 44 --- 45 46 Get images at docker.io/foo/bar:{{.Tag}} 47 48 --- 49 50 Get GoReleaser Pro at https://goreleaser.com/pro 51 52 --- 53 54 ## Checksums 55 56 ` + "```\n{{ .Checksums }}\n```" + ` 57 `, 58 }, 59 }, 60 testctx.WithCurrentTag("v1.0"), 61 func(ctx *context.Context) { ctx.ReleaseNotes = changelog }, 62 ) 63 64 checksumPath := filepath.Join(t.TempDir(), "checksums.txt") 65 checksumContent := "f674623cf1edd0f753e620688cedee4e7c0e837ac1e53c0cbbce132ffe35fd52 foo.zip" 66 ctx.Artifacts.Add(&artifact.Artifact{ 67 Name: "checksums.txt", 68 Path: checksumPath, 69 Type: artifact.Checksum, 70 Extra: map[string]interface{}{ 71 artifact.ExtraRefresh: func() error { 72 return os.WriteFile(checksumPath, []byte(checksumContent), 0o644) 73 }, 74 }, 75 }) 76 out, err := describeBody(ctx) 77 require.NoError(t, err) 78 79 golden.RequireEqual(t, out.Bytes()) 80 } 81 82 func TestDescribeBodyWithInvalidHeaderTemplate(t *testing.T) { 83 ctx := testctx.NewWithCfg(config.Project{ 84 Release: config.Release{ 85 Header: "## {{ .Nop }\n", 86 }, 87 }) 88 _, err := describeBody(ctx) 89 testlib.RequireTemplateError(t, err) 90 } 91 92 func TestDescribeBodyWithInvalidFooterTemplate(t *testing.T) { 93 ctx := testctx.NewWithCfg(config.Project{ 94 Release: config.Release{ 95 Footer: "{{ .Nops }", 96 }, 97 }) 98 _, err := describeBody(ctx) 99 testlib.RequireTemplateError(t, err) 100 }