Skip to content

Commit 7bb52e1

Browse files
authored
test: add tests for updating workspace acl (#19240)
1 parent d1e64af commit 7bb52e1

File tree

3 files changed

+196
-27
lines changed

3 files changed

+196
-27
lines changed

coderd/workspaces_test.go

Lines changed: 105 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2678,8 +2678,7 @@ func TestWorkspaceUpdateAutostart(t *testing.T) {
26782678
// ensure test invariant: new workspaces have no autostart schedule.
26792679
require.Empty(t, workspace.AutostartSchedule, "expected newly-minted workspace to have no autostart schedule")
26802680

2681-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
2682-
defer cancel()
2681+
ctx := testutil.Context(t, testutil.WaitLong)
26832682

26842683
err := client.UpdateWorkspaceAutostart(ctx, workspace.ID, codersdk.UpdateWorkspaceAutostartRequest{
26852684
Schedule: ptr.Ref("CRON_TZ=Europe/Dublin 30 9 * * 1-5"),
@@ -2698,8 +2697,7 @@ func TestWorkspaceUpdateAutostart(t *testing.T) {
26982697
}
26992698
)
27002699

2701-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
2702-
defer cancel()
2700+
ctx := testutil.Context(t, testutil.WaitLong)
27032701

27042702
err := client.UpdateWorkspaceAutostart(ctx, wsid, req)
27052703
require.IsType(t, err, &codersdk.Error{}, "expected codersdk.Error")
@@ -4813,3 +4811,106 @@ func TestMultipleAITasksDisallowed(t *testing.T) {
48134811
require.NoError(t, err)
48144812
require.Contains(t, pj.Error.String, "only one 'coder_ai_task' resource can be provisioned per template")
48154813
}
4814+
4815+
func TestUpdateWorkspaceACL(t *testing.T) {
4816+
t.Parallel()
4817+
4818+
t.Run("OK", func(t *testing.T) {
4819+
t.Parallel()
4820+
4821+
dv := coderdtest.DeploymentValues(t)
4822+
dv.Experiments = []string{string(codersdk.ExperimentWorkspaceSharing)}
4823+
adminClient := coderdtest.New(t, &coderdtest.Options{
4824+
IncludeProvisionerDaemon: true,
4825+
DeploymentValues: dv,
4826+
})
4827+
adminUser := coderdtest.CreateFirstUser(t, adminClient)
4828+
orgID := adminUser.OrganizationID
4829+
client, _ := coderdtest.CreateAnotherUser(t, adminClient, orgID)
4830+
_, friend := coderdtest.CreateAnotherUser(t, adminClient, orgID)
4831+
4832+
tv := coderdtest.CreateTemplateVersion(t, adminClient, orgID, nil)
4833+
coderdtest.AwaitTemplateVersionJobCompleted(t, adminClient, tv.ID)
4834+
template := coderdtest.CreateTemplate(t, adminClient, orgID, tv.ID)
4835+
4836+
ws := coderdtest.CreateWorkspace(t, client, template.ID)
4837+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
4838+
4839+
ctx := testutil.Context(t, testutil.WaitMedium)
4840+
err := client.UpdateWorkspaceACL(ctx, ws.ID, codersdk.UpdateWorkspaceACL{
4841+
UserRoles: map[string]codersdk.WorkspaceRole{
4842+
friend.ID.String(): codersdk.WorkspaceRoleAdmin,
4843+
},
4844+
})
4845+
require.NoError(t, err)
4846+
})
4847+
4848+
t.Run("UnknownUserID", func(t *testing.T) {
4849+
t.Parallel()
4850+
4851+
dv := coderdtest.DeploymentValues(t)
4852+
dv.Experiments = []string{string(codersdk.ExperimentWorkspaceSharing)}
4853+
adminClient := coderdtest.New(t, &coderdtest.Options{
4854+
IncludeProvisionerDaemon: true,
4855+
DeploymentValues: dv,
4856+
})
4857+
adminUser := coderdtest.CreateFirstUser(t, adminClient)
4858+
orgID := adminUser.OrganizationID
4859+
client, _ := coderdtest.CreateAnotherUser(t, adminClient, orgID)
4860+
4861+
tv := coderdtest.CreateTemplateVersion(t, adminClient, orgID, nil)
4862+
coderdtest.AwaitTemplateVersionJobCompleted(t, adminClient, tv.ID)
4863+
template := coderdtest.CreateTemplate(t, adminClient, orgID, tv.ID)
4864+
4865+
ws := coderdtest.CreateWorkspace(t, client, template.ID)
4866+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
4867+
4868+
ctx := testutil.Context(t, testutil.WaitMedium)
4869+
err := client.UpdateWorkspaceACL(ctx, ws.ID, codersdk.UpdateWorkspaceACL{
4870+
UserRoles: map[string]codersdk.WorkspaceRole{
4871+
uuid.NewString(): codersdk.WorkspaceRoleAdmin,
4872+
},
4873+
})
4874+
require.Error(t, err)
4875+
cerr, ok := codersdk.AsError(err)
4876+
require.True(t, ok)
4877+
require.Len(t, cerr.Validations, 1)
4878+
require.Equal(t, cerr.Validations[0].Field, "user_roles")
4879+
})
4880+
4881+
t.Run("DeletedUser", func(t *testing.T) {
4882+
t.Parallel()
4883+
4884+
dv := coderdtest.DeploymentValues(t)
4885+
dv.Experiments = []string{string(codersdk.ExperimentWorkspaceSharing)}
4886+
adminClient := coderdtest.New(t, &coderdtest.Options{
4887+
IncludeProvisionerDaemon: true,
4888+
DeploymentValues: dv,
4889+
})
4890+
adminUser := coderdtest.CreateFirstUser(t, adminClient)
4891+
orgID := adminUser.OrganizationID
4892+
client, _ := coderdtest.CreateAnotherUser(t, adminClient, orgID)
4893+
_, mike := coderdtest.CreateAnotherUser(t, adminClient, orgID)
4894+
4895+
tv := coderdtest.CreateTemplateVersion(t, adminClient, orgID, nil)
4896+
coderdtest.AwaitTemplateVersionJobCompleted(t, adminClient, tv.ID)
4897+
template := coderdtest.CreateTemplate(t, adminClient, orgID, tv.ID)
4898+
4899+
ws := coderdtest.CreateWorkspace(t, client, template.ID)
4900+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
4901+
4902+
ctx := testutil.Context(t, testutil.WaitMedium)
4903+
err := adminClient.DeleteUser(ctx, mike.ID)
4904+
require.NoError(t, err)
4905+
err = client.UpdateWorkspaceACL(ctx, ws.ID, codersdk.UpdateWorkspaceACL{
4906+
UserRoles: map[string]codersdk.WorkspaceRole{
4907+
mike.ID.String(): codersdk.WorkspaceRoleAdmin,
4908+
},
4909+
})
4910+
require.Error(t, err)
4911+
cerr, ok := codersdk.AsError(err)
4912+
require.True(t, ok)
4913+
require.Len(t, cerr.Validations, 1)
4914+
require.Equal(t, cerr.Validations[0].Field, "user_roles")
4915+
})
4916+
}

enterprise/coderd/templates_test.go

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,7 @@ func TestTemplates(t *testing.T) {
7070

7171
_ = coderdtest.CreateWorkspace(t, otherClient, secondTemplate.ID)
7272

73-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
74-
defer cancel()
73+
ctx := testutil.Context(t, testutil.WaitLong)
7574

7675
updated, err := client.UpdateTemplateMeta(ctx, template.ID, codersdk.UpdateTemplateMeta{
7776
DeprecationMessage: ptr.Ref("Stop using this template"),
@@ -185,8 +184,7 @@ func TestTemplates(t *testing.T) {
185184
ws, err := client.Workspace(context.Background(), ws.ID)
186185
require.NoError(t, err)
187186

188-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
189-
defer cancel()
187+
ctx := testutil.Context(t, testutil.WaitLong)
190188

191189
// OK
192190
var level codersdk.WorkspaceAgentPortShareLevel = codersdk.WorkspaceAgentPortShareLevelPublic
@@ -704,8 +702,7 @@ func TestTemplates(t *testing.T) {
704702
coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
705703
require.True(t, template.RequireActiveVersion)
706704

707-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
708-
defer cancel()
705+
ctx := testutil.Context(t, testutil.WaitLong)
709706

710707
// Update the field and assert it persists.
711708
updatedTemplate, err := anotherClient.UpdateTemplateMeta(ctx, template.ID, codersdk.UpdateTemplateMeta{
@@ -761,9 +758,6 @@ func TestTemplates(t *testing.T) {
761758
})
762759
require.NoError(t, err)
763760

764-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
765-
defer cancel()
766-
767761
_, err = owner.Template(ctx, template.ID)
768762
require.NoError(t, err)
769763
})
@@ -932,8 +926,7 @@ func TestTemplateACL(t *testing.T) {
932926
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
933927
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
934928

935-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
936-
defer cancel()
929+
ctx := testutil.Context(t, testutil.WaitLong)
937930

938931
acl, err := anotherClient.TemplateACL(ctx, template.ID)
939932
require.NoError(t, err)
@@ -955,8 +948,7 @@ func TestTemplateACL(t *testing.T) {
955948
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
956949
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
957950

958-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
959-
defer cancel()
951+
ctx := testutil.Context(t, testutil.WaitLong)
960952

961953
//nolint:gocritic // non-template-admin cannot update template acl
962954
acl, err := client.TemplateACL(ctx, template.ID)
@@ -1004,8 +996,7 @@ func TestTemplateACL(t *testing.T) {
1004996
version := coderdtest.CreateTemplateVersion(t, client, admin.OrganizationID, nil)
1005997
template := coderdtest.CreateTemplate(t, client, admin.OrganizationID, version.ID)
1006998

1007-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1008-
defer cancel()
999+
ctx := testutil.Context(t, testutil.WaitLong)
10091000

10101001
//nolint:gocritic // non-template-admin cannot get template acl
10111002
acl, err := client.TemplateACL(ctx, template.ID)
@@ -1267,8 +1258,7 @@ func TestUpdateTemplateACL(t *testing.T) {
12671258
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
12681259
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
12691260

1270-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1271-
defer cancel()
1261+
ctx := testutil.Context(t, testutil.WaitLong)
12721262

12731263
err := anotherClient.UpdateTemplateACL(ctx, template.ID, codersdk.UpdateTemplateACL{
12741264
UserPerms: map[string]codersdk.TemplateRole{
@@ -1359,8 +1349,7 @@ func TestUpdateTemplateACL(t *testing.T) {
13591349
},
13601350
}
13611351

1362-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1363-
defer cancel()
1352+
ctx := testutil.Context(t, testutil.WaitLong)
13641353

13651354
err := anotherClient.UpdateTemplateACL(ctx, template.ID, req)
13661355
require.NoError(t, err)
@@ -1679,8 +1668,7 @@ func TestUpdateTemplateACL(t *testing.T) {
16791668
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
16801669
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
16811670

1682-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1683-
defer cancel()
1671+
ctx := testutil.Context(t, testutil.WaitLong)
16841672

16851673
acl, err := anotherClient.TemplateACL(ctx, template.ID)
16861674
require.NoError(t, err)
@@ -1769,8 +1757,7 @@ func TestUpdateTemplateACL(t *testing.T) {
17691757
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
17701758
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
17711759

1772-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
1773-
defer cancel()
1760+
ctx := testutil.Context(t, testutil.WaitLong)
17741761

17751762
acl, err := anotherClient.TemplateACL(ctx, template.ID)
17761763
require.NoError(t, err)

enterprise/coderd/workspaces_test.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3523,3 +3523,84 @@ func must[T any](value T, err error) T {
35233523
}
35243524
return value
35253525
}
3526+
3527+
func TestUpdateWorkspaceACL(t *testing.T) {
3528+
t.Parallel()
3529+
3530+
t.Run("OKWithGroup", func(t *testing.T) {
3531+
t.Parallel()
3532+
3533+
dv := coderdtest.DeploymentValues(t)
3534+
dv.Experiments = []string{string(codersdk.ExperimentWorkspaceSharing)}
3535+
adminClient, adminUser := coderdenttest.New(t, &coderdenttest.Options{
3536+
Options: &coderdtest.Options{
3537+
IncludeProvisionerDaemon: true,
3538+
DeploymentValues: dv,
3539+
},
3540+
LicenseOptions: &coderdenttest.LicenseOptions{
3541+
Features: license.Features{
3542+
codersdk.FeatureTemplateRBAC: 1,
3543+
},
3544+
},
3545+
})
3546+
orgID := adminUser.OrganizationID
3547+
client, _ := coderdtest.CreateAnotherUser(t, adminClient, orgID)
3548+
_, friend := coderdtest.CreateAnotherUser(t, adminClient, orgID)
3549+
group := coderdtest.CreateGroup(t, adminClient, orgID, "bloob")
3550+
3551+
tv := coderdtest.CreateTemplateVersion(t, adminClient, orgID, nil)
3552+
coderdtest.AwaitTemplateVersionJobCompleted(t, adminClient, tv.ID)
3553+
template := coderdtest.CreateTemplate(t, adminClient, orgID, tv.ID)
3554+
3555+
ws := coderdtest.CreateWorkspace(t, client, template.ID)
3556+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
3557+
3558+
ctx := testutil.Context(t, testutil.WaitMedium)
3559+
err := client.UpdateWorkspaceACL(ctx, ws.ID, codersdk.UpdateWorkspaceACL{
3560+
UserRoles: map[string]codersdk.WorkspaceRole{
3561+
friend.ID.String(): codersdk.WorkspaceRoleAdmin,
3562+
},
3563+
GroupRoles: map[string]codersdk.WorkspaceRole{
3564+
group.ID.String(): codersdk.WorkspaceRoleAdmin,
3565+
},
3566+
})
3567+
require.NoError(t, err)
3568+
})
3569+
3570+
t.Run("UnknownIDs", func(t *testing.T) {
3571+
t.Parallel()
3572+
3573+
dv := coderdtest.DeploymentValues(t)
3574+
dv.Experiments = []string{string(codersdk.ExperimentWorkspaceSharing)}
3575+
adminClient := coderdtest.New(t, &coderdtest.Options{
3576+
IncludeProvisionerDaemon: true,
3577+
DeploymentValues: dv,
3578+
})
3579+
adminUser := coderdtest.CreateFirstUser(t, adminClient)
3580+
orgID := adminUser.OrganizationID
3581+
client, _ := coderdtest.CreateAnotherUser(t, adminClient, orgID)
3582+
3583+
tv := coderdtest.CreateTemplateVersion(t, adminClient, orgID, nil)
3584+
coderdtest.AwaitTemplateVersionJobCompleted(t, adminClient, tv.ID)
3585+
template := coderdtest.CreateTemplate(t, adminClient, orgID, tv.ID)
3586+
3587+
ws := coderdtest.CreateWorkspace(t, client, template.ID)
3588+
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
3589+
3590+
ctx := testutil.Context(t, testutil.WaitMedium)
3591+
err := client.UpdateWorkspaceACL(ctx, ws.ID, codersdk.UpdateWorkspaceACL{
3592+
UserRoles: map[string]codersdk.WorkspaceRole{
3593+
uuid.NewString(): codersdk.WorkspaceRoleAdmin,
3594+
},
3595+
GroupRoles: map[string]codersdk.WorkspaceRole{
3596+
uuid.NewString(): codersdk.WorkspaceRoleAdmin,
3597+
},
3598+
})
3599+
require.Error(t, err)
3600+
cerr, ok := codersdk.AsError(err)
3601+
require.True(t, ok)
3602+
require.Len(t, cerr.Validations, 2)
3603+
require.Equal(t, cerr.Validations[0].Field, "group_roles")
3604+
require.Equal(t, cerr.Validations[1].Field, "user_roles")
3605+
})
3606+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy