forked from SAP/jenkins-library
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetDefaults_test.go
130 lines (116 loc) · 3.88 KB
/
getDefaults_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
120
121
122
123
124
125
126
127
128
129
130
package cmd
import (
"io"
"io/ioutil"
"strings"
"testing"
"github.com/spf13/cobra"
flag "github.com/spf13/pflag"
"github.com/stretchr/testify/assert"
)
var stageConditionsExample string = `#Piper general purpose pipeline stage configuration including conditions
apiVersion: project-piper.io/v1
kind: PipelineDefinition
metadata:
name: sap-piper.general.purpose.pipeline
displayName: Piper general purpose pipeline
description: |-
This is a multiline
test description
spec:
stages:
# Init stage
- name: init
displayName: Init
description: |-
Test description
steps:
- name: getConfig
description: Read pipeline stage configuration.`
var stageConditionsExpected string = `"apiVersion: project-piper.io/v1\nkind: PipelineDefinition\nmetadata:\n description: |-\n This is a multiline\n test description\n displayName: Piper general purpose pipeline\n name: sap-piper.general.purpose.pipeline\nspec:\n` +
` stages:\n - description: Test description\n displayName: Init\n name: init\n steps:\n - description: Read pipeline stage configuration.\n name: getConfig\n"`
func defaultsOpenFileMock(name string, tokens map[string]string) (io.ReadCloser, error) {
var r string
switch name {
case "TestAddCustomDefaults_default1":
r = "default1"
case "TestAddCustomDefaults_default2":
r = "default3"
case "stage_conditions.yaml":
r = stageConditionsExample
default:
r = ""
}
return ioutil.NopCloser(strings.NewReader(r)), nil
}
func TestDefaultsCommand(t *testing.T) {
cmd := DefaultsCommand()
gotReq := []string{}
gotOpt := []string{}
cmd.Flags().VisitAll(func(pflag *flag.Flag) {
annotations, found := pflag.Annotations[cobra.BashCompOneRequiredFlag]
if found && annotations[0] == "true" {
gotReq = append(gotReq, pflag.Name)
} else {
gotOpt = append(gotOpt, pflag.Name)
}
})
t.Run("Required flags", func(t *testing.T) {
exp := []string{"defaultsFile"}
assert.Equal(t, exp, gotReq, "required flags incorrect")
})
t.Run("Optional flags", func(t *testing.T) {
exp := []string{"output", "outputFile", "useV1"}
assert.Equal(t, exp, gotOpt, "optional flags incorrect")
})
t.Run("Run", func(t *testing.T) {
t.Run("Success case", func(t *testing.T) {
defaultsOptions.openFile = defaultsOpenFileMock
defaultsOptions.defaultsFiles = []string{"test", "test"}
cmd.Run(cmd, []string{})
})
})
}
func TestGenerateDefaults(t *testing.T) {
testParams := []struct {
name string
defaultsFiles []string
useV1 bool
expected string
}{
{
name: "Single defaults file",
defaultsFiles: []string{"test"},
expected: `{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test"}`,
},
{
name: "Multiple defaults files",
defaultsFiles: []string{"test1", "test2"},
expected: `[{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test1"},` +
`{"content":"general: null\nstages: null\nsteps: null\n","filepath":"test2"}]`,
},
{
name: "Single file + useV1",
defaultsFiles: []string{"stage_conditions.yaml"},
useV1: true,
expected: `{"content":` + stageConditionsExpected + `,"filepath":"stage_conditions.yaml"}`,
},
{
name: "Multiple files + useV1",
defaultsFiles: []string{"stage_conditions.yaml", "stage_conditions.yaml"},
useV1: true,
expected: `[{"content":` + stageConditionsExpected + `,"filepath":"stage_conditions.yaml"},` +
`{"content":` + stageConditionsExpected + `,"filepath":"stage_conditions.yaml"}]`,
},
}
utils := newGetDefaultsUtilsUtils()
defaultsOptions.openFile = defaultsOpenFileMock
for _, test := range testParams {
t.Run(test.name, func(t *testing.T) {
defaultsOptions.defaultsFiles = test.defaultsFiles
defaultsOptions.useV1 = test.useV1
result, _ := generateDefaults(utils)
assert.Equal(t, test.expected, string(result))
})
}
}