Skip to content

Commit 0a7578c

Browse files
committed
Unit tests for build options
1 parent 3baef18 commit 0a7578c

File tree

4 files changed

+103
-4
lines changed

4 files changed

+103
-4
lines changed

cli/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ PromptRichParamLoop:
258258
}
259259

260260
// Param file is all or nothing
261-
if !useParamFile {
261+
if !useParamFile && !templateVersionParameter.Ephemeral {
262262
for _, e := range args.ExistingRichParams {
263263
if e.Name == templateVersionParameter.Name {
264264
// If the param already exists, we do not need to prompt it again.

cli/create_test.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,13 @@ func TestCreateWithRichParameters(t *testing.T) {
195195
secondParameterDescription = "This is second parameter"
196196
secondParameterValue = "2"
197197

198+
ephemeralParameterName = "ephemeral_parameter"
199+
ephemeralParameterDescription = "This is ephemeral parameter"
200+
ephemeralParameterValue = "3"
201+
198202
immutableParameterName = "third_parameter"
199203
immutableParameterDescription = "This is not mutable parameter"
200-
immutableParameterValue = "3"
204+
immutableParameterValue = "4"
201205
)
202206

203207
echoResponses := &echo.Responses{
@@ -209,6 +213,7 @@ func TestCreateWithRichParameters(t *testing.T) {
209213
Parameters: []*proto.RichParameter{
210214
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
211215
{Name: secondParameterName, DisplayName: secondParameterDisplayName, Description: secondParameterDescription, Mutable: true},
216+
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
212217
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
213218
},
214219
},
@@ -300,6 +305,46 @@ func TestCreateWithRichParameters(t *testing.T) {
300305
}
301306
<-doneChan
302307
})
308+
309+
t.Run("BuildOptions", func(t *testing.T) {
310+
t.Parallel()
311+
312+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
313+
user := coderdtest.CreateFirstUser(t, client)
314+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, echoResponses)
315+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
316+
317+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
318+
319+
inv, root := clitest.New(t, "create", "my-workspace", "--template", template.Name, "--build-options")
320+
clitest.SetupConfig(t, client, root)
321+
doneChan := make(chan struct{})
322+
pty := ptytest.New(t).Attach(inv)
323+
go func() {
324+
defer close(doneChan)
325+
err := inv.Run()
326+
assert.NoError(t, err)
327+
}()
328+
329+
matches := []string{
330+
ephemeralParameterDescription, ephemeralParameterValue,
331+
firstParameterDescription, firstParameterValue,
332+
secondParameterDisplayName, "",
333+
secondParameterDescription, secondParameterValue,
334+
immutableParameterDescription, immutableParameterValue,
335+
"Confirm create?", "yes",
336+
}
337+
for i := 0; i < len(matches); i += 2 {
338+
match := matches[i]
339+
value := matches[i+1]
340+
pty.ExpectMatch(match)
341+
342+
if value != "" {
343+
pty.WriteLine(value)
344+
}
345+
}
346+
<-doneChan
347+
})
303348
}
304349

305350
func TestCreateValidateRichParameters(t *testing.T) {

cli/update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func (r *RootCmd) update() *clibase.Cmd {
2929
if err != nil {
3030
return err
3131
}
32-
if !workspace.Outdated && !alwaysPrompt {
32+
if !workspace.Outdated && !alwaysPrompt && !buildOptions {
3333
_, _ = fmt.Fprintf(inv.Stdout, "Workspace isn't outdated!\n")
3434
return nil
3535
}

cli/update_test.go

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,13 @@ func TestUpdateWithRichParameters(t *testing.T) {
9090
secondParameterDescription = "This is second parameter"
9191
secondParameterValue = "2"
9292

93+
ephemeralParameterName = "ephemeral_parameter"
94+
ephemeralParameterDescription = "This is ephemeral parameter"
95+
ephemeralParameterValue = "3"
96+
9397
immutableParameterName = "immutable_parameter"
9498
immutableParameterDescription = "This is not mutable parameter"
95-
immutableParameterValue = "3"
99+
immutableParameterValue = "4"
96100
)
97101

98102
echoResponses := &echo.Responses{
@@ -105,6 +109,7 @@ func TestUpdateWithRichParameters(t *testing.T) {
105109
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
106110
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
107111
{Name: secondParameterName, Description: secondParameterDescription, Mutable: true},
112+
{Name: ephemeralParameterName, Description: ephemeralParameterDescription, Mutable: true, Ephemeral: true},
108113
},
109114
},
110115
},
@@ -166,6 +171,55 @@ func TestUpdateWithRichParameters(t *testing.T) {
166171
}
167172
<-doneChan
168173
})
174+
175+
t.Run("BuildOptions", func(t *testing.T) {
176+
t.Parallel()
177+
178+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
179+
user := coderdtest.CreateFirstUser(t, client)
180+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, echoResponses)
181+
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
182+
183+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
184+
185+
tempDir := t.TempDir()
186+
removeTmpDirUntilSuccessAfterTest(t, tempDir)
187+
parameterFile, _ := os.CreateTemp(tempDir, "testParameterFile*.yaml")
188+
_, _ = parameterFile.WriteString(
189+
firstParameterName + ": " + firstParameterValue + "\n" +
190+
immutableParameterName + ": " + immutableParameterValue + "\n" +
191+
secondParameterName + ": " + secondParameterValue)
192+
193+
inv, root := clitest.New(t, "create", "my-workspace", "--template", template.Name, "--rich-parameter-file", parameterFile.Name(), "-y")
194+
clitest.SetupConfig(t, client, root)
195+
err := inv.Run()
196+
assert.NoError(t, err)
197+
198+
inv, root = clitest.New(t, "update", "my-workspace", "--build-options")
199+
clitest.SetupConfig(t, client, root)
200+
201+
doneChan := make(chan struct{})
202+
pty := ptytest.New(t).Attach(inv)
203+
go func() {
204+
defer close(doneChan)
205+
err := inv.Run()
206+
assert.NoError(t, err)
207+
}()
208+
209+
matches := []string{
210+
ephemeralParameterDescription, ephemeralParameterValue,
211+
"Planning workspace", "",
212+
}
213+
for i := 0; i < len(matches); i += 2 {
214+
match := matches[i]
215+
value := matches[i+1]
216+
pty.ExpectMatch(match)
217+
if value != "" {
218+
pty.WriteLine(value)
219+
}
220+
}
221+
<-doneChan
222+
})
169223
}
170224

171225
func TestUpdateValidateRichParameters(t *testing.T) {

0 commit comments

Comments
 (0)