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  }