mirror of https://github.com/coder/coder.git
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package rbac
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func TestRoleByName(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("BuiltIns", func(t *testing.T) {
|
|
t.Parallel()
|
|
testCases := []struct {
|
|
Role Role
|
|
}{
|
|
{Role: builtInRoles[owner]("")},
|
|
{Role: builtInRoles[member]("")},
|
|
{Role: builtInRoles[templateAdmin]("")},
|
|
{Role: builtInRoles[userAdmin]("")},
|
|
{Role: builtInRoles[auditor]("")},
|
|
|
|
{Role: builtInRoles[orgAdmin](uuid.New().String())},
|
|
{Role: builtInRoles[orgAdmin](uuid.New().String())},
|
|
{Role: builtInRoles[orgAdmin](uuid.New().String())},
|
|
|
|
{Role: builtInRoles[orgMember](uuid.New().String())},
|
|
{Role: builtInRoles[orgMember](uuid.New().String())},
|
|
{Role: builtInRoles[orgMember](uuid.New().String())},
|
|
}
|
|
|
|
for _, c := range testCases {
|
|
c := c
|
|
t.Run(c.Role.Name, func(t *testing.T) {
|
|
role, err := RoleByName(c.Role.Name)
|
|
require.NoError(t, err, "role exists")
|
|
equalRoles(t, c.Role, role)
|
|
})
|
|
}
|
|
})
|
|
|
|
// nolint:paralleltest
|
|
t.Run("Errors", func(t *testing.T) {
|
|
var err error
|
|
|
|
_, err = RoleByName("")
|
|
require.Error(t, err, "empty role")
|
|
|
|
_, err = RoleByName("too:many:colons")
|
|
require.Error(t, err, "too many colons")
|
|
|
|
_, err = RoleByName(orgMember)
|
|
require.Error(t, err, "expect orgID")
|
|
})
|
|
}
|
|
|
|
// SameAs compares 2 roles for equality.
|
|
func equalRoles(t *testing.T, a, b Role) {
|
|
require.Equal(t, a.Name, b.Name, "role names")
|
|
require.Equal(t, a.DisplayName, b.DisplayName, "role display names")
|
|
require.ElementsMatch(t, a.Site, b.Site, "site permissions")
|
|
require.ElementsMatch(t, a.User, b.User, "user permissions")
|
|
require.Equal(t, len(a.Org), len(b.Org), "same number of org roles")
|
|
|
|
for ak, av := range a.Org {
|
|
bv, ok := b.Org[ak]
|
|
require.True(t, ok, "org permissions missing: %s", ak)
|
|
require.ElementsMatchf(t, av, bv, "org %s permissions", ak)
|
|
}
|
|
}
|