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  }