@scalekit-sdk/node 2.1.2 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -11
- package/buf.gen.yaml +3 -0
- package/lib/core.js +1 -1
- package/lib/permission.d.ts +68 -0
- package/lib/permission.js +131 -0
- package/lib/permission.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.d.ts +19 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js +27 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.d.ts +154 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js +226 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.d.ts +2 -2
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js +1 -1
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.d.ts +16 -0
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js +4 -0
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.d.ts +0 -8
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js +0 -6
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.d.ts +250 -0
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js +258 -0
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.d.ts +1157 -0
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js +1799 -0
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.d.ts +46 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js +54 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.d.ts +377 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js +513 -0
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.d.ts +2 -2
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.js +1 -1
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.js.map +1 -1
- package/lib/role.d.ts +104 -0
- package/lib/role.js +205 -0
- package/lib/role.js.map +1 -0
- package/lib/scalekit.d.ts +6 -0
- package/lib/scalekit.js +6 -0
- package/lib/scalekit.js.map +1 -1
- package/lib/session.d.ts +48 -0
- package/lib/session.js +101 -0
- package/lib/session.js.map +1 -0
- package/package.json +1 -1
- package/src/core.ts +1 -1
- package/src/permission.ts +164 -0
- package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.ts +26 -0
- package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.ts +282 -0
- package/src/pkg/grpc/scalekit/v1/commons/commons_pb.ts +3 -3
- package/src/pkg/grpc/scalekit/v1/connections/connections_pb.ts +24 -0
- package/src/pkg/grpc/scalekit/v1/domains/domains_pb.ts +0 -12
- package/src/pkg/grpc/scalekit/v1/roles/roles_connect.ts +257 -0
- package/src/pkg/grpc/scalekit/v1/roles/roles_pb.ts +2357 -0
- package/src/pkg/grpc/scalekit/v1/sessions/sessions_connect.ts +53 -0
- package/src/pkg/grpc/scalekit/v1/sessions/sessions_pb.ts +697 -0
- package/src/pkg/grpc/scalekit/v1/users/users_pb.ts +3 -3
- package/src/role.ts +261 -0
- package/src/scalekit.ts +18 -0
- package/src/session.ts +134 -0
- package/tests/permission.test.ts +399 -0
- package/tests/role.test.ts +323 -0
- package/tests/utils/test-data.ts +168 -1
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import ScalekitClient from '../src/scalekit';
|
|
2
|
+
import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
|
|
3
|
+
import { TestDataGenerator, TestOrganizationManager, TestRoleManager, TestPermissionManager } from './utils/test-data';
|
|
4
|
+
|
|
5
|
+
describe('Permissions', () => {
|
|
6
|
+
let client: ScalekitClient;
|
|
7
|
+
let testOrg: string;
|
|
8
|
+
let testRoleName: string | null = null;
|
|
9
|
+
let testPermissionName: string | null = null;
|
|
10
|
+
let testPermissionName2: string | null = null;
|
|
11
|
+
|
|
12
|
+
beforeEach(async () => {
|
|
13
|
+
// Use global client
|
|
14
|
+
client = global.client;
|
|
15
|
+
|
|
16
|
+
// Create test organization for each test
|
|
17
|
+
testOrg = await TestOrganizationManager.createTestOrganization(client);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
// Clean up test resources
|
|
22
|
+
if (testRoleName) {
|
|
23
|
+
await TestRoleManager.cleanupTestRole(client, testRoleName);
|
|
24
|
+
testRoleName = null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (testPermissionName) {
|
|
28
|
+
await TestPermissionManager.cleanupTestPermission(client, testPermissionName);
|
|
29
|
+
testPermissionName = null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (testPermissionName2) {
|
|
33
|
+
await TestPermissionManager.cleanupTestPermission(client, testPermissionName2);
|
|
34
|
+
testPermissionName2 = null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Clean up test organization
|
|
38
|
+
await TestOrganizationManager.cleanupTestOrganization(client, testOrg);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('PermissionClient', () => {
|
|
42
|
+
it('should have permission client available', () => {
|
|
43
|
+
expect(client.permission).toBeDefined();
|
|
44
|
+
expect(typeof client.permission.createPermission).toBe('function');
|
|
45
|
+
expect(typeof client.permission.getPermission).toBe('function');
|
|
46
|
+
expect(typeof client.permission.listPermissions).toBe('function');
|
|
47
|
+
expect(typeof client.permission.updatePermission).toBe('function');
|
|
48
|
+
expect(typeof client.permission.deletePermission).toBe('function');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should have role-permission management methods available', () => {
|
|
52
|
+
expect(typeof client.permission.listRolePermissions).toBe('function');
|
|
53
|
+
expect(typeof client.permission.addPermissionsToRole).toBe('function');
|
|
54
|
+
expect(typeof client.permission.removePermissionFromRole).toBe('function');
|
|
55
|
+
expect(typeof client.permission.listEffectiveRolePermissions).toBe('function');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('Permission API Integration Tests', () => {
|
|
60
|
+
describe('createPermission', () => {
|
|
61
|
+
it('should create a new permission', async () => {
|
|
62
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
63
|
+
|
|
64
|
+
const response = await client.permission.createPermission(permissionData);
|
|
65
|
+
|
|
66
|
+
expect(response).toBeDefined();
|
|
67
|
+
expect(response.permission).toBeDefined();
|
|
68
|
+
expect(response.permission?.name).toBe(permissionData.name);
|
|
69
|
+
expect(response.permission?.description).toBe(permissionData.description);
|
|
70
|
+
|
|
71
|
+
testPermissionName = response.permission?.name || null;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should throw error when permission name is missing', async () => {
|
|
75
|
+
const permissionData = TestDataGenerator.generatePermissionData({ name: '' });
|
|
76
|
+
|
|
77
|
+
await expect(
|
|
78
|
+
client.permission.createPermission(permissionData)
|
|
79
|
+
).rejects.toThrow();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('should allow empty permission description', async () => {
|
|
83
|
+
const permissionData = TestDataGenerator.generatePermissionData({ description: '' });
|
|
84
|
+
|
|
85
|
+
const response = await client.permission.createPermission(permissionData);
|
|
86
|
+
|
|
87
|
+
expect(response).toBeDefined();
|
|
88
|
+
expect(response.permission).toBeDefined();
|
|
89
|
+
expect(response.permission?.name).toBe(permissionData.name);
|
|
90
|
+
expect(response.permission?.description).toBe('');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('getPermission', () => {
|
|
95
|
+
it('should get permission by name', async () => {
|
|
96
|
+
// Create a test permission first
|
|
97
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
98
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
99
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
100
|
+
|
|
101
|
+
const response = await client.permission.getPermission(testPermissionName!);
|
|
102
|
+
|
|
103
|
+
expect(response).toBeDefined();
|
|
104
|
+
expect(response.permission).toBeDefined();
|
|
105
|
+
expect(response.permission?.name).toBe(testPermissionName);
|
|
106
|
+
expect(response.permission?.description).toBe(permissionData.description);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('should throw error when permission does not exist', async () => {
|
|
110
|
+
await expect(
|
|
111
|
+
client.permission.getPermission('non.existent.permission')
|
|
112
|
+
).rejects.toThrow();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe('listPermissions', () => {
|
|
117
|
+
it('should list all permissions', async () => {
|
|
118
|
+
// Create a test permission first
|
|
119
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
120
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
121
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
122
|
+
|
|
123
|
+
const response = await client.permission.listPermissions();
|
|
124
|
+
|
|
125
|
+
expect(response).toBeDefined();
|
|
126
|
+
expect(response.permissions).toBeDefined();
|
|
127
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
128
|
+
expect(response.permissions.length).toBeGreaterThan(0);
|
|
129
|
+
|
|
130
|
+
// Verify our test permission is in the list
|
|
131
|
+
const testPermission = response.permissions.find(permission => permission.name === testPermissionName);
|
|
132
|
+
expect(testPermission).toBeDefined();
|
|
133
|
+
expect(testPermission?.description).toBe(permissionData.description);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('should handle pagination', async () => {
|
|
137
|
+
// Create multiple test permissions
|
|
138
|
+
const permissionData1 = TestDataGenerator.generatePermissionData();
|
|
139
|
+
const createResponse1 = await client.permission.createPermission(permissionData1);
|
|
140
|
+
testPermissionName = createResponse1.permission?.name || null;
|
|
141
|
+
|
|
142
|
+
const permissionData2 = TestDataGenerator.generatePermissionData();
|
|
143
|
+
const createResponse2 = await client.permission.createPermission(permissionData2);
|
|
144
|
+
testPermissionName2 = createResponse2.permission?.name || null;
|
|
145
|
+
|
|
146
|
+
// List permissions with pagination
|
|
147
|
+
const firstPage = await client.permission.listPermissions(undefined, 1);
|
|
148
|
+
|
|
149
|
+
expect(firstPage).toBeDefined();
|
|
150
|
+
expect(firstPage.permissions.length).toBeLessThanOrEqual(1);
|
|
151
|
+
|
|
152
|
+
if (firstPage.nextPageToken) {
|
|
153
|
+
const secondPage = await client.permission.listPermissions(firstPage.nextPageToken, 1);
|
|
154
|
+
|
|
155
|
+
expect(secondPage).toBeDefined();
|
|
156
|
+
expect(secondPage.permissions).toBeDefined();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe('updatePermission', () => {
|
|
162
|
+
it('should update an existing permission', async () => {
|
|
163
|
+
// Create a test permission first
|
|
164
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
165
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
166
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
167
|
+
|
|
168
|
+
const updateData = TestDataGenerator.generatePermissionData({
|
|
169
|
+
name: testPermissionName!,
|
|
170
|
+
description: 'Updated permission description'
|
|
171
|
+
});
|
|
172
|
+
const response = await client.permission.updatePermission(testPermissionName!, updateData);
|
|
173
|
+
|
|
174
|
+
expect(response).toBeDefined();
|
|
175
|
+
expect(response.permission).toBeDefined();
|
|
176
|
+
expect(response.permission?.name).toBe(testPermissionName);
|
|
177
|
+
expect(response.permission?.description).toBe(updateData.description);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it('should throw error when updating non-existent permission', async () => {
|
|
181
|
+
const updateData = TestDataGenerator.generatePermissionData();
|
|
182
|
+
|
|
183
|
+
await expect(
|
|
184
|
+
client.permission.updatePermission('non.existent.permission', updateData)
|
|
185
|
+
).rejects.toThrow();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
describe('deletePermission', () => {
|
|
190
|
+
it('should delete an existing permission', async () => {
|
|
191
|
+
// Create a test permission first
|
|
192
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
193
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
194
|
+
const permissionName = createResponse.permission?.name || null;
|
|
195
|
+
|
|
196
|
+
const response = await client.permission.deletePermission(permissionName!);
|
|
197
|
+
|
|
198
|
+
expect(response).toBeDefined();
|
|
199
|
+
|
|
200
|
+
// Verify permission is deleted
|
|
201
|
+
await expect(
|
|
202
|
+
client.permission.getPermission(permissionName!)
|
|
203
|
+
).rejects.toThrow();
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
describe('Role-Permission Management API Integration Tests', () => {
|
|
209
|
+
beforeEach(async () => {
|
|
210
|
+
// Create a test role for role-permission tests
|
|
211
|
+
const roleData = TestDataGenerator.generateRoleData();
|
|
212
|
+
const createResponse = await client.role.createRole(roleData);
|
|
213
|
+
testRoleName = createResponse.role?.name || null;
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
describe('listRolePermissions', () => {
|
|
217
|
+
it('should list permissions for a role', async () => {
|
|
218
|
+
const response = await client.permission.listRolePermissions(testRoleName!);
|
|
219
|
+
|
|
220
|
+
expect(response).toBeDefined();
|
|
221
|
+
expect(response.permissions).toBeDefined();
|
|
222
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('should throw error when role does not exist', async () => {
|
|
226
|
+
await expect(
|
|
227
|
+
client.permission.listRolePermissions('non-existent-role')
|
|
228
|
+
).rejects.toThrow();
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('addPermissionsToRole', () => {
|
|
233
|
+
it('should add permissions to a role', async () => {
|
|
234
|
+
// Create test permissions
|
|
235
|
+
const permissionData1 = TestDataGenerator.generatePermissionData();
|
|
236
|
+
const createResponse1 = await client.permission.createPermission(permissionData1);
|
|
237
|
+
testPermissionName = createResponse1.permission?.name || null;
|
|
238
|
+
|
|
239
|
+
const permissionData2 = TestDataGenerator.generatePermissionData();
|
|
240
|
+
const createResponse2 = await client.permission.createPermission(permissionData2);
|
|
241
|
+
testPermissionName2 = createResponse2.permission?.name || null;
|
|
242
|
+
|
|
243
|
+
// Add permissions to role
|
|
244
|
+
const response = await client.permission.addPermissionsToRole(testRoleName!, [
|
|
245
|
+
testPermissionName!,
|
|
246
|
+
testPermissionName2!
|
|
247
|
+
]);
|
|
248
|
+
|
|
249
|
+
expect(response).toBeDefined();
|
|
250
|
+
expect(response.permissions).toBeDefined();
|
|
251
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
252
|
+
expect(response.permissions.length).toBe(2);
|
|
253
|
+
|
|
254
|
+
// Verify permissions were added
|
|
255
|
+
const rolePermissions = await client.permission.listRolePermissions(testRoleName!);
|
|
256
|
+
const addedPermissions = rolePermissions.permissions.filter(p =>
|
|
257
|
+
p.name === testPermissionName || p.name === testPermissionName2
|
|
258
|
+
);
|
|
259
|
+
expect(addedPermissions.length).toBe(2);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
it('should add single permission to a role', async () => {
|
|
263
|
+
// Create test permission
|
|
264
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
265
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
266
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
267
|
+
|
|
268
|
+
// Add permission to role
|
|
269
|
+
const response = await client.permission.addPermissionsToRole(testRoleName!, [testPermissionName!]);
|
|
270
|
+
|
|
271
|
+
expect(response).toBeDefined();
|
|
272
|
+
expect(response.permissions).toBeDefined();
|
|
273
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
274
|
+
expect(response.permissions.length).toBe(1);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('should throw error when role does not exist', async () => {
|
|
278
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
279
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
280
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
281
|
+
|
|
282
|
+
await expect(
|
|
283
|
+
client.permission.addPermissionsToRole('non-existent-role', [testPermissionName!])
|
|
284
|
+
).rejects.toThrow();
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('should throw error when permission does not exist', async () => {
|
|
288
|
+
await expect(
|
|
289
|
+
client.permission.addPermissionsToRole(testRoleName!, ['non.existent.permission'])
|
|
290
|
+
).rejects.toThrow();
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
describe('removePermissionFromRole', () => {
|
|
295
|
+
it('should remove permission from a role', async () => {
|
|
296
|
+
// Create test permission
|
|
297
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
298
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
299
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
300
|
+
|
|
301
|
+
// Add permission to role first
|
|
302
|
+
await client.permission.addPermissionsToRole(testRoleName!, [testPermissionName!]);
|
|
303
|
+
|
|
304
|
+
// Remove permission from role
|
|
305
|
+
const response = await client.permission.removePermissionFromRole(testRoleName!, testPermissionName!);
|
|
306
|
+
|
|
307
|
+
expect(response).toBeDefined();
|
|
308
|
+
|
|
309
|
+
// Verify permission was removed
|
|
310
|
+
const rolePermissions = await client.permission.listRolePermissions(testRoleName!);
|
|
311
|
+
const removedPermission = rolePermissions.permissions.find(p => p.name === testPermissionName);
|
|
312
|
+
expect(removedPermission).toBeUndefined();
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
it('should throw error when role does not exist', async () => {
|
|
316
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
317
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
318
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
319
|
+
|
|
320
|
+
await expect(
|
|
321
|
+
client.permission.removePermissionFromRole('non-existent-role', testPermissionName!)
|
|
322
|
+
).rejects.toThrow();
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
it('should throw error when permission does not exist', async () => {
|
|
326
|
+
await expect(
|
|
327
|
+
client.permission.removePermissionFromRole(testRoleName!, 'non.existent.permission')
|
|
328
|
+
).rejects.toThrow();
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
describe('listEffectiveRolePermissions', () => {
|
|
333
|
+
it('should list effective permissions for a role', async () => {
|
|
334
|
+
// Create test permission
|
|
335
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
336
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
337
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
338
|
+
|
|
339
|
+
// Add permission to role
|
|
340
|
+
await client.permission.addPermissionsToRole(testRoleName!, [testPermissionName!]);
|
|
341
|
+
|
|
342
|
+
// Get effective permissions
|
|
343
|
+
const response = await client.permission.listEffectiveRolePermissions(testRoleName!);
|
|
344
|
+
|
|
345
|
+
expect(response).toBeDefined();
|
|
346
|
+
expect(response.permissions).toBeDefined();
|
|
347
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
348
|
+
|
|
349
|
+
// Verify our permission is in the effective permissions
|
|
350
|
+
const effectivePermission = response.permissions.find(p => p.name === testPermissionName);
|
|
351
|
+
expect(effectivePermission).toBeDefined();
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
it('should list effective permissions for role with inheritance', async () => {
|
|
355
|
+
// Create base role with permission
|
|
356
|
+
const baseRoleData = TestDataGenerator.generateRoleData();
|
|
357
|
+
const baseResponse = await client.role.createRole(baseRoleData);
|
|
358
|
+
const baseRoleName = baseResponse.role?.name;
|
|
359
|
+
|
|
360
|
+
const permissionData = TestDataGenerator.generatePermissionData();
|
|
361
|
+
const createResponse = await client.permission.createPermission(permissionData);
|
|
362
|
+
testPermissionName = createResponse.permission?.name || null;
|
|
363
|
+
|
|
364
|
+
// Add permission to base role
|
|
365
|
+
await client.permission.addPermissionsToRole(baseRoleName!, [testPermissionName!]);
|
|
366
|
+
|
|
367
|
+
// Create extended role
|
|
368
|
+
const extendedRoleData = TestDataGenerator.generateRoleData({
|
|
369
|
+
extends: baseRoleName
|
|
370
|
+
});
|
|
371
|
+
const extendedResponse = await client.role.createRole(extendedRoleData);
|
|
372
|
+
const extendedRoleName = extendedResponse.role?.name;
|
|
373
|
+
|
|
374
|
+
// Get effective permissions for extended role (should include inherited permissions)
|
|
375
|
+
const response = await client.permission.listEffectiveRolePermissions(extendedRoleName!);
|
|
376
|
+
|
|
377
|
+
expect(response).toBeDefined();
|
|
378
|
+
expect(response.permissions).toBeDefined();
|
|
379
|
+
expect(Array.isArray(response.permissions)).toBe(true);
|
|
380
|
+
|
|
381
|
+
// Clean up base role
|
|
382
|
+
if (baseRoleName) {
|
|
383
|
+
await TestRoleManager.cleanupTestRole(client, baseRoleName);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// Clean up extended role
|
|
387
|
+
if (extendedRoleName) {
|
|
388
|
+
await TestRoleManager.cleanupTestRole(client, extendedRoleName);
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
it('should throw error when role does not exist', async () => {
|
|
393
|
+
await expect(
|
|
394
|
+
client.permission.listEffectiveRolePermissions('non-existent-role')
|
|
395
|
+
).rejects.toThrow();
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
});
|