TestWorkspacesWithoutTemplatePerms creates a workspace for a user, then drops the user's perms to the underlying template.
(t *testing.T)
| 3992 | // TestWorkspacesWithoutTemplatePerms creates a workspace for a user, then drops |
| 3993 | // the user's perms to the underlying template. |
| 3994 | func TestWorkspacesWithoutTemplatePerms(t *testing.T) { |
| 3995 | t.Parallel() |
| 3996 | |
| 3997 | client, first := coderdenttest.New(t, &coderdenttest.Options{ |
| 3998 | Options: &coderdtest.Options{ |
| 3999 | IncludeProvisionerDaemon: true, |
| 4000 | }, |
| 4001 | LicenseOptions: &coderdenttest.LicenseOptions{ |
| 4002 | Features: license.Features{ |
| 4003 | codersdk.FeatureTemplateRBAC: 1, |
| 4004 | }, |
| 4005 | }, |
| 4006 | }) |
| 4007 | |
| 4008 | version := coderdtest.CreateTemplateVersion(t, client, first.OrganizationID, nil) |
| 4009 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID) |
| 4010 | template := coderdtest.CreateTemplate(t, client, first.OrganizationID, version.ID) |
| 4011 | |
| 4012 | user, _ := coderdtest.CreateAnotherUser(t, client, first.OrganizationID) |
| 4013 | workspace := coderdtest.CreateWorkspace(t, user, template.ID) |
| 4014 | |
| 4015 | ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) |
| 4016 | defer cancel() |
| 4017 | |
| 4018 | // Remove everyone access |
| 4019 | //nolint:gocritic // creating a separate user just for this is overkill |
| 4020 | err := client.UpdateTemplateACL(ctx, template.ID, codersdk.UpdateTemplateACL{ |
| 4021 | GroupPerms: map[string]codersdk.TemplateRole{ |
| 4022 | first.OrganizationID.String(): codersdk.TemplateRoleDeleted, |
| 4023 | }, |
| 4024 | }) |
| 4025 | require.NoError(t, err, "remove everyone access") |
| 4026 | |
| 4027 | // This should fail as the user cannot read the template |
| 4028 | _, err = user.Workspace(ctx, workspace.ID) |
| 4029 | require.Error(t, err, "fetch workspace") |
| 4030 | var sdkError *codersdk.Error |
| 4031 | require.ErrorAs(t, err, &sdkError) |
| 4032 | require.Equal(t, http.StatusForbidden, sdkError.StatusCode()) |
| 4033 | |
| 4034 | _, err = user.Workspaces(ctx, codersdk.WorkspaceFilter{}) |
| 4035 | require.NoError(t, err, "fetch workspaces should not fail") |
| 4036 | |
| 4037 | // Now create another workspace the user can read. |
| 4038 | version2 := coderdtest.CreateTemplateVersion(t, client, first.OrganizationID, nil) |
| 4039 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version2.ID) |
| 4040 | template2 := coderdtest.CreateTemplate(t, client, first.OrganizationID, version2.ID) |
| 4041 | _ = coderdtest.CreateWorkspace(t, user, template2.ID) |
| 4042 | |
| 4043 | workspaces, err := user.Workspaces(ctx, codersdk.WorkspaceFilter{}) |
| 4044 | require.NoError(t, err, "fetch workspaces should not fail") |
| 4045 | require.Len(t, workspaces.Workspaces, 1) |
| 4046 | } |
| 4047 | |
| 4048 | func TestWorkspaceLock(t *testing.T) { |
| 4049 | t.Parallel() |
nothing calls this directly
no test coverage detected