@camunda/e2e-test-suite 0.0.439 → 0.0.440

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.
@@ -21,6 +21,7 @@ declare class IdentityTenantPage {
21
21
  readonly cancelButton: Locator;
22
22
  readonly dialog: Locator;
23
23
  readonly row: (name: string) => Locator;
24
+ readonly usersTab: Locator;
24
25
  constructor(page: Page);
25
26
  clickCreateTenantMainButton(): Promise<void>;
26
27
  clickCreateTenantSubButton(): Promise<void>;
@@ -26,11 +26,13 @@ class IdentityTenantPage {
26
26
  cancelButton;
27
27
  dialog;
28
28
  row;
29
+ usersTab;
29
30
  constructor(page) {
30
31
  this.page = page;
31
32
  this.createTenantMainButton = page.getByRole('button', {
32
33
  name: 'Create Tenant',
33
34
  });
35
+ this.usersTab = page.getByRole('tab', { name: 'Users' });
34
36
  this.enterTenantNameInput = page.getByPlaceholder('Enter tenant name');
35
37
  this.enterTenantIdInput = page.getByPlaceholder('Enter tenant ID');
36
38
  this.createTenantSubButton = page.getByRole('button', {
@@ -144,9 +146,25 @@ class IdentityTenantPage {
144
146
  await (0, sleep_1.sleep)(30000);
145
147
  }
146
148
  async clickTenant(tenantName) {
147
- const tenant = this.page.getByText(tenantName).first();
148
- await (0, UtilitiesPage_1.assertLocatorVisibleWithPaginated)(this.page, tenant, `Tenant with name ${tenantName} not found`);
149
- await tenant.click({ timeout: 30000 });
149
+ const maxRetries = 5;
150
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
151
+ try {
152
+ await this.page.waitForLoadState('domcontentloaded').catch(() => { });
153
+ const tenantRow = this.row(tenantName);
154
+ await (0, UtilitiesPage_1.assertLocatorVisibleWithPaginated)(this.page, tenantRow, `Tenant with name ${tenantName} not found`);
155
+ await tenantRow.locator('td').first().click({ timeout: 30000 });
156
+ await this.usersTab.waitFor({ state: 'visible', timeout: 30000 });
157
+ return;
158
+ }
159
+ catch (error) {
160
+ console.warn(`Attempt ${attempt} to click tenant '${tenantName}' failed. Retrying...`, error);
161
+ if (attempt === maxRetries) {
162
+ throw new Error(`Failed to click tenant '${tenantName}' after ${maxRetries} attempts.`);
163
+ }
164
+ await this.page.reload({ timeout: 30000 }).catch(() => { });
165
+ await (0, sleep_1.sleep)(3000);
166
+ }
167
+ }
150
168
  }
151
169
  async isRowVisible(name) {
152
170
  await (0, sleep_1.sleep)(1000);
@@ -187,12 +205,16 @@ class IdentityTenantPage {
187
205
  }
188
206
  async assignClientToTenant(clientName) {
189
207
  await this.clickAssignedApplicationsTab();
208
+ await (0, sleep_1.sleep)(3000);
190
209
  if (await this.isRowVisible(clientName)) {
191
210
  return;
192
211
  }
193
212
  await this.clickAssignApplicationsButton();
194
213
  await this.clickSearchApplicationsInput();
195
214
  await this.fillSearchApplicationsInput(clientName);
215
+ await (0, test_1.expect)(this.page.getByText(clientName, { exact: true })).toBeVisible({
216
+ timeout: 15000,
217
+ });
196
218
  await this.page.getByText(clientName, { exact: true }).click();
197
219
  await this.clickAssignApplicationsFinalButton();
198
220
  await (0, test_1.expect)(this.page.getByText('Applications assigned').first()).toBeVisible({
@@ -4,11 +4,12 @@ import { KeycloakLoginPage } from '../SM-8.8/KeycloakLoginPage';
4
4
  import { KeycloakAdminPage } from '../SM-8.8/KeycloakAdminPage';
5
5
  import { OCIdentityHomePage } from './OCIdentityHomePage';
6
6
  import { OCIdentityRolesPage } from './OCIdentityRolesPage';
7
+ import { IdentityTenantPage } from './IdentityTenantPage';
7
8
  export declare const keycloakAdminCredentials: () => {
8
9
  username: string;
9
10
  password: string;
10
11
  };
11
- export declare const setupKeycloakUser: (navigationPage: NavigationPage, identityPage: ManagementIdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage) => Promise<{
12
+ export declare const setupKeycloakUser: (navigationPage: NavigationPage, identityPage: ManagementIdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, assignToDefaultTenant?: boolean, managementIdentityTenantPage?: IdentityTenantPage) => Promise<{
12
13
  testUsername: string;
13
14
  testPassword: string;
14
15
  }>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createKeycloakUser = exports.createUser = exports.setupKeycloakUser = exports.keycloakAdminCredentials = void 0;
4
+ const test_1 = require("@playwright/test");
4
5
  const keycloakAdminCredentials = () => {
5
6
  return {
6
7
  username: 'admin',
@@ -8,13 +9,21 @@ const keycloakAdminCredentials = () => {
8
9
  };
9
10
  };
10
11
  exports.keycloakAdminCredentials = keycloakAdminCredentials;
11
- const setupKeycloakUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityRolesPage) => {
12
+ const setupKeycloakUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityRolesPage, assignToDefaultTenant = false, managementIdentityTenantPage) => {
12
13
  const testUsername = `test-user-${new Date().getTime()}-${Math.random()
13
14
  .toString(36)
14
15
  .substring(7)}`;
15
16
  const testPassword = 'test-password';
16
17
  await createKeycloakUser(navigationPage, keycloakLoginPage, keycloakAdminPage, testUsername, testPassword);
17
18
  await createIdentityUser(navigationPage, identityPage, testUsername);
19
+ if (assignToDefaultTenant && managementIdentityTenantPage) {
20
+ const userEmail = `qacamunda+${testUsername}@gmail.com`;
21
+ await navigationPage.goToManagementIdentity();
22
+ await (0, test_1.expect)(identityPage.usersLink).toBeVisible({ timeout: 10000 });
23
+ if (await identityPage.tenantTab.isVisible()) {
24
+ await managementIdentityTenantPage.assignUserToTenant('Default', testUsername, userEmail);
25
+ }
26
+ }
18
27
  await createOCUser(navigationPage, ocIdentityHomePage, ocIdentityRolesPage, testUsername);
19
28
  return { testUsername, testPassword };
20
29
  };
@@ -32,7 +32,10 @@ class ManagementIdentityPage {
32
32
  name: 'Camunda logo Management Identity',
33
33
  });
34
34
  this.usersLink = page.locator('a').filter({ hasText: 'Users' });
35
- this.tenantTab = page.getByRole('link', { name: 'Tenants' });
35
+ this.tenantTab = page
36
+ .getByRole('link', { name: 'Tenants' })
37
+ .or(page.locator('a').filter({ hasText: 'Tenants' }))
38
+ .first();
36
39
  this.assignedRolesTab = page.getByRole('tab', { name: 'Assigned roles' });
37
40
  this.demoUser = page.getByRole('cell', { name: 'demo' }).first();
38
41
  this.confirmDeleteButton = page.getByRole('button', {
@@ -9,14 +9,14 @@ const loggingUtils_1 = require("../../utils/loggingUtils");
9
9
  const resetSession_1 = require("../../utils/resetSession");
10
10
  const KeycloakUtils_1 = require("../../pages/SM-8.8/KeycloakUtils");
11
11
  SM_8_8_1.test.describe.parallel('Smoke Tests', () => {
12
- SM_8_8_1.test.beforeEach(async ({ navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, page, browser, loginPage, ocIdentityHomePage, ocIdentityRolesPage, }, testInfo) => {
12
+ SM_8_8_1.test.beforeEach(async ({ navigationPage, managementIdentityPage, managementIdentityTenantPage, keycloakLoginPage, keycloakAdminPage, page, browser, loginPage, ocIdentityHomePage, ocIdentityRolesPage, }, testInfo) => {
13
13
  if (process.env.IS_MIGRATION === 'true') {
14
14
  await navigationPage.goToOCIdentity((testInfo.workerIndex + 1) * 1000);
15
15
  }
16
16
  else {
17
17
  console.log(`BeforeEach start: timeout = ${testInfo.timeout}`);
18
18
  (0, loggingUtils_1.setupTestLogging)(testInfo);
19
- const { testUsername, testPassword } = await (0, KeycloakUtils_1.setupKeycloakUser)(navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityRolesPage);
19
+ const { testUsername, testPassword } = await (0, KeycloakUtils_1.setupKeycloakUser)(navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityRolesPage, process.env.IS_MT === 'true', managementIdentityTenantPage);
20
20
  console.log(`BeforeEach end: timeout = ${testInfo.timeout}`);
21
21
  await (0, resetSession_1.resetSession)(browser, page);
22
22
  await loginPage.login(testUsername, testPassword);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.439",
3
+ "version": "0.0.440",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",