@red-hat-developer-hub/e2e-test-utils 1.1.17 → 1.1.18
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/dist/deployment/keycloak/deployment.d.ts +14 -0
- package/dist/deployment/keycloak/deployment.d.ts.map +1 -1
- package/dist/deployment/keycloak/deployment.js +34 -0
- package/dist/utils/common.d.ts +2 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +9 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +6 -2
|
@@ -46,6 +46,13 @@ export declare class KeycloakHelper {
|
|
|
46
46
|
* Create a user in a realm with optional group membership
|
|
47
47
|
*/
|
|
48
48
|
createUser(realm: string, config: KeycloakUserConfig): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Create users and groups in a realm.
|
|
51
|
+
*/
|
|
52
|
+
createUsersAndGroups(realm: string, options: {
|
|
53
|
+
users?: KeycloakUserConfig[];
|
|
54
|
+
groups?: KeycloakGroupConfig[];
|
|
55
|
+
}): Promise<void>;
|
|
49
56
|
/**
|
|
50
57
|
* Get all users in a realm
|
|
51
58
|
*/
|
|
@@ -66,6 +73,13 @@ export declare class KeycloakHelper {
|
|
|
66
73
|
* Delete a group from a realm
|
|
67
74
|
*/
|
|
68
75
|
deleteGroup(realm: string, groupName: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Delete users and groups from a realm.
|
|
78
|
+
*/
|
|
79
|
+
deleteUsersAndGroups(realm: string, options: {
|
|
80
|
+
users?: Array<KeycloakUserConfig | string>;
|
|
81
|
+
groups?: Array<KeycloakGroupConfig | string>;
|
|
82
|
+
}): Promise<void>;
|
|
69
83
|
/**
|
|
70
84
|
* Delete a realm
|
|
71
85
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAY1E,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAClB,SAAS,yBAAgC;IACzC,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAM;IACzB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,YAAY,EAAE,MAAM,CAAM;IACjC,OAAO,CAAC,YAAY,CAAoC;gBAE5C,OAAO,GAAE,yBAA8B;IAInD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9D;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1E;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAe5D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAQ9D;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAejC;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -220,6 +220,19 @@ export class KeycloakHelper {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Create users and groups in a realm.
|
|
225
|
+
*/
|
|
226
|
+
async createUsersAndGroups(realm, options) {
|
|
227
|
+
await this._ensureAdminClient();
|
|
228
|
+
const { groups = [], users = [] } = options;
|
|
229
|
+
for (const group of groups) {
|
|
230
|
+
await this.createGroup(realm, group);
|
|
231
|
+
}
|
|
232
|
+
for (const user of users) {
|
|
233
|
+
await this.createUser(realm, user);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
223
236
|
/**
|
|
224
237
|
* Get all users in a realm
|
|
225
238
|
*/
|
|
@@ -265,6 +278,9 @@ export class KeycloakHelper {
|
|
|
265
278
|
* Delete a user from a realm
|
|
266
279
|
*/
|
|
267
280
|
async deleteUser(realm, username) {
|
|
281
|
+
if (DEFAULT_USERS.some((u) => u.username === username)) {
|
|
282
|
+
throw new Error(`Deleting default Keycloak user "${username}" is not permitted.`);
|
|
283
|
+
}
|
|
268
284
|
await this._ensureAdminClient();
|
|
269
285
|
this._adminClient.setConfig({ realmName: realm });
|
|
270
286
|
const users = await this._adminClient.users.find({ username });
|
|
@@ -277,6 +293,9 @@ export class KeycloakHelper {
|
|
|
277
293
|
* Delete a group from a realm
|
|
278
294
|
*/
|
|
279
295
|
async deleteGroup(realm, groupName) {
|
|
296
|
+
if (DEFAULT_GROUPS.some((g) => g.name === groupName)) {
|
|
297
|
+
throw new Error(`Deleting default Keycloak group "${groupName}" is not permitted.`);
|
|
298
|
+
}
|
|
280
299
|
await this._ensureAdminClient();
|
|
281
300
|
this._adminClient.setConfig({ realmName: realm });
|
|
282
301
|
const groups = await this._adminClient.groups.find({ search: groupName });
|
|
@@ -286,6 +305,21 @@ export class KeycloakHelper {
|
|
|
286
305
|
this._log(`Deleted group: ${groupName}`);
|
|
287
306
|
}
|
|
288
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Delete users and groups from a realm.
|
|
310
|
+
*/
|
|
311
|
+
async deleteUsersAndGroups(realm, options) {
|
|
312
|
+
await this._ensureAdminClient();
|
|
313
|
+
const { groups = [], users = [] } = options;
|
|
314
|
+
const usernames = users.map((u) => typeof u === "string" ? u : u.username);
|
|
315
|
+
const groupNames = groups.map((g) => (typeof g === "string" ? g : g.name));
|
|
316
|
+
for (const username of usernames) {
|
|
317
|
+
await this.deleteUser(realm, username);
|
|
318
|
+
}
|
|
319
|
+
for (const groupName of groupNames) {
|
|
320
|
+
await this.deleteGroup(realm, groupName);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
289
323
|
/**
|
|
290
324
|
* Delete a realm
|
|
291
325
|
*/
|
package/dist/utils/common.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,iBAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,oBAAc,UAS/C;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,iBAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,oBAAc,UAS/C;AAED,iBAAS,UAAU,CAAC,GAAG,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAO5D;AAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/utils/common.js
CHANGED
|
@@ -5,4 +5,12 @@ function envsubst(str, env = process.env) {
|
|
|
5
5
|
});
|
|
6
6
|
return out;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
function requireEnv(...varNames) {
|
|
9
|
+
for (const varName of varNames) {
|
|
10
|
+
const value = process.env[varName];
|
|
11
|
+
if (!value) {
|
|
12
|
+
throw new Error(`Required variable ${varName} is not set`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export { envsubst, requireEnv };
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { envsubst } from "./common.js";
|
|
1
|
+
export { envsubst, requireEnv } from "./common.js";
|
|
2
2
|
export { $, runQuietUnlessFailure } from "./bash.js";
|
|
3
3
|
export { mergeYamlFiles, mergeYamlFilesIfExists, mergeYamlFilesToFile, } from "./merge-yamls.js";
|
|
4
4
|
export { KubernetesClientHelper } from "./kubernetes-client.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { envsubst } from "./common.js";
|
|
1
|
+
export { envsubst, requireEnv } from "./common.js";
|
|
2
2
|
export { $, runQuietUnlessFailure } from "./bash.js";
|
|
3
3
|
export { mergeYamlFiles, mergeYamlFilesIfExists, mergeYamlFilesToFile, } from "./merge-yamls.js";
|
|
4
4
|
export { KubernetesClientHelper } from "./kubernetes-client.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@red-hat-developer-hub/e2e-test-utils",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.18",
|
|
4
4
|
"description": "Test utilities for RHDH E2E tests",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
],
|
|
60
60
|
"scripts": {
|
|
61
61
|
"build": "yarn clean && tsc -p tsconfig.build.json && cp -r src/deployment/rhdh/config dist/deployment/rhdh/ && cp -r src/deployment/keycloak/config dist/deployment/keycloak/",
|
|
62
|
+
"prepare": "husky",
|
|
62
63
|
"check": "yarn typecheck && yarn lint:check && yarn prettier:check",
|
|
63
64
|
"clean": "rm -rf dist",
|
|
64
65
|
"lint:check": "eslint . --ignore-pattern dist --ignore-pattern README.md --ignore-pattern docs",
|
|
@@ -90,7 +91,10 @@
|
|
|
90
91
|
"@types/lodash.clonedeepwith": "^4.5.9",
|
|
91
92
|
"@types/lodash.mergewith": "^4.6.9",
|
|
92
93
|
"@types/node": "^24.10.1",
|
|
93
|
-
"@types/proper-lockfile": "^4.1.4"
|
|
94
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
95
|
+
"husky": "^9.1.7",
|
|
96
|
+
"lint-staged": "^15.4.3",
|
|
97
|
+
"markdown-link-check": "^3.13.6"
|
|
94
98
|
},
|
|
95
99
|
"dependencies": {
|
|
96
100
|
"@axe-core/playwright": "^4.11.0",
|