github.com/goreleaser/goreleaser@v1.25.1/cmd/init_test.go (about) 1 package cmd 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestInit(t *testing.T) { 12 folder := setupInitTest(t) 13 cmd := newInitCmd().cmd 14 config := "foo.yaml" 15 cmd.SetArgs([]string{"-f", config}) 16 require.NoError(t, cmd.Execute()) 17 require.FileExists(t, filepath.Join(folder, config)) 18 require.FileExists(t, filepath.Join(folder, ".gitignore")) 19 } 20 21 func TestInitConfigAlreadyExist(t *testing.T) { 22 folder := setupInitTest(t) 23 config := "foo.yaml" 24 configPath := filepath.Join(folder, config) 25 26 cmd := newInitCmd().cmd 27 cmd.SetArgs([]string{"-f", config}) 28 content := []byte("foo: bar\n") 29 require.NoError(t, os.WriteFile(configPath, content, 0o644)) 30 31 require.Error(t, cmd.Execute()) 32 require.FileExists(t, configPath) 33 require.NoFileExists(t, filepath.Join(folder, ".gitignore")) 34 35 bts, err := os.ReadFile(configPath) 36 require.NoError(t, err) 37 require.Equal(t, string(content), string(bts)) 38 } 39 40 func TestInitGitIgnoreExists(t *testing.T) { 41 folder := setupInitTest(t) 42 cmd := newInitCmd().cmd 43 44 config := "foo.yaml" 45 require.NoError(t, os.WriteFile(filepath.Join(folder, ".gitignore"), []byte("mybinary\n"), 0o644)) 46 47 cmd.SetArgs([]string{"-f", config}) 48 require.NoError(t, cmd.Execute()) 49 require.FileExists(t, filepath.Join(folder, config)) 50 require.FileExists(t, filepath.Join(folder, ".gitignore")) 51 52 bts, err := os.ReadFile(".gitignore") 53 require.NoError(t, err) 54 require.Equal(t, "mybinary\n\ndist/\n", string(bts)) 55 } 56 57 func TestInitFileError(t *testing.T) { 58 folder := setupInitTest(t) 59 cmd := newInitCmd().cmd 60 path := filepath.Join(folder, "nope.yaml") 61 require.NoError(t, os.Chmod(folder, 0o000)) 62 cmd.SetArgs([]string{"-f", path}) 63 require.EqualError(t, cmd.Execute(), "open "+path+": permission denied") 64 } 65 66 func setupInitTest(tb testing.TB) string { 67 tb.Helper() 68 69 folder := tb.TempDir() 70 wd, err := os.Getwd() 71 require.NoError(tb, err) 72 tb.Cleanup(func() { 73 require.NoError(tb, os.Chdir(wd)) 74 }) 75 require.NoError(tb, os.Chdir(folder)) 76 return folder 77 } 78 79 func TestHasDistIgnored(t *testing.T) { 80 t.Run("ignored", func(t *testing.T) { 81 require.True(t, hasDistIgnored("../.gitignore")) 82 }) 83 84 t.Run("ignored middle of file", func(t *testing.T) { 85 path := filepath.Join(t.TempDir(), "gitignore") 86 require.NoError(t, os.WriteFile(path, []byte("foo\ndist/\nbar\n"), 0o644)) 87 require.True(t, hasDistIgnored(path)) 88 }) 89 90 t.Run("not ignored", func(t *testing.T) { 91 path := filepath.Join(t.TempDir(), "gitignore") 92 require.NoError(t, os.WriteFile(path, []byte("foo\nbar\n"), 0o644)) 93 require.False(t, hasDistIgnored(path)) 94 }) 95 96 t.Run("file does not exist", func(t *testing.T) { 97 path := filepath.Join(t.TempDir(), "gitignore") 98 require.False(t, hasDistIgnored(path)) 99 }) 100 }