- Notifications
You must be signed in to change notification settings - Fork928
feat(coderd): support ephemeral parameters#8367
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Changes from1 commit
ef50c35
de38911
3239d07
469fcc2
712519f
ec04dc5
f1f3a0a
533dde3
97df39f
4ff2705
f826d99
cc20564
35321fc
feceec3
e8cd16d
ffb7b94
85044d3
3636b70
343c87e
38eacbf
8e73da8
dffefb6
69e46ee
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
- Loading branch information
Uh oh!
There was an error while loading.Please reload this page.
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -304,3 +304,89 @@ func TestRichParameterValidation(t *testing.T) { | ||
} | ||
}) | ||
} | ||
func TestParameterResolver_ValidateResolve_Ephemeral_OverridePrevious(t *testing.T) { | ||
t.Parallel() | ||
uut := codersdk.ParameterResolver{ | ||
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}}, | ||
} | ||
p := codersdk.TemplateVersionParameter{ | ||
Name: "n", | ||
Type: "number", | ||
Mutable: true, | ||
Required: true, | ||
Ephemeral: true, | ||
} | ||
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{ | ||
Name: "n", | ||
Value: "6", | ||
}) | ||
require.NoError(t, err) | ||
require.Equal(t, "6", v) | ||
} | ||
func TestParameterResolver_ValidateResolve_Ephemeral_FirstTime(t *testing.T) { | ||
t.Parallel() | ||
uut := codersdk.ParameterResolver{} | ||
p := codersdk.TemplateVersionParameter{ | ||
Name: "n", | ||
Type: "number", | ||
Mutable: true, | ||
Required: true, | ||
Ephemeral: true, | ||
Comment on lines +335 to +336 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. This is an interesting use-case - a required ephemeral value could be the equivalent of a TOS checkbox when building a workspace e.g. "I solemnly swear to not use this workspace for evil. [x]" | ||
} | ||
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{ | ||
Name: "n", | ||
Value: "6", | ||
}) | ||
require.NoError(t, err) | ||
require.Equal(t, "6", v) | ||
} | ||
func TestParameterResolver_ValidateResolve_Ephemeral_UseDefault(t *testing.T) { | ||
t.Parallel() | ||
uut := codersdk.ParameterResolver{} | ||
p := codersdk.TemplateVersionParameter{ | ||
Name: "n", | ||
Type: "number", | ||
Mutable: true, | ||
DefaultValue: "5", | ||
Ephemeral: true, | ||
} | ||
v, err := uut.ValidateResolve(p, nil) | ||
require.NoError(t, err) | ||
require.Equal(t, "5", v) | ||
} | ||
func TestParameterResolver_ValidateResolve_Ephemeral_UseEmptyDefault(t *testing.T) { | ||
t.Parallel() | ||
uut := codersdk.ParameterResolver{} | ||
p := codersdk.TemplateVersionParameter{ | ||
Name: "n", | ||
Type: "number", | ||
Mutable: true, | ||
DefaultValue: "", | ||
Ephemeral: true, | ||
} | ||
v, err := uut.ValidateResolve(p, nil) | ||
require.NoError(t, err) | ||
require.Equal(t, "", v) | ||
} | ||
func TestParameterResolver_ValidateResolve_Ephemeral_RequiredButMissing(t *testing.T) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. What about a case where required = true, but there's also a default value set? Is this possible and should we test it? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. | ||
t.Parallel() | ||
uut := codersdk.ParameterResolver{} | ||
p := codersdk.TemplateVersionParameter{ | ||
Name: "n", | ||
Type: "number", | ||
Mutable: true, | ||
Required: true, | ||
Ephemeral: true, | ||
} | ||
// It is more theoretical than practical case. Schema allows to configure a parameter, | ||
// which always requires from initiator to provide the value, but it is not persisted between | ||
// consecutive workspace builds. | ||
v, err := uut.ValidateResolve(p, nil) | ||
require.Error(t, err) // Parameter is required, but not provided. | ||
require.Equal(t, "", v) | ||
} |