Skip to content

Commit c11a3c4

Browse files
committed
chore: add unit test for improper multi-select
1 parent c317769 commit c11a3c4

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

coderd/workspaces_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"github.com/coder/coder/v2/provisioner/echo"
4343
"github.com/coder/coder/v2/provisionersdk/proto"
4444
"github.com/coder/coder/v2/testutil"
45+
"github.com/coder/terraform-provider-coder/v2/provider"
4546
)
4647

4748
func TestWorkspace(t *testing.T) {
@@ -3634,6 +3635,72 @@ func TestWorkspaceWithRichParameters(t *testing.T) {
36343635
require.ElementsMatch(t, expectedBuildParameters, workspaceBuildParameters)
36353636
}
36363637

3638+
func TestWorkspaceWithMultiSelectFailure(t *testing.T) {
3639+
t.Parallel()
3640+
3641+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
3642+
user := coderdtest.CreateFirstUser(t, client)
3643+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
3644+
Parse: echo.ParseComplete,
3645+
ProvisionPlan: []*proto.Response{
3646+
{
3647+
Type: &proto.Response_Plan{
3648+
Plan: &proto.PlanComplete{
3649+
Parameters: []*proto.RichParameter{
3650+
{
3651+
Name: "param",
3652+
Type: provider.OptionTypeListString,
3653+
DefaultValue: `["red"]`,
3654+
Options: []*proto.RichParameterOption{
3655+
{
3656+
Name: "red",
3657+
Value: "red",
3658+
},
3659+
},
3660+
FormType: string(provider.ParameterFormTypeMultiSelect),
3661+
},
3662+
},
3663+
},
3664+
},
3665+
},
3666+
},
3667+
ProvisionApply: []*proto.Response{{
3668+
Type: &proto.Response_Apply{
3669+
Apply: &proto.ApplyComplete{},
3670+
},
3671+
}},
3672+
})
3673+
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
3674+
3675+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
3676+
defer cancel()
3677+
3678+
templateRichParameters, err := client.TemplateVersionRichParameters(ctx, version.ID)
3679+
require.NoError(t, err)
3680+
require.Len(t, templateRichParameters, 1)
3681+
3682+
expectedBuildParameters := []codersdk.WorkspaceBuildParameter{
3683+
// purple is not in the response set
3684+
{Name: "param", Value: `["red", "purple"]`},
3685+
}
3686+
3687+
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
3688+
req := codersdk.CreateWorkspaceRequest{
3689+
TemplateID: template.ID,
3690+
Name: coderdtest.RandomUsername(t),
3691+
AutostartSchedule: ptr.Ref("CRON_TZ=US/Central 30 9 * * 1-5"),
3692+
TTLMillis: ptr.Ref((8 * time.Hour).Milliseconds()),
3693+
AutomaticUpdates: codersdk.AutomaticUpdatesNever,
3694+
RichParameterValues: expectedBuildParameters,
3695+
}
3696+
3697+
_, err = client.CreateUserWorkspace(context.Background(), codersdk.Me, req)
3698+
require.Error(t, err)
3699+
var apiError *codersdk.Error
3700+
require.ErrorAs(t, err, &apiError)
3701+
require.Equal(t, http.StatusBadRequest, apiError.StatusCode())
3702+
}
3703+
36373704
func TestWorkspaceWithOptionalRichParameters(t *testing.T) {
36383705
t.Parallel()
36393706

0 commit comments

Comments
 (0)