@@ -66,8 +66,8 @@ test.beforeAll(async ({ rhdh }) => {
6666 // Connect to existing Keycloak
6767 await keycloak .connect ({
6868 baseUrl: process .env .KEYCLOAK_BASE_URL ! ,
69- username: " admin " ,
70- password: " admin123 " ,
69+ username: process . env . VAULT_KEYCLOAK_ADMIN_USERNAME ! ,
70+ password: process . env . VAULT_KEYCLOAK_ADMIN_PASSWORD ! ,
7171 });
7272
7373 // Create admin user
@@ -90,6 +90,56 @@ test.beforeAll(async ({ rhdh }) => {
9090});
9191```
9292
93+ ## Creating Custom Users and Groups in Bulk
94+
95+ ``` typescript
96+ import { KeycloakHelper } from " @red-hat-developer-hub/e2e-test-utils/keycloak" ;
97+ import type {
98+ KeycloakGroupConfig ,
99+ KeycloakUserConfig ,
100+ } from " @red-hat-developer-hub/e2e-test-utils/keycloak" ;
101+
102+ const TEST_GROUPS: KeycloakGroupConfig [] = [
103+ { name: " writers" },
104+ { name: " readers" },
105+ ];
106+
107+ const TEST_USERS: Record <string , KeycloakUserConfig > = {
108+ reader: {
109+ username: " catalog-reader" ,
110+ password: crypto .randomUUID ().substring (0 , 21 ).replaceAll (" -" , " 0" ),
111+ groups: [" readers" ],
112+ },
113+ writer: {
114+ username: " catalog-writer" ,
115+ password: crypto .randomUUID ().substring (0 , 21 ).replaceAll (" -" , " 0" ),
116+ groups: [" writers" ],
117+ },
118+ };
119+
120+ test .beforeAll (async ({ rhdh }) => {
121+ const keycloak = new KeycloakHelper ();
122+ await keycloak .connect ({
123+ baseUrl: process .env .KEYCLOAK_BASE_URL ! ,
124+ username: process .env .VAULT_KEYCLOAK_ADMIN_USERNAME ! ,
125+ password: process .env .VAULT_KEYCLOAK_ADMIN_PASSWORD ! ,
126+ });
127+ await keycloak .createUsersAndGroups (process .env .KEYCLOAK_REALM ! , {
128+ users: Object .values (TEST_USERS ),
129+ groups: TEST_GROUPS ,
130+ });
131+
132+ await rhdh .configure ({ auth: " keycloak" });
133+ await rhdh .deploy ();
134+ });
135+
136+ test .describe (" Writer access" , () => {
137+ test .beforeEach (async ({ page , loginHelper }) => {
138+ await page .goto (" /" );
139+ await loginHelper .loginAsKeycloakUser (TEST_USERS .writer .username , TEST_USERS .writer .password );
140+ });
141+ ` ` `
142+
93143## Testing Role-Based Access
94144
95145` ` ` typescript
@@ -160,8 +210,8 @@ test.afterAll(async () => {
160210 const keycloak = new KeycloakHelper ();
161211 await keycloak .connect ({
162212 baseUrl: process .env .KEYCLOAK_BASE_URL ! ,
163- username: " admin " ,
164- password: " admin123 " ,
213+ username: process . env . VAULT_KEYCLOAK_ADMIN_USERNAME ! ,
214+ password: process . env . VAULT_KEYCLOAK_ADMIN_PASSWORD ! ,
165215 });
166216
167217 // Cleanup custom users
@@ -170,6 +220,27 @@ test.afterAll(async () => {
170220});
171221` ` `
172222
223+ ## Cleanup in Bulk
224+
225+ ` ` ` typescript
226+ import { KeycloakHelper } from " @red-hat-developer-hub/e2e-test-utils/keycloak" ;
227+
228+ test .afterAll (async () => {
229+ const keycloak = new KeycloakHelper ();
230+ await keycloak .connect ({
231+ baseUrl: process .env .KEYCLOAK_BASE_URL ! ,
232+ username: process .env .VAULT_KEYCLOAK_ADMIN_USERNAME ! ,
233+ password: process .env .VAULT_KEYCLOAK_ADMIN_PASSWORD ! ,
234+ });
235+
236+ // Cleanup custom users and groups
237+ await keycloak .deleteUsersAndGroups (" rhdh" , {
238+ users: TEST_USERS ,
239+ groups: TEST_GROUPS ,
240+ });
241+ });
242+ ` ` `
243+
173244## Best Practices
174245
1752461. **Use default users for simple tests** - ` test1 ` , ` test2 `
0 commit comments