Skip to content

Commit 49f3118

Browse files
feat: add default role support to RoleSet API (#466)
- Add DefaultRole field to RoleSet struct - Add DefaultRoleKey parameter to CreateParams and UpdateParams - Update all tests to include default_role in API responses and assertions
1 parent c6078a4 commit 49f3118

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

role_set.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ type RoleSet struct {
99
Key string `json:"key"`
1010
Description *string `json:"description"`
1111
Roles []*RoleSetItem `json:"roles"`
12+
DefaultRole *RoleSetItem `json:"default_role"`
1213
// Type defines the type of role set. It can be either "initial" or "custom".
1314
Type string `json:"type"`
1415
CreatedAt int64 `json:"created_at"`

roleset/client.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ type CreateParams struct {
3232
// Type defines the type of role set. It can be either "initial" or "custom".
3333
Type *string `json:"type,omitempty"`
3434
// Roles are an array of role keys
35-
Roles *[]string `json:"roles,omitempty"`
35+
Roles *[]string `json:"roles,omitempty"`
36+
DefaultRoleKey *string `json:"default_role_key,omitempty"`
3637
}
3738

3839
// Create creates a new role set.
@@ -64,7 +65,8 @@ type UpdateParams struct {
6465
// Type defines the type of role set. For update operations it can be only set to "initial".
6566
// There's only one "initial" role set per organization, after updating this roleset to "initial"
6667
// the other "initial" role sets will be updated to "custom".
67-
Type *string `json:"type,omitempty"`
68+
Type *string `json:"type,omitempty"`
69+
DefaultRoleKey *string `json:"default_role_key,omitempty"`
6870
}
6971

7072
// Update updates a role set.

roleset/client_test.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,29 @@ func TestRoleSetClient_Create(t *testing.T) {
2424
config.HTTPClient = &http.Client{
2525
Transport: &clerktest.RoundTripper{
2626
T: t,
27-
In: json.RawMessage(fmt.Sprintf(`{"name":"%s","key":"%s","description":"%s", "roles": ["org:member"], "type": "initial"}`, name, key, description)),
28-
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"%s","key":"%s","description":"%s","roles":[],"created_at":1234567890,"updated_at":1234567890}`, roleSetID, name, key, description)),
27+
In: json.RawMessage(fmt.Sprintf(`{"name":"%s","key":"%s","description":"%s", "roles": ["org:member"], "type": "initial", "default_role_key": "org:member"}`, name, key, description)),
28+
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"%s","key":"%s","description":"%s","roles":[],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"type":"initial","created_at":1234567890,"updated_at":1234567890}`, roleSetID, name, key, description)),
2929
Method: http.MethodPost,
3030
Path: "/v1/role_sets",
3131
},
3232
}
3333
client := NewClient(config)
3434
roleSet, err := client.Create(context.Background(), &CreateParams{
35-
Name: clerk.String(name),
36-
Key: clerk.String(key),
37-
Description: clerk.String(description),
38-
Roles: &[]string{"org:member"},
39-
Type: clerk.String("initial"),
35+
Name: clerk.String(name),
36+
Key: clerk.String(key),
37+
Description: clerk.String(description),
38+
Roles: &[]string{"org:member"},
39+
Type: clerk.String("initial"),
40+
DefaultRoleKey: clerk.String("org:member"),
4041
})
4142
require.NoError(t, err)
4243
assert.Equal(t, roleSetID, roleSet.ID)
4344
assert.Equal(t, name, roleSet.Name)
4445
assert.Equal(t, key, roleSet.Key)
4546
assert.Equal(t, description, *roleSet.Description)
47+
assert.NotNil(t, roleSet.DefaultRole)
48+
assert.Equal(t, "org:member", roleSet.DefaultRole.Key)
49+
assert.Equal(t, "Member", roleSet.DefaultRole.Name)
4650
}
4751

4852
func TestRoleSetClient_Get(t *testing.T) {
@@ -53,7 +57,7 @@ func TestRoleSetClient_Get(t *testing.T) {
5357
config.HTTPClient = &http.Client{
5458
Transport: &clerktest.RoundTripper{
5559
T: t,
56-
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","key":"%s","description":"Roles for administrative users","roles":[],"created_at":1234567890,"updated_at":1234567890, "type": "initial"}`, roleSetID, roleSetKey)),
60+
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","key":"%s","description":"Roles for administrative users","roles":[],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"type":"initial","created_at":1234567890,"updated_at":1234567890}`, roleSetID, roleSetKey)),
5761
Method: http.MethodGet,
5862
Path: "/v1/role_sets/" + url.PathEscape(roleSetKey),
5963
},
@@ -74,16 +78,17 @@ func TestRoleSetClient_Update(t *testing.T) {
7478
config.HTTPClient = &http.Client{
7579
Transport: &clerktest.RoundTripper{
7680
T: t,
77-
In: json.RawMessage(fmt.Sprintf(`{"name":"%s", "type": "initial"}`, newName)),
78-
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"%s","key":"%s","description":"Roles for administrative users","roles":[],"created_at":1234567890,"updated_at":1234567891, "type": "initial"}`, roleSetID, newName, roleSetKey)),
81+
In: json.RawMessage(fmt.Sprintf(`{"name":"%s", "type": "initial", "default_role_key": "org:admin"}`, newName)),
82+
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"%s","key":"%s","description":"Roles for administrative users","roles":[],"default_role":{"object":"role_set_item","id":"role_456","name":"Admin","key":"org:admin","description":"Default admin role","created_at":1234567890,"updated_at":1234567890},"type":"initial","created_at":1234567890,"updated_at":1234567891}`, roleSetID, newName, roleSetKey)),
7983
Method: http.MethodPatch,
8084
Path: "/v1/role_sets/" + url.PathEscape(roleSetKey),
8185
},
8286
}
8387
client := NewClient(config)
8488
roleSet, err := client.Update(context.Background(), roleSetKey, &UpdateParams{
85-
Name: clerk.String(newName),
86-
Type: clerk.String("initial"),
89+
Name: clerk.String(newName),
90+
Type: clerk.String("initial"),
91+
DefaultRoleKey: clerk.String("org:admin"),
8792
})
8893
require.NoError(t, err)
8994
assert.Equal(t, roleSetID, roleSet.ID)
@@ -120,8 +125,8 @@ func TestRoleSetClient_List(t *testing.T) {
120125
T: t,
121126
Out: json.RawMessage(fmt.Sprintf(`{
122127
"data": [
123-
{"object":"role_set","id":"%s","name":"Admin Role Set","key":"admin-roles","description":"Admin roles","type": "initial","roles":[],"created_at":1234567890,"updated_at":1234567890},
124-
{"object":"role_set","id":"%s","name":"User Role Set","key":"user-roles","description":"User roles","type": "custom","roles":[],"created_at":1234567890,"updated_at":1234567890}
128+
{"object":"role_set","id":"%s","name":"Admin Role Set","key":"admin-roles","description":"Admin roles","type":"initial","roles":[],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"created_at":1234567890,"updated_at":1234567890},
129+
{"object":"role_set","id":"%s","name":"User Role Set","key":"user-roles","description":"User roles","type":"custom","roles":[],"default_role":{"object":"role_set_item","id":"role_456","name":"User","key":"org:user","description":"Default user role","created_at":1234567890,"updated_at":1234567890},"created_at":1234567890,"updated_at":1234567890}
125130
],
126131
"total_count": 2
127132
}`, roleSet1ID, roleSet2ID)),
@@ -148,7 +153,7 @@ func TestRoleSetClient_AddRoles(t *testing.T) {
148153
Transport: &clerktest.RoundTripper{
149154
T: t,
150155
In: json.RawMessage(`{"role_keys":["role:admin","role:manager"]}`),
151-
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","type": "initial","key":"%s","description":"Admin roles","roles":[{"object":"role_set_item","id":"role_1","name":"Admin","key":"role:admin","description":"Admin role","created_at":1234567890,"updated_at":1234567890}],"created_at":1234567890,"updated_at":1234567891}`, roleSetID, roleSetKey)),
156+
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","type":"initial","key":"%s","description":"Admin roles","roles":[{"object":"role_set_item","id":"role_1","name":"Admin","key":"role:admin","description":"Admin role","created_at":1234567890,"updated_at":1234567890}],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"created_at":1234567890,"updated_at":1234567891}`, roleSetID, roleSetKey)),
152157
Method: http.MethodPost,
153158
Path: "/v1/role_sets/" + url.PathEscape(roleSetKey) + "/roles",
154159
},
@@ -173,7 +178,7 @@ func TestRoleSetClient_RemoveRoles(t *testing.T) {
173178
Transport: &clerktest.RoundTripper{
174179
T: t,
175180
In: json.RawMessage(`{"role_keys":["role:admin"]}`),
176-
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","type": "initial","key":"%s","description":"Admin roles","roles":[],"created_at":1234567890,"updated_at":1234567891}`, roleSetID, roleSetKey)),
181+
Out: json.RawMessage(fmt.Sprintf(`{"object":"role_set","id":"%s","name":"Admin Role Set","type":"initial","key":"%s","description":"Admin roles","roles":[],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"created_at":1234567890,"updated_at":1234567891}`, roleSetID, roleSetKey)),
177182
Method: http.MethodDelete,
178183
Path: "/v1/role_sets/" + url.PathEscape(roleSetKey) + "/roles",
179184
},
@@ -259,7 +264,7 @@ func TestRoleSetClient_ListWithQueryParams(t *testing.T) {
259264
T: t,
260265
Out: json.RawMessage(fmt.Sprintf(`{
261266
"data": [
262-
{"object":"role_set","id":"%s","name":"Admin Role Set","key":"admin-roles","description":"Admin roles","type": "initial","roles":[],"created_at":1234567890,"updated_at":1234567890}
267+
{"object":"role_set","id":"%s","name":"Admin Role Set","key":"admin-roles","description":"Admin roles","type":"initial","roles":[],"default_role":{"object":"role_set_item","id":"role_123","name":"Member","key":"org:member","description":"Default member role","created_at":1234567890,"updated_at":1234567890},"created_at":1234567890,"updated_at":1234567890}
263268
],
264269
"total_count": 1
265270
}`, roleSet1ID)),

0 commit comments

Comments
 (0)