Skip to content

Commit fb82fd4

Browse files
committed
Fix
1 parent abf3a3a commit fb82fd4

File tree

3 files changed

+61
-5
lines changed

3 files changed

+61
-5
lines changed

cli/create_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,48 @@ func TestCreateValidateRichParameters(t *testing.T) {
650650
}
651651
<-doneChan
652652
})
653+
654+
t.Run("ValidateListOfStrings_YAMLFile", func(t *testing.T) {
655+
t.Parallel()
656+
657+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
658+
user := coderdtest.CreateFirstUser(t, client)
659+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, prepareEchoResponses(listOfStringsRichParameters))
660+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
661+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
662+
663+
tempDir := t.TempDir()
664+
removeTmpDirUntilSuccessAfterTest(t, tempDir)
665+
parameterFile, _ := os.CreateTemp(tempDir, "testParameterFile*.yaml")
666+
_, _ = parameterFile.WriteString(listOfStringsParameterName + `:
667+
- ddd
668+
- eee
669+
- fff`)
670+
cmd, root := clitest.New(t, "create", "my-workspace", "--template", template.Name, "--rich-parameter-file", parameterFile.Name())
671+
clitest.SetupConfig(t, client, root)
672+
doneChan := make(chan struct{})
673+
pty := ptytest.New(t)
674+
cmd.SetIn(pty.Input())
675+
cmd.SetOut(pty.Output())
676+
go func() {
677+
defer close(doneChan)
678+
err := cmd.Execute()
679+
assert.NoError(t, err)
680+
}()
681+
682+
matches := []string{
683+
"Confirm create?", "yes",
684+
}
685+
for i := 0; i < len(matches); i += 2 {
686+
match := matches[i]
687+
value := matches[i+1]
688+
pty.ExpectMatch(match)
689+
if value != "" {
690+
pty.WriteLine(value)
691+
}
692+
}
693+
<-doneChan
694+
})
653695
}
654696

655697
func TestCreateWithGitAuth(t *testing.T) {

cli/parameter.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cli
22

33
import (
4+
"encoding/json"
45
"os"
56

67
"github.com/spf13/cobra"
@@ -15,19 +16,32 @@ import (
1516
// Throws an error if the file name is empty.
1617
func createParameterMapFromFile(parameterFile string) (map[string]string, error) {
1718
if parameterFile != "" {
18-
parameterMap := make(map[string]string)
19-
2019
parameterFileContents, err := os.ReadFile(parameterFile)
2120
if err != nil {
2221
return nil, err
2322
}
2423

25-
err = yaml.Unmarshal(parameterFileContents, &parameterMap)
26-
24+
mapStringInterface := make(map[string]interface{})
25+
err = yaml.Unmarshal(parameterFileContents, &mapStringInterface)
2726
if err != nil {
2827
return nil, err
2928
}
3029

30+
parameterMap := map[string]string{}
31+
for k, v := range mapStringInterface {
32+
switch val := v.(type) {
33+
case string:
34+
parameterMap[k] = val
35+
case []interface{}:
36+
b, err := json.Marshal(&val)
37+
if err != nil {
38+
return nil, err
39+
}
40+
parameterMap[k] = string(b)
41+
default:
42+
return nil, xerrors.Errorf("invalid parameter type: %T", v)
43+
}
44+
}
3145
return parameterMap, nil
3246
}
3347

cli/parameter_internal_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func TestCreateParameterMapFromFile(t *testing.T) {
6060
parameterMapFromFile, err := createParameterMapFromFile(parameterFile.Name())
6161

6262
assert.Nil(t, parameterMapFromFile)
63-
assert.EqualError(t, err, "yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `region ...` into map[string]string")
63+
assert.EqualError(t, err, "yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `region ...` into map[string]interface {}")
6464

6565
removeTmpDirUntilSuccess(t, tempDir)
6666
})

0 commit comments

Comments
 (0)