github.com/szyn/goreleaser@v0.76.1-0.20180517112710-333da09a1297/pipeline/checksums/checksums_test.go (about)

     1  package checksums
     2  
     3  import (
     4  	"io/ioutil"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/goreleaser/goreleaser/config"
     9  	"github.com/goreleaser/goreleaser/context"
    10  	"github.com/goreleaser/goreleaser/internal/artifact"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestDescription(t *testing.T) {
    15  	assert.NotEmpty(t, Pipe{}.String())
    16  }
    17  
    18  func TestPipe(t *testing.T) {
    19  	var binary = "binary"
    20  	var checksums = binary + "_bar_checksums.txt"
    21  	folder, err := ioutil.TempDir("", "goreleasertest")
    22  	assert.NoError(t, err)
    23  	var file = filepath.Join(folder, binary)
    24  	assert.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0644))
    25  	var ctx = context.New(
    26  		config.Project{
    27  			Dist:        folder,
    28  			ProjectName: binary,
    29  			Checksum: config.Checksum{
    30  				NameTemplate: "{{ .ProjectName }}_{{ .Env.FOO }}_checksums.txt",
    31  			},
    32  		},
    33  	)
    34  	ctx.Env = map[string]string{"FOO": "bar"}
    35  	ctx.Artifacts.Add(artifact.Artifact{
    36  		Name: binary,
    37  		Path: file,
    38  		Type: artifact.UploadableBinary,
    39  	})
    40  	ctx.Artifacts.Add(artifact.Artifact{
    41  		Name: binary + ".tar.gz",
    42  		Path: file,
    43  		Type: artifact.UploadableArchive,
    44  	})
    45  	assert.NoError(t, Pipe{}.Run(ctx))
    46  	var artifacts []string
    47  	for _, a := range ctx.Artifacts.List() {
    48  		artifacts = append(artifacts, a.Name)
    49  	}
    50  	assert.Contains(t, artifacts, checksums, binary)
    51  	bts, err := ioutil.ReadFile(filepath.Join(folder, checksums))
    52  	assert.NoError(t, err)
    53  	assert.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc  binary")
    54  	assert.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc  binary.tar.gz")
    55  }
    56  
    57  func TestPipeFileNotExist(t *testing.T) {
    58  	folder, err := ioutil.TempDir("", "goreleasertest")
    59  	assert.NoError(t, err)
    60  	var ctx = context.New(
    61  		config.Project{
    62  			Dist: folder,
    63  			Checksum: config.Checksum{
    64  				NameTemplate: "checksums.txt",
    65  			},
    66  		},
    67  	)
    68  	ctx.Artifacts.Add(artifact.Artifact{
    69  		Name: "nope",
    70  		Path: "/nope",
    71  		Type: artifact.UploadableBinary,
    72  	})
    73  	err = Pipe{}.Run(ctx)
    74  	assert.Error(t, err)
    75  	assert.Contains(t, err.Error(), "/nope: no such file or directory")
    76  }
    77  
    78  func TestPipeInvalidNameTemplate(t *testing.T) {
    79  	for template, eerr := range map[string]string{
    80  		"{{ .Pro }_checksums.txt": `template: checksums:1: unexpected "}" in operand`,
    81  		"{{.Env.NOPE}}":           `template: checksums:1:6: executing "checksums" at <.Env.NOPE>: map has no entry for key "NOPE"`,
    82  	} {
    83  		t.Run(template, func(tt *testing.T) {
    84  			folder, err := ioutil.TempDir("", "goreleasertest")
    85  			assert.NoError(tt, err)
    86  			var ctx = context.New(
    87  				config.Project{
    88  					Dist:        folder,
    89  					ProjectName: "name",
    90  					Checksum: config.Checksum{
    91  						NameTemplate: template,
    92  					},
    93  				},
    94  			)
    95  			ctx.Artifacts.Add(artifact.Artifact{
    96  				Name: "whatever",
    97  				Type: artifact.UploadableBinary,
    98  			})
    99  			err = Pipe{}.Run(ctx)
   100  			assert.Error(tt, err)
   101  			assert.Equal(tt, eerr, err.Error())
   102  		})
   103  	}
   104  }
   105  
   106  func TestPipeCouldNotOpenChecksumsTxt(t *testing.T) {
   107  	folder, err := ioutil.TempDir("", "goreleasertest")
   108  	assert.NoError(t, err)
   109  	var file = filepath.Join(folder, "checksums.txt")
   110  	assert.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0000))
   111  	var ctx = context.New(
   112  		config.Project{
   113  			Dist: folder,
   114  			Checksum: config.Checksum{
   115  				NameTemplate: "checksums.txt",
   116  			},
   117  		},
   118  	)
   119  	ctx.Artifacts.Add(artifact.Artifact{
   120  		Name: "whatever",
   121  		Type: artifact.UploadableBinary,
   122  	})
   123  	err = Pipe{}.Run(ctx)
   124  	assert.Error(t, err)
   125  	assert.Contains(t, err.Error(), "/checksums.txt: permission denied")
   126  }
   127  
   128  func TestDefault(t *testing.T) {
   129  	var ctx = &context.Context{
   130  		Config: config.Project{
   131  			Checksum: config.Checksum{},
   132  		},
   133  	}
   134  	assert.NoError(t, Pipe{}.Default(ctx))
   135  	assert.Equal(
   136  		t,
   137  		"{{ .ProjectName }}_{{ .Version }}_checksums.txt",
   138  		ctx.Config.Checksum.NameTemplate,
   139  	)
   140  }
   141  
   142  func TestDefaultSet(t *testing.T) {
   143  	var ctx = &context.Context{
   144  		Config: config.Project{
   145  			Checksum: config.Checksum{
   146  				NameTemplate: "checksums.txt",
   147  			},
   148  		},
   149  	}
   150  	assert.NoError(t, Pipe{}.Default(ctx))
   151  	assert.Equal(t, "checksums.txt", ctx.Config.Checksum.NameTemplate)
   152  }