/
before_test.go
119 lines (107 loc) · 2.6 KB
/
before_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package before
import (
"os"
"path/filepath"
"testing"
"github.com/caarlos0/log"
"github.com/goreleaser/goreleaser/internal/skips"
"github.com/goreleaser/goreleaser/internal/testctx"
"github.com/goreleaser/goreleaser/internal/testlib"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/stretchr/testify/require"
)
func TestMain(m *testing.M) {
log.SetLevel(log.DebugLevel)
defer log.SetLevel(log.InfoLevel)
os.Exit(m.Run())
}
func TestDescription(t *testing.T) {
require.NotEmpty(t, Pipe{}.String())
}
func TestRunPipe(t *testing.T) {
for _, tc := range [][]string{
nil,
{},
{"go version"},
{"go version", "go list"},
{`bash -c "go version; echo \"lala spaces and such\""`},
} {
ctx := testctx.NewWithCfg(
config.Project{
Before: config.Before{
Hooks: tc,
},
},
)
require.NoError(t, Pipe{}.Run(ctx))
}
}
func TestRunPipeInvalidCommand(t *testing.T) {
ctx := testctx.NewWithCfg(
config.Project{
Before: config.Before{
Hooks: []string{`bash -c "echo \"unterminated command\"`},
},
},
)
require.EqualError(t, Pipe{}.Run(ctx), "invalid command line string")
}
func TestRunPipeFail(t *testing.T) {
for err, tc := range map[string][]string{
"hook failed: shell: 'go tool foobar': exit status 2: go: no such tool \"foobar\"\n": {"go tool foobar"},
"hook failed: shell: 'sh ./testdata/foo.sh': exit status 1: lalala\n": {"sh ./testdata/foo.sh"},
} {
ctx := testctx.NewWithCfg(
config.Project{
Before: config.Before{
Hooks: tc,
},
},
)
require.EqualError(t, Pipe{}.Run(ctx), err)
}
}
func TestRunWithEnv(t *testing.T) {
f := filepath.Join(t.TempDir(), "testfile")
require.NoError(t, Pipe{}.Run(testctx.NewWithCfg(
config.Project{
Env: []string{
"TEST_FILE=" + f,
},
Before: config.Before{
Hooks: []string{"touch {{ .Env.TEST_FILE }}"},
},
},
)))
require.FileExists(t, f)
}
func TestInvalidTemplate(t *testing.T) {
testlib.RequireTemplateError(t, Pipe{}.Run(testctx.NewWithCfg(
config.Project{
Before: config.Before{
Hooks: []string{"touch {{ .fasdsd }"},
},
},
)))
}
func TestSkip(t *testing.T) {
t.Run("skip", func(t *testing.T) {
require.True(t, Pipe{}.Skip(testctx.New()))
})
t.Run("skip before", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
Before: config.Before{
Hooks: []string{""},
},
}, testctx.Skip(skips.Before))
require.True(t, Pipe{}.Skip(ctx))
})
t.Run("dont skip", func(t *testing.T) {
ctx := testctx.NewWithCfg(config.Project{
Before: config.Before{
Hooks: []string{""},
},
})
require.False(t, Pipe{}.Skip(ctx))
})
}