|
1 | 1 | package secrethub |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "bytes" |
5 | 4 | "testing" |
6 | 5 |
|
7 | 6 | "github.com/secrethub/secrethub-cli/internals/cli/ui" |
@@ -120,39 +119,56 @@ func TestPromptVariableReader(t *testing.T) { |
120 | 119 | assert.OK(t, err) |
121 | 120 |
|
122 | 121 | cases := map[string]struct { |
123 | | - promptIn string |
124 | | - varName string |
125 | | - expected string |
126 | | - err error |
| 122 | + promptIn []string |
| 123 | + varNames []string |
| 124 | + expected []string |
| 125 | + err []error |
127 | 126 | }{ |
128 | 127 | "prompt": { |
129 | | - promptIn: "foobar", |
130 | | - varName: "test5", |
131 | | - expected: "foobar", |
| 128 | + promptIn: []string{"foobar\n"}, |
| 129 | + varNames: []string{"test5"}, |
| 130 | + expected: []string{"foobar"}, |
132 | 131 | }, |
133 | 132 | "no prompt": { |
134 | | - varName: "test4", |
135 | | - expected: "testD", |
| 133 | + varNames: []string{"test4"}, |
| 134 | + expected: []string{"testD"}, |
136 | 135 | }, |
137 | 136 | "from os env": { |
138 | | - varName: "test2", |
139 | | - expected: "testB", |
| 137 | + varNames: []string{"test2"}, |
| 138 | + expected: []string{"testB"}, |
140 | 139 | }, |
141 | 140 | "template vars shadow os env": { |
142 | | - varName: "test1", |
143 | | - expected: "testAA", |
| 141 | + varNames: []string{"test1"}, |
| 142 | + expected: []string{"testAA"}, |
| 143 | + }, |
| 144 | + "only prompt once": { |
| 145 | + promptIn: []string{"foobar\n"}, |
| 146 | + varNames: []string{"test8", "test8"}, |
| 147 | + expected: []string{"foobar", "foobar"}, |
| 148 | + }, |
| 149 | + "prompt for each new variable": { |
| 150 | + promptIn: []string{"foobar\n", "foo\n"}, |
| 151 | + varNames: []string{"test8", "test8", "test2", "test9", "test8", "test2"}, |
| 152 | + expected: []string{"foobar", "foobar", "testB", "foo", "foobar", "testB"}, |
144 | 153 | }, |
145 | 154 | } |
146 | 155 |
|
147 | 156 | for name, tc := range cases { |
148 | 157 | t.Run(name, func(t *testing.T) { |
149 | 158 | io := ui.NewFakeIO() |
150 | | - io.PromptIn.Buffer = bytes.NewBufferString(tc.promptIn) |
151 | | - reader = newPromptMissingVariableReader(reader, io) |
| 159 | + io.PromptIn.Reads = tc.promptIn |
152 | 160 |
|
153 | | - val, err := reader.ReadVariable(tc.varName) |
154 | | - assert.Equal(t, val, tc.expected) |
155 | | - assert.Equal(t, err, tc.err) |
| 161 | + reader := newPromptMissingVariableReader(reader, io) |
| 162 | + |
| 163 | + for i, varName := range tc.varNames { |
| 164 | + val, err := reader.ReadVariable(varName) |
| 165 | + if tc.err != nil { |
| 166 | + assert.Equal(t, err, tc.err[i]) |
| 167 | + } else { |
| 168 | + assert.OK(t, err) |
| 169 | + } |
| 170 | + assert.Equal(t, val, tc.expected[i]) |
| 171 | + } |
156 | 172 | }) |
157 | 173 | } |
158 | 174 | } |
0 commit comments