MCPcopy Create free account
hub / github.com/coder/coder / TestWorkspacesWithoutTemplatePerms

Function TestWorkspacesWithoutTemplatePerms

enterprise/coderd/workspaces_test.go:3994–4046  ·  view source on GitHub ↗

TestWorkspacesWithoutTemplatePerms creates a workspace for a user, then drops the user's perms to the underlying template.

(t *testing.T)

Source from the content-addressed store, hash-verified

3992// TestWorkspacesWithoutTemplatePerms creates a workspace for a user, then drops
3993// the user's perms to the underlying template.
3994func 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
4048func TestWorkspaceLock(t *testing.T) {
4049 t.Parallel()

Callers

nothing calls this directly

Calls 14

StatusCodeMethod · 0.95
NewFunction · 0.92
CreateTemplateVersionFunction · 0.92
CreateTemplateFunction · 0.92
CreateAnotherUserFunction · 0.92
CreateWorkspaceFunction · 0.92
UpdateTemplateACLMethod · 0.80
WorkspaceMethod · 0.80
WorkspacesMethod · 0.80
StringMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected