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