Files
coder/coderd/rbac/acl/updatevalidator_test.go
T

92 lines
3.0 KiB
Go

package acl_test
import (
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/coderd"
"github.com/coder/coder/v2/coderd/database"
"github.com/coder/coder/v2/coderd/database/dbgen"
"github.com/coder/coder/v2/coderd/database/dbtestutil"
"github.com/coder/coder/v2/coderd/rbac/acl"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/testutil"
)
func TestOK(t *testing.T) {
t.Parallel()
db, _ := dbtestutil.NewDB(t)
o := dbgen.Organization(t, db, database.Organization{})
g := dbgen.Group(t, db, database.Group{OrganizationID: o.ID})
u := dbgen.User(t, db, database.User{})
ctx := testutil.Context(t, testutil.WaitShort)
update := codersdk.UpdateWorkspaceACL{
UserRoles: map[string]codersdk.WorkspaceRole{
u.ID.String(): codersdk.WorkspaceRoleAdmin,
// An unknown ID is allowed if and only if the specified role is either
// codersdk.WorkspaceRoleDeleted or codersdk.TemplateRoleDeleted.
uuid.NewString(): codersdk.WorkspaceRoleDeleted,
},
GroupRoles: map[string]codersdk.WorkspaceRole{
g.ID.String(): codersdk.WorkspaceRoleAdmin,
// An unknown ID is allowed if and only if the specified role is either
// codersdk.WorkspaceRoleDeleted or codersdk.TemplateRoleDeleted.
uuid.NewString(): codersdk.WorkspaceRoleDeleted,
},
}
errors := acl.Validate(ctx, db, coderd.WorkspaceACLUpdateValidator(update))
require.Empty(t, errors)
}
func TestDeniesUnknownIDs(t *testing.T) {
t.Parallel()
db, _ := dbtestutil.NewDB(t)
ctx := testutil.Context(t, testutil.WaitShort)
update := codersdk.UpdateWorkspaceACL{
UserRoles: map[string]codersdk.WorkspaceRole{
uuid.NewString(): codersdk.WorkspaceRoleAdmin,
},
GroupRoles: map[string]codersdk.WorkspaceRole{
uuid.NewString(): codersdk.WorkspaceRoleAdmin,
},
}
errors := acl.Validate(ctx, db, coderd.WorkspaceACLUpdateValidator(update))
require.Len(t, errors, 2)
require.Equal(t, errors[0].Field, "group_roles")
require.ErrorContains(t, errors[0], "does not exist")
require.Equal(t, errors[1].Field, "user_roles")
require.ErrorContains(t, errors[1], "does not exist")
}
func TestDeniesUnknownRolesAndInvalidIDs(t *testing.T) {
t.Parallel()
db, _ := dbtestutil.NewDB(t)
ctx := testutil.Context(t, testutil.WaitShort)
update := codersdk.UpdateWorkspaceACL{
UserRoles: map[string]codersdk.WorkspaceRole{
"Quifrey": "level 5",
},
GroupRoles: map[string]codersdk.WorkspaceRole{
"apprentices": "level 2",
},
}
errors := acl.Validate(ctx, db, coderd.WorkspaceACLUpdateValidator(update))
require.Len(t, errors, 4)
require.Equal(t, errors[0].Field, "group_roles")
require.ErrorContains(t, errors[0], "role \"level 2\" is not a valid workspace role")
require.Equal(t, errors[1].Field, "group_roles")
require.ErrorContains(t, errors[1], "not a valid UUID")
require.Equal(t, errors[2].Field, "user_roles")
require.ErrorContains(t, errors[2], "role \"level 5\" is not a valid workspace role")
require.Equal(t, errors[3].Field, "user_roles")
require.ErrorContains(t, errors[3], "not a valid UUID")
}