Skip to content

Commit 0e3fc29

Browse files
committed
Add more unit testing
1 parent 2c33a82 commit 0e3fc29

File tree

3 files changed

+138
-5
lines changed

3 files changed

+138
-5
lines changed

coderd/rbac/builtin_internal_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package rbac
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
8+
"github.com/google/uuid"
9+
)
10+
11+
func TestRoleByName(t *testing.T) {
12+
t.Parallel()
13+
14+
t.Run("BuiltIns", func(t *testing.T) {
15+
t.Parallel()
16+
testCases := []struct {
17+
Role Role
18+
}{
19+
{Role: builtInRoles[admin]("")},
20+
{Role: builtInRoles[member]("")},
21+
{Role: builtInRoles[auditor]("")},
22+
23+
{Role: builtInRoles[orgAdmin](uuid.New().String())},
24+
{Role: builtInRoles[orgAdmin](uuid.New().String())},
25+
{Role: builtInRoles[orgAdmin](uuid.New().String())},
26+
27+
{Role: builtInRoles[orgMember](uuid.New().String())},
28+
{Role: builtInRoles[orgMember](uuid.New().String())},
29+
{Role: builtInRoles[orgMember](uuid.New().String())},
30+
}
31+
32+
for _, c := range testCases {
33+
c := c
34+
t.Run(c.Role.Name, func(t *testing.T) {
35+
role, err := RoleByName(c.Role.Name)
36+
require.NoError(t, err, "role exists")
37+
require.Equal(t, c.Role, role)
38+
})
39+
}
40+
})
41+
42+
// nolint:paralleltest
43+
t.Run("Errors", func(t *testing.T) {
44+
var err error
45+
46+
_, err = RoleByName("")
47+
require.Error(t, err, "empty role")
48+
49+
_, err = RoleByName("too:many:colons")
50+
require.Error(t, err, "too many colons")
51+
52+
_, err = RoleByName(orgMember)
53+
require.Error(t, err, "expect orgID")
54+
})
55+
}

coderd/rbac/builtin_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package rbac_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/google/uuid"
7+
8+
"github.com/stretchr/testify/require"
9+
10+
"github.com/coder/coder/coderd/rbac"
11+
)
12+
13+
func TestIsOrgRole(t *testing.T) {
14+
t.Parallel()
15+
randomUUID := uuid.New()
16+
17+
testCases := []struct {
18+
RoleName string
19+
OrgRole bool
20+
OrgID string
21+
}{
22+
// Not org roles
23+
{RoleName: rbac.RoleAdmin()},
24+
{RoleName: rbac.RoleMember()},
25+
{RoleName: "auditor"},
26+
27+
{
28+
RoleName: "a:bad:role",
29+
OrgRole: false,
30+
},
31+
{
32+
RoleName: "",
33+
OrgRole: false,
34+
},
35+
36+
// Org roles
37+
{
38+
RoleName: rbac.RoleOrgAdmin(randomUUID),
39+
OrgRole: true,
40+
OrgID: randomUUID.String(),
41+
},
42+
{
43+
RoleName: rbac.RoleOrgMember(randomUUID),
44+
OrgRole: true,
45+
OrgID: randomUUID.String(),
46+
},
47+
{
48+
RoleName: "test:example",
49+
OrgRole: true,
50+
OrgID: "example",
51+
},
52+
}
53+
54+
// nolint:paralleltest
55+
for _, c := range testCases {
56+
t.Run(c.RoleName, func(t *testing.T) {
57+
orgID, ok := rbac.IsOrgRole(c.RoleName)
58+
require.Equal(t, c.OrgRole, ok, "match expected org role")
59+
require.Equal(t, c.OrgID, orgID, "match expected org id")
60+
})
61+
}
62+
}

coderd/users_test.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,23 +292,39 @@ func TestGrantRoles(t *testing.T) {
292292
t.Run("UpdateIncorrectRoles", func(t *testing.T) {
293293
t.Parallel()
294294
ctx := context.Background()
295-
client := coderdtest.New(t, nil)
296-
first := coderdtest.CreateFirstUser(t, client)
295+
admin := coderdtest.New(t, nil)
296+
first := coderdtest.CreateFirstUser(t, admin)
297+
member := coderdtest.CreateAnotherUser(t, admin, first.OrganizationID)
297298

298-
_, err := client.UpdateUserRoles(ctx, codersdk.Me, codersdk.UpdateRoles{
299+
_, err := admin.UpdateUserRoles(ctx, codersdk.Me, codersdk.UpdateRoles{
299300
Roles: []string{rbac.RoleOrgMember(first.OrganizationID)},
300301
})
301302
require.Error(t, err, "org role in site")
302303

303-
_, err = client.UpdateOrganizationMemberRoles(ctx, first.OrganizationID, codersdk.Me, codersdk.UpdateRoles{
304+
_, err = admin.UpdateUserRoles(ctx, uuid.New(), codersdk.UpdateRoles{
305+
Roles: []string{rbac.RoleOrgMember(first.OrganizationID)},
306+
})
307+
require.Error(t, err, "user does not exist")
308+
309+
_, err = admin.UpdateOrganizationMemberRoles(ctx, first.OrganizationID, codersdk.Me, codersdk.UpdateRoles{
304310
Roles: []string{rbac.RoleMember()},
305311
})
306312
require.Error(t, err, "site role in org")
307313

308-
_, err = client.UpdateOrganizationMemberRoles(ctx, uuid.New(), codersdk.Me, codersdk.UpdateRoles{
314+
_, err = admin.UpdateOrganizationMemberRoles(ctx, uuid.New(), codersdk.Me, codersdk.UpdateRoles{
309315
Roles: []string{rbac.RoleMember()},
310316
})
311317
require.Error(t, err, "role in org without membership")
318+
319+
_, err = member.UpdateUserRoles(ctx, first.UserID, codersdk.UpdateRoles{
320+
Roles: []string{rbac.RoleMember()},
321+
})
322+
require.Error(t, err, "member cannot change other's roles")
323+
324+
_, err = member.UpdateOrganizationMemberRoles(ctx, first.OrganizationID, first.UserID, codersdk.UpdateRoles{
325+
Roles: []string{rbac.RoleMember()},
326+
})
327+
require.Error(t, err, "member cannot change other's org roles")
312328
})
313329

314330
t.Run("FirstUserRoles", func(t *testing.T) {

0 commit comments

Comments
 (0)