github.com/triarius/goreleaser@v1.12.5/internal/extrafiles/extra_files_test.go (about) 1 package extrafiles 2 3 import ( 4 "testing" 5 6 "github.com/triarius/goreleaser/pkg/config" 7 "github.com/triarius/goreleaser/pkg/context" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestTemplate(t *testing.T) { 12 globs := []config.ExtraFile{ 13 {Glob: "./testdata/file{{ .Env.ONE }}.golden"}, 14 } 15 16 ctx := context.New(config.Project{}) 17 ctx.Env["ONE"] = "1" 18 files, err := Find(ctx, globs) 19 require.NoError(t, err) 20 require.Len(t, files, 1) 21 require.Equal(t, "testdata/file1.golden", files["file1.golden"]) 22 } 23 24 func TestBadTemplate(t *testing.T) { 25 globs := []config.ExtraFile{ 26 {Glob: "./testdata/file{{ .Env.NOPE }}.golden"}, 27 } 28 29 ctx := context.New(config.Project{}) 30 files, err := Find(ctx, globs) 31 require.Empty(t, files) 32 require.EqualError(t, err, `failed to apply template to glob "./testdata/file{{ .Env.NOPE }}.golden": template: tmpl:1:22: executing "tmpl" at <.Env.NOPE>: map has no entry for key "NOPE"`) 33 } 34 35 func TestShouldGetSpecificFile(t *testing.T) { 36 globs := []config.ExtraFile{ 37 {}, // empty glob, will be ignored 38 {Glob: "./testdata/sub3"}, // will get a file1.golden as well, but will be overridden 39 {Glob: "./testdata/file1.golden"}, 40 } 41 42 files, err := Find(context.New(config.Project{}), globs) 43 require.NoError(t, err) 44 require.Len(t, files, 1) 45 46 require.Equal(t, "testdata/file1.golden", files["file1.golden"]) 47 } 48 49 func TestFailToGetSpecificFile(t *testing.T) { 50 globs := []config.ExtraFile{ 51 {Glob: "./testdata/file453.golden"}, 52 } 53 54 files, err := Find(context.New(config.Project{}), globs) 55 require.EqualError(t, err, "globbing failed for pattern ./testdata/file453.golden: matching \"./testdata/file453.golden\": file does not exist") 56 require.Empty(t, files) 57 } 58 59 func TestShouldGetFilesWithSuperStar(t *testing.T) { 60 globs := []config.ExtraFile{ 61 {Glob: "./**/file?.golden"}, 62 } 63 64 files, err := Find(context.New(config.Project{}), globs) 65 require.NoError(t, err) 66 require.Len(t, files, 3) 67 require.Equal(t, "testdata/file2.golden", files["file2.golden"]) 68 require.Equal(t, "testdata/sub3/file1.golden", files["file1.golden"]) 69 require.Equal(t, "testdata/sub/file5.golden", files["file5.golden"]) 70 } 71 72 func TestShouldGetAllFilesWithGoldenExtension(t *testing.T) { 73 globs := []config.ExtraFile{ 74 {Glob: "./testdata/*.golden"}, 75 } 76 77 files, err := Find(context.New(config.Project{}), globs) 78 require.NoError(t, err) 79 require.Len(t, files, 2) 80 require.Equal(t, "testdata/file1.golden", files["file1.golden"]) 81 require.Equal(t, "testdata/file2.golden", files["file2.golden"]) 82 } 83 84 func TestShouldGetAllFilesInsideTestdata(t *testing.T) { 85 globs := []config.ExtraFile{ 86 {Glob: "./testdata/*"}, 87 } 88 89 files, err := Find(context.New(config.Project{}), globs) 90 require.NoError(t, err) 91 require.Len(t, files, 4) 92 require.Equal(t, "testdata/sub3/file1.golden", files["file1.golden"]) 93 require.Equal(t, "testdata/file2.golden", files["file2.golden"]) 94 require.Equal(t, "testdata/file3.gold", files["file3.gold"]) 95 require.Equal(t, "testdata/sub/file5.golden", files["file5.golden"]) 96 } 97 98 func TestTargetName(t *testing.T) { 99 globs := []config.ExtraFile{ 100 { 101 Glob: "./testdata/file1.golden", 102 NameTemplate: "file1_{{.Tag}}.golden", 103 }, 104 } 105 106 ctx := context.New(config.Project{}) 107 ctx.Git.CurrentTag = "v1.0.0" 108 files, err := Find(ctx, globs) 109 require.NoError(t, err) 110 require.Len(t, files, 1) 111 112 require.Equal(t, "testdata/file1.golden", files["file1_v1.0.0.golden"]) 113 } 114 115 func TestTargetInvalidNameTemplate(t *testing.T) { 116 globs := []config.ExtraFile{ 117 { 118 Glob: "./testdata/file1.golden", 119 NameTemplate: "file1_{{.Env.HONK}}.golden", 120 }, 121 } 122 123 ctx := context.New(config.Project{}) 124 files, err := Find(ctx, globs) 125 require.Empty(t, files) 126 require.EqualError(t, err, `failed to apply template to name "file1_{{.Env.HONK}}.golden": template: tmpl:1:12: executing "tmpl" at <.Env.HONK>: map has no entry for key "HONK"`) 127 } 128 129 func TestTargetNameMatchesMultipleFiles(t *testing.T) { 130 globs := []config.ExtraFile{ 131 { 132 Glob: "./testdata/*", 133 NameTemplate: "file1.golden", 134 }, 135 } 136 137 ctx := context.New(config.Project{}) 138 files, err := Find(ctx, globs) 139 require.Empty(t, files) 140 require.EqualError(t, err, `failed to add extra_file: "./testdata/*" -> "file1.golden": glob matches multiple files`) 141 } 142 143 func TestTargetNameNoMatches(t *testing.T) { 144 globs := []config.ExtraFile{ 145 { 146 Glob: "./testdata/file1.silver", 147 NameTemplate: "file1_{{.Tag}}.golden", 148 }, 149 } 150 151 ctx := context.New(config.Project{}) 152 files, err := Find(ctx, globs) 153 require.Empty(t, files) 154 require.EqualError(t, err, `globbing failed for pattern ./testdata/file1.silver: matching "./testdata/file1.silver": file does not exist`) 155 } 156 157 func TestGlobEvalsToEmpty(t *testing.T) { 158 globs := []config.ExtraFile{ 159 {Glob: `{{ printf "" }}`}, 160 } 161 162 ctx := context.New(config.Project{}) 163 files, err := Find(ctx, globs) 164 require.Empty(t, files) 165 require.NoError(t, err) 166 } 167 168 func TestTargetNameNoGlob(t *testing.T) { 169 globs := []config.ExtraFile{ 170 {NameTemplate: "file1.golden"}, 171 } 172 173 ctx := context.New(config.Project{}) 174 files, err := Find(ctx, globs) 175 require.Empty(t, files) 176 require.NoError(t, err) 177 }