@camunda/e2e-test-suite 0.0.153 → 0.0.155

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.
Files changed (37) hide show
  1. package/dist/pages/8.7/ConsoleOrganizationPage.d.ts +1 -1
  2. package/dist/pages/8.7/ConsoleOrganizationPage.js +6 -3
  3. package/dist/pages/8.7/FormJsPage.js +1 -1
  4. package/dist/pages/8.7/OptimizeDashboardPage.d.ts +1 -1
  5. package/dist/pages/8.7/OptimizeDashboardPage.js +8 -5
  6. package/dist/pages/8.7/SignUpPage.d.ts +1 -1
  7. package/dist/pages/8.7/SignUpPage.js +2 -2
  8. package/dist/pages/8.7/TaskDetailsPage.js +2 -0
  9. package/dist/pages/8.7/UtilitiesPage.d.ts +4 -1
  10. package/dist/pages/8.7/UtilitiesPage.js +2 -2
  11. package/dist/pages/8.8/AppsPage.js +12 -4
  12. package/dist/pages/8.8/ClusterSecretsPage.d.ts +1 -0
  13. package/dist/pages/8.8/ClusterSecretsPage.js +14 -7
  14. package/dist/pages/8.8/ModelerHomePage.d.ts +1 -0
  15. package/dist/pages/8.8/ModelerHomePage.js +8 -4
  16. package/dist/pages/8.8/OptimizeDashboardPage.d.ts +1 -1
  17. package/dist/pages/8.8/OptimizeDashboardPage.js +8 -5
  18. package/dist/pages/8.8/UtilitiesPage.d.ts +1 -0
  19. package/dist/pages/8.8/UtilitiesPage.js +22 -1
  20. package/dist/tests/8.7/aws-cluster-user-flows.spec.js +3 -1
  21. package/dist/tests/8.7/connectors-user-flows.spec.js +3 -1
  22. package/dist/tests/8.7/console-user-flows.spec.js +3 -1
  23. package/dist/tests/8.7/hto-user-flows.spec.js +7 -6
  24. package/dist/tests/8.7/idp-user-flows.spec.js +3 -1
  25. package/dist/tests/8.7/navigation.spec.js +3 -1
  26. package/dist/tests/8.7/optimize-user-flows.spec.js +4 -2
  27. package/dist/tests/8.7/play.spec.js +3 -1
  28. package/dist/tests/8.7/rba-enabled-user-flows.spec.js +7 -4
  29. package/dist/tests/8.7/smoke-tests.spec.js +3 -1
  30. package/dist/tests/8.7/test-setup.spec.js +28 -21
  31. package/dist/tests/8.7/web-modeler-user-flows.spec.js +16 -10
  32. package/dist/tests/8.8/access-user-role-management.spec.js +3 -0
  33. package/dist/tests/8.8/console-user-flows.spec.js +4 -11
  34. package/dist/tests/8.8/optimize-user-flows.spec.js +1 -1
  35. package/dist/utils/mailSlurpClient.d.ts +1 -1
  36. package/dist/utils/mailSlurpClient.js +9 -4
  37. package/package.json +1 -1
@@ -66,7 +66,7 @@ declare class ConsoleOrganizationPage {
66
66
  enableAlphaFeature(name: string): Promise<void>;
67
67
  scrollToOptInCheckbox(): Promise<void>;
68
68
  checkOptInCheckbox(): Promise<void>;
69
- clickMainUser(): Promise<void>;
69
+ clickMainUser(email: string): Promise<void>;
70
70
  clickAuthorizations(): Promise<void>;
71
71
  authorizedResourceAssertion(processId: string, maxRetries?: number, timeout?: number): Promise<void>;
72
72
  clickNewContextPadButton(): Promise<void>;
@@ -308,9 +308,11 @@ class ConsoleOrganizationPage {
308
308
  async checkOptInCheckbox() {
309
309
  await this.optInCheckbox.check({ timeout: 90000 });
310
310
  }
311
- async clickMainUser() {
312
- await (0, test_1.expect)(this.mainUser).toBeVisible({ timeout: 60000 });
313
- await this.mainUser.click();
311
+ async clickMainUser(email) {
312
+ await this.filterTable([email]);
313
+ const user = this.rows.filter({ hasText: email }).first();
314
+ await (0, test_1.expect)(user).toBeVisible({ timeout: 60000 });
315
+ await user.click();
314
316
  }
315
317
  async clickAuthorizations() {
316
318
  await (0, test_1.expect)(this.authorizations).toBeVisible({ timeout: 60000 });
@@ -404,6 +406,7 @@ class ConsoleOrganizationPage {
404
406
  }
405
407
  async filterTable(names) {
406
408
  for (const name of names) {
409
+ await (0, test_1.expect)(this.filterTableSearchbox).toBeVisible({ timeout: 120000 });
407
410
  await this.filterTableSearchbox.click({ timeout: 60000 });
408
411
  await this.filterTableSearchbox.fill(name);
409
412
  }
@@ -31,7 +31,7 @@ class FormJsPage {
31
31
  this.documentReferenceInput = page.getByRole('textbox', {
32
32
  name: 'document reference',
33
33
  });
34
- this.generalPanel = page.getByTitle('General').first();
34
+ this.generalPanel = page.locator('[data-group-id="group-general"]').first();
35
35
  this.textField = page.locator('button[data-field-type="textfield"]');
36
36
  }
37
37
  async generateAIForm(request = 'Create a form with the following fields: 1. A text field with the label "Full Name" 2. A number with the label "Count" 3. A date input with the label "Date of birth"4. A Checkbox with the label "Agree"') {
@@ -6,6 +6,6 @@ declare class OptimizeDashboardPage {
6
6
  clickFilterTable(): Promise<void>;
7
7
  fillFilterTable(processName: string): Promise<void>;
8
8
  processLinkAssertion(processName: string, maxRetries: number, retryDelay?: number): Promise<void>;
9
- processOwnerNameAssertion(processName: string): Promise<void>;
9
+ processOwnerNameAssertion(processName: string, userEmail: string): Promise<void>;
10
10
  }
11
11
  export { OptimizeDashboardPage };
@@ -36,24 +36,27 @@ class OptimizeDashboardPage {
36
36
  }
37
37
  }
38
38
  }
39
- async processOwnerNameAssertion(processName) {
39
+ async processOwnerNameAssertion(processName, userEmail) {
40
40
  const maxRetries = 15;
41
41
  const retryDelay = 60000;
42
+ const localPart = userEmail.split('@')[0];
43
+ const uuid = localPart.replace('qa-user-', '');
44
+ const result = !uuid ? 'QA Camunda' : `QA User ${uuid}`;
42
45
  for (let attempt = 0; attempt < maxRetries; attempt++) {
43
46
  try {
44
- await this.page.reload();
45
47
  await (0, test_1.expect)(this.page.getByRole('row', {
46
- name: `${processName}\nProcess\n\tQA Camunda`,
48
+ name: `${processName}\nProcess\n\t${result}`,
47
49
  })).toBeVisible({ timeout: 90000 });
48
50
  return;
49
51
  }
50
52
  catch (error) {
51
53
  if (attempt < maxRetries - 1) {
52
- console.warn(`Attempt ${attempt + 1} failed for asserting owner name in Optimize.. Retrying...`);
54
+ console.warn(`Attempt ${attempt + 1} failed for asserting owner name ${result} assertion for ${processName} in Optimize.. Retrying...`);
55
+ await this.page.reload();
53
56
  await new Promise((resolve) => setTimeout(resolve, retryDelay));
54
57
  }
55
58
  else {
56
- throw new Error(`Owner name assertion failed after ${maxRetries} attempts`);
59
+ throw new Error(`Owner name ${result} assertion for ${processName} failed after ${maxRetries} attempts`);
57
60
  }
58
61
  }
59
62
  }
@@ -26,7 +26,7 @@ declare class SignUpPage {
26
26
  readonly signUpCompletedPageHeading: Locator;
27
27
  readonly verifyEmailText: Locator;
28
28
  constructor(page: Page);
29
- signupToC8(emailAddress: string): Promise<void>;
29
+ signupToC8(emailAddress: string, password: string): Promise<void>;
30
30
  clickFirstNameInput(): Promise<void>;
31
31
  fillFirstNameInput(firstName: string): Promise<void>;
32
32
  clickLastNameInput(): Promise<void>;
@@ -76,7 +76,7 @@ class SignUpPage {
76
76
  this.runProcessRadioButton = page.getByRole('radio', { name: 'yes' });
77
77
  this.verifyEmailText = page.getByText('Verify your email');
78
78
  }
79
- async signupToC8(emailAddress) {
79
+ async signupToC8(emailAddress, password) {
80
80
  await this.page.goto('https://accounts.ultrawombat.com/signup');
81
81
  await this.clickFirstNameInput();
82
82
  await this.fillFirstNameInput('QA');
@@ -85,7 +85,7 @@ class SignUpPage {
85
85
  await this.clickEmailInput();
86
86
  await this.fillEmailInput(emailAddress);
87
87
  await this.clickPasswordInput();
88
- await this.fillPasswordInput(process.env.C8_PASSWORD);
88
+ await this.fillPasswordInput(password);
89
89
  await this.clickSignupButton();
90
90
  await (0, test_1.expect)(this.verifyEmailText.first()).toBeVisible({
91
91
  timeout: 90000,
@@ -228,6 +228,8 @@ class TaskDetailsPage {
228
228
  await (0, test_1.expect)(firstPdfViewer.or(lastPdfViewer)).toBeVisible();
229
229
  }
230
230
  async clickSubmitButton() {
231
+ await (0, test_1.expect)(this.submitButton).toBeVisible();
232
+ await (0, test_1.expect)(this.submitButton).toBeEnabled();
231
233
  await this.submitButton.click();
232
234
  }
233
235
  }
@@ -14,7 +14,10 @@ import { LoginPage } from './LoginPage';
14
14
  import { ConnectorSettingsPage } from './ConnectorSettingsPage';
15
15
  import { ConnectorMarketplacePage } from './ConnectorMarketplacePage';
16
16
  import { ConnectorTemplatePage } from './ConnectorTemplatePage';
17
- export declare function loginWithRetry(page: Page, loginPage: LoginPage, timeout: number, maxRetries?: number): Promise<void>;
17
+ export declare function loginWithRetry(page: Page, loginPage: LoginPage, testUser: {
18
+ username: string;
19
+ password: string;
20
+ }, timeout: number, maxRetries?: number): Promise<void>;
18
21
  export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, processName: string, url: string, auth: string, resultExpression: string, resultVariable?: string, basicAuthCredentials?: {
19
22
  username: string;
20
23
  password: string;
@@ -8,12 +8,12 @@ const sleep_1 = require("../../utils/sleep");
8
8
  const randomSleep_1 = require("../../utils/randomSleep");
9
9
  const fileUpload_1 = require("../../utils/fileUpload");
10
10
  const mailSlurpClient_1 = require("../../utils/mailSlurpClient");
11
- async function loginWithRetry(page, loginPage, timeout, maxRetries = 3) {
11
+ async function loginWithRetry(page, loginPage, testUser, timeout, maxRetries = 3) {
12
12
  for (let attempt = 0; attempt < maxRetries; attempt++) {
13
13
  try {
14
14
  await page.goto('/');
15
15
  await (0, sleep_1.sleep)(timeout);
16
- await loginPage.login();
16
+ await loginPage.login(testUser);
17
17
  return;
18
18
  }
19
19
  catch (error) {
@@ -118,7 +118,9 @@ class AppsPage {
118
118
  catch (error) {
119
119
  console.warn(`Click attempt ${retries + 1} failed: ${error}`);
120
120
  await this.page.waitForLoadState('domcontentloaded');
121
- await this.page.reload();
121
+ if (!this.page.isClosed()) {
122
+ await this.page.reload();
123
+ }
122
124
  await (0, sleep_1.sleep)(20000);
123
125
  }
124
126
  }
@@ -152,7 +154,9 @@ class AppsPage {
152
154
  catch (error) {
153
155
  console.warn(`Click attempt ${retries + 1} failed: ${error}`);
154
156
  await (0, UtilitiesPage_1.waitForLoadingToFinish)(this.page);
155
- await this.page.reload();
157
+ if (!this.page.isClosed()) {
158
+ await this.page.reload();
159
+ }
156
160
  await (0, sleep_1.sleep)(20000);
157
161
  }
158
162
  }
@@ -226,7 +230,9 @@ class AppsPage {
226
230
  catch (error) {
227
231
  console.warn(`Click attempt ${retries + 1} failed: ${error}`);
228
232
  await this.page.waitForLoadState('domcontentloaded');
229
- await this.page.reload();
233
+ if (!this.page.isClosed()) {
234
+ await this.page.reload();
235
+ }
230
236
  await (0, sleep_1.sleep)(20000);
231
237
  }
232
238
  }
@@ -260,7 +266,9 @@ class AppsPage {
260
266
  catch (error) {
261
267
  console.warn(`Click attempt ${retries + 1} failed: ${error}`);
262
268
  await this.page.waitForLoadState('domcontentloaded');
263
- await this.page.reload();
269
+ if (!this.page.isClosed()) {
270
+ await this.page.reload();
271
+ }
264
272
  await (0, sleep_1.sleep)(20000);
265
273
  }
266
274
  }
@@ -37,6 +37,7 @@ declare class ClusterSecretsPage {
37
37
  name: string;
38
38
  value: string;
39
39
  }[]): Promise<void>;
40
+ clickImportButton(): Promise<void>;
40
41
  bulkImportSecrets(secrets: {
41
42
  name: string;
42
43
  value: string;
@@ -187,17 +187,24 @@ class ClusterSecretsPage {
187
187
  }
188
188
  }
189
189
  }
190
+ async clickImportButton() {
191
+ await (0, test_1.expect)(this.importButton).toBeVisible({ timeout: 30000 });
192
+ await this.importButton.click();
193
+ }
190
194
  async bulkImportSecrets(secrets) {
191
195
  const mapped = secrets
192
196
  .map((secret) => `${secret.name}=${secret.value}`)
193
197
  .join('\n');
194
- await this.importButton.click();
195
- await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.fromFileButton, {
196
- postAction: async () => {
197
- await this.importButton.click();
198
- },
199
- });
200
- await this.fromFileButton.click();
198
+ await this.clickImportButton();
199
+ if (!(await this.dialog.isVisible())) {
200
+ await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.fromFileButton, {
201
+ postAction: async () => {
202
+ await this.clickImportButton();
203
+ },
204
+ });
205
+ await this.fromFileButton.click();
206
+ }
207
+ await (0, test_1.expect)(this.dialog).toBeVisible();
201
208
  await this.bulkImportTextArea.click();
202
209
  await this.bulkImportTextArea.fill(mapped);
203
210
  await this.dialogImportButton.click();
@@ -23,6 +23,7 @@ declare class ModelerHomePage {
23
23
  readonly createIdpApplicationButton: Locator;
24
24
  readonly dialog: Locator;
25
25
  readonly closeButton: Locator;
26
+ readonly cancelButton: Locator;
26
27
  readonly optionsButton: Locator;
27
28
  readonly formNameBreadcrumb: (formName: string) => Locator;
28
29
  constructor(page: Page);
@@ -28,6 +28,7 @@ class ModelerHomePage {
28
28
  createIdpApplicationButton;
29
29
  dialog;
30
30
  closeButton;
31
+ cancelButton;
31
32
  optionsButton;
32
33
  formNameBreadcrumb;
33
34
  constructor(page) {
@@ -45,6 +46,7 @@ class ModelerHomePage {
45
46
  name: 'Create',
46
47
  exact: true,
47
48
  });
49
+ this.cancelButton = page.getByRole('button', { name: 'Cancel' });
48
50
  this.chooseBpmnTemplateButton = page.getByRole('button', {
49
51
  name: 'Choose BPMN template',
50
52
  });
@@ -194,10 +196,12 @@ class ModelerHomePage {
194
196
  }
195
197
  async clickMessageBanner() {
196
198
  try {
197
- await Promise.race([
198
- this.messageBanner.click({ timeout: 30000 }),
199
- this.closeButton.click({ timeout: 30000 }),
200
- ]);
199
+ const button = this.messageBanner
200
+ .or(this.closeButton)
201
+ .or(this.cancelButton)
202
+ .first();
203
+ await (0, test_1.expect)(button).toBeVisible({ timeout: 15000 });
204
+ await button.click();
201
205
  }
202
206
  catch {
203
207
  console.log('No banner or close button found to click');
@@ -6,6 +6,6 @@ declare class OptimizeDashboardPage {
6
6
  clickFilterTable(): Promise<void>;
7
7
  fillFilterTable(processName: string): Promise<void>;
8
8
  processLinkAssertion(processName: string, maxRetries: number, retryDelay?: number): Promise<void>;
9
- processOwnerNameAssertion(processName: string): Promise<void>;
9
+ processOwnerNameAssertion(processName: string, userEmail: string): Promise<void>;
10
10
  }
11
11
  export { OptimizeDashboardPage };
@@ -36,24 +36,27 @@ class OptimizeDashboardPage {
36
36
  }
37
37
  }
38
38
  }
39
- async processOwnerNameAssertion(processName) {
39
+ async processOwnerNameAssertion(processName, userEmail) {
40
40
  const maxRetries = 15;
41
41
  const retryDelay = 60000;
42
+ const localPart = userEmail.split('@')[0];
43
+ const uuid = localPart.replace('qa-user-', '');
44
+ const result = !uuid ? 'QA Camunda' : `QA User ${uuid}`;
42
45
  for (let attempt = 0; attempt < maxRetries; attempt++) {
43
46
  try {
44
- await this.page.reload();
45
47
  await (0, test_1.expect)(this.page.getByRole('row', {
46
- name: `${processName}\nProcess\n\tQA Camunda`,
48
+ name: `${processName}\nProcess\n\t${result}`,
47
49
  })).toBeVisible({ timeout: 90000 });
48
50
  return;
49
51
  }
50
52
  catch (error) {
51
53
  if (attempt < maxRetries - 1) {
52
- console.warn(`Attempt ${attempt + 1} failed for asserting owner name in Optimize.. Retrying...`);
54
+ console.warn(`Attempt ${attempt + 1} failed for asserting owner name ${result} assertion for ${processName} in Optimize.. Retrying...`);
55
+ await this.page.reload();
53
56
  await new Promise((resolve) => setTimeout(resolve, retryDelay));
54
57
  }
55
58
  else {
56
- throw new Error(`Owner name assertion failed after ${maxRetries} attempts`);
59
+ throw new Error(`Owner name ${result} assertion for ${processName} failed after ${maxRetries} attempts`);
57
60
  }
58
61
  }
59
62
  }
@@ -34,6 +34,7 @@ export declare function runMultipleProcesses(clusterName: string, page: Page, mo
34
34
  }): Promise<void>;
35
35
  export declare function disableRBA(clusterName: string, homePage: HomePage, clusterPage: ClusterPage, clusterDetailsPage: ClusterDetailsPage, appsPage: AppsPage): Promise<void>;
36
36
  export declare function enableAuthorizations(clusterName: string, homePage: HomePage, clusterPage: ClusterPage, clusterDetailsPage: ClusterDetailsPage, appsPage: AppsPage): Promise<void>;
37
+ export declare function assertLatestAlertEmail(id: string, mailSlurp: MailSlurp, processName: string, alertText: string): Promise<string>;
37
38
  export declare function clickInvitationLinkInEmail(page: Page, id: string, mailSlurp: MailSlurp): Promise<void>;
38
39
  export declare function assertTestUsesCorrectOrganization(page: Page): Promise<void>;
39
40
  export declare function deleteAllUserGroups(homePage: HomePage, organizationPage: ConsoleOrganizationPage, appsPage: AppsPage): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.waitForLoadingToFinish = exports.assertTestUsesCorrectOrganizationFromModeler = exports.expectCountToBeOneOf = exports.createAPIClient = exports.modelAndRunConnectorsTimerEventDiagram = exports.modelAndRunConnectorsDocHandlingDiagram = exports.deleteCluster = exports.deleteAllUserGroups = exports.assertTestUsesCorrectOrganization = exports.clickInvitationLinkInEmail = exports.enableAuthorizations = exports.disableRBA = exports.runMultipleProcesses = exports.modelDiagramFromFile = exports.runProcess = exports.completeTaskWithRetry = exports.assertPageTextWithRetry = exports.assertLocatorVisibleWithRetry = exports.modelRestConnector = exports.loginWithRetry = void 0;
3
+ exports.waitForLoadingToFinish = exports.assertTestUsesCorrectOrganizationFromModeler = exports.expectCountToBeOneOf = exports.createAPIClient = exports.modelAndRunConnectorsTimerEventDiagram = exports.modelAndRunConnectorsDocHandlingDiagram = exports.deleteCluster = exports.deleteAllUserGroups = exports.assertTestUsesCorrectOrganization = exports.clickInvitationLinkInEmail = exports.assertLatestAlertEmail = exports.enableAuthorizations = exports.disableRBA = exports.runMultipleProcesses = exports.modelDiagramFromFile = exports.runProcess = exports.completeTaskWithRetry = exports.assertPageTextWithRetry = exports.assertLocatorVisibleWithRetry = exports.modelRestConnector = exports.loginWithRetry = void 0;
4
4
  const test_1 = require("@playwright/test");
5
5
  const ModelerHomePage_1 = require("./ModelerHomePage");
6
6
  const HomePage_1 = require("./HomePage");
@@ -267,6 +267,27 @@ async function enableAuthorizations(clusterName, homePage, clusterPage, clusterD
267
267
  await clusterDetailsPage.assertComponentsHealth();
268
268
  }
269
269
  exports.enableAuthorizations = enableAuthorizations;
270
+ async function assertLatestAlertEmail(id, mailSlurp, processName, alertText) {
271
+ const maxRetries = 3;
272
+ for (let retries = 0; retries < maxRetries; retries++) {
273
+ try {
274
+ const email = await mailSlurp.waitForLatestEmail(id, 120000);
275
+ if (email && email.body) {
276
+ (0, test_1.expect)(email.body).toContain(processName);
277
+ (0, test_1.expect)(email.body).toContain(alertText);
278
+ return email.body;
279
+ }
280
+ else {
281
+ throw new Error('Email or email body is null or undefined.');
282
+ }
283
+ }
284
+ catch (error) {
285
+ console.warn(`Click attempt ${retries + 1} failed: ${error}`);
286
+ }
287
+ }
288
+ throw new Error(`Failed to get latest alert (${processName}) email for ${id} after ${maxRetries} attempts.`);
289
+ }
290
+ exports.assertLatestAlertEmail = assertLatestAlertEmail;
270
291
  async function clickInvitationLinkInEmail(page, id, mailSlurp) {
271
292
  const email = await mailSlurp.waitForLatestEmail(id, 120000);
272
293
  if (email && email.body) {
@@ -8,11 +8,13 @@ const sleep_1 = require("../../utils/sleep");
8
8
  const fileUpload_1 = require("../../utils/fileUpload");
9
9
  const OperateProcessInstancePage_1 = require("../../pages/8.7/OperateProcessInstancePage");
10
10
  const UtilitiesPage_2 = require("../../pages/8.7/UtilitiesPage");
11
+ const users_1 = require("../../utils/users");
12
+ const testUser = (0, users_1.getTestUser)('fifteenthUser');
11
13
  _8_7_1.test.describe.configure({ mode: 'parallel' });
12
14
  _8_7_1.test.describe('AWS Cluster User Flows Test', () => {
13
15
  const clusterName = 'AWS Cluster';
14
16
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
15
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
17
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
16
18
  });
17
19
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
18
20
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -9,12 +9,14 @@ const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
9
9
  const UtilitiesPage_2 = require("../../pages/8.7/UtilitiesPage");
10
10
  const apiHelpers_1 = require("../../utils/apiHelpers");
11
11
  const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
12
+ const users_1 = require("../../utils/users");
13
+ const testUser = (0, users_1.getTestUser)('seventeenthUser');
12
14
  _8_7_1.test.describe.configure({ mode: 'parallel' });
13
15
  _8_7_1.test.describe('Connectors User Flow Tests', () => {
14
16
  const defaultClusterName = 'Test Cluster';
15
17
  const awsCluster = 'AWS Cluster';
16
18
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
17
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
19
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
18
20
  });
19
21
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
20
22
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -8,13 +8,15 @@ const sleep_1 = require("../../utils/sleep");
8
8
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
9
9
  const formatDate_1 = require("../../utils/formatDate");
10
10
  const googleapi_1 = require("../../utils/googleapi");
11
+ const users_1 = require("../../utils/users");
11
12
  const constants_1 = require("../../utils/constants");
13
+ const testUser = (0, users_1.getTestUser)('eighteenthUser');
12
14
  _8_7_1.test.describe.configure({ mode: 'parallel' });
13
15
  _8_7_1.test.describe('Console User Flow Tests', () => {
14
16
  const clusterName = 'Test Cluster';
15
17
  const alertFlowClusterName = 'AWS Cluster';
16
18
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
17
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
19
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
18
20
  });
19
21
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
20
22
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -14,11 +14,13 @@ const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
14
14
  const sleep_1 = require("../../utils/sleep");
15
15
  const fileUpload_1 = require("../../utils/fileUpload");
16
16
  const resetSession_1 = require("../../utils/resetSession");
17
+ const users_1 = require("../../utils/users");
18
+ const testUser = (0, users_1.getTestUser)('nineteenthUser');
17
19
  _8_7_1.test.describe.configure({ mode: 'parallel' });
18
20
  _8_7_1.test.describe('HTO User Flow Tests', () => {
19
21
  const clusterName = 'Test Cluster';
20
22
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
21
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
23
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
22
24
  });
23
25
  _8_7_1.test.afterEach(async ({ page, homePage, appsPage, consoleOrganizationsPage }, testInfo) => {
24
26
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -223,12 +225,12 @@ _8_7_1.test.describe('HTO User Flow Tests', () => {
223
225
  await modelerCreatePage.clickCandidateUsersInput();
224
226
  await modelerCreatePage.fillCandidateUsersInput(process.env.C8_USERNAME_TEST);
225
227
  await modelerCreatePage.clickAssigneeInput();
226
- await modelerCreatePage.fillAssigneeInput(process.env.C8_USERNAME);
228
+ await modelerCreatePage.fillAssigneeInput(testUser.username);
227
229
  await modelerCreatePage.clickCanvas();
228
230
  await modelerCreatePage.selectUserTask('candidateUserTask' + randomName + '2');
229
231
  await modelerCreatePage.expandAssignmentSection();
230
232
  await modelerCreatePage.clickCandidateUsersInput();
231
- await modelerCreatePage.fillCandidateUsersInput(process.env.C8_USERNAME);
233
+ await modelerCreatePage.fillCandidateUsersInput(testUser.username);
232
234
  await modelerCreatePage.clickCanvas();
233
235
  await modelerCreatePage.selectUserTask('candidateUserTask' + randomName + '3');
234
236
  await modelerCreatePage.expandAssignmentSection();
@@ -291,9 +293,7 @@ _8_7_1.test.describe('HTO User Flow Tests', () => {
291
293
  await _8_7_1.test.step('Assign Users to the Created Groups in Identity', async () => {
292
294
  await consoleOrganizationsPage.clickUserGroup('Single User');
293
295
  await consoleOrganizationsPage.clickAssignMembers();
294
- await consoleOrganizationsPage.fillAssignMembers([
295
- process.env.C8_USERNAME,
296
- ]);
296
+ await consoleOrganizationsPage.fillAssignMembers([testUser.username]);
297
297
  await consoleOrganizationsPage.clickAssignSubButton();
298
298
  await consoleOrganizationsPage.clickOrganizationManagementLink();
299
299
  await consoleOrganizationsPage.clickGroupsTab();
@@ -374,6 +374,7 @@ _8_7_1.test.describe('HTO User Flow Tests', () => {
374
374
  const loginPage = new LoginPage_1.LoginPage(page);
375
375
  await loginPage.loginWithTestUser({
376
376
  username: process.env.C8_USERNAME_TEST_2,
377
+ password: process.env.C8_PASSWORD_TEST_2,
377
378
  });
378
379
  await appsPage.clickCamundaApps();
379
380
  await appsPage.clickTasklist(clusterName);
@@ -7,11 +7,13 @@ const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
7
7
  const randomName_1 = require("../../utils/randomName");
8
8
  const fileUpload_1 = require("../../utils/fileUpload");
9
9
  const sleep_1 = require("../../utils/sleep");
10
+ const users_1 = require("../../utils/users");
11
+ const testUser = (0, users_1.getTestUser)('twentiethUser');
10
12
  _8_7_1.test.describe.configure({ mode: 'parallel' });
11
13
  _8_7_1.test.describe('IDP User Flow Tests', () => {
12
14
  const clusterName = 'Test Cluster';
13
15
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
14
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
16
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
15
17
  });
16
18
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
17
19
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -4,11 +4,13 @@ const test_1 = require("@playwright/test");
4
4
  const _8_7_1 = require("../../fixtures/8.7");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
7
+ const users_1 = require("../../utils/users");
8
+ const testUser = (0, users_1.getTestUser)('twentyFirstUser');
7
9
  _8_7_1.test.describe.configure({ mode: 'parallel' });
8
10
  _8_7_1.test.describe('Navigation Tests', () => {
9
11
  const clusterName = 'Test Cluster';
10
12
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
11
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
13
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
12
14
  });
13
15
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
14
16
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -10,11 +10,13 @@ const OptimizeHomePage_1 = require("../../pages/8.7/OptimizeHomePage");
10
10
  const OptimizeDashboardPage_1 = require("../../pages/8.7/OptimizeDashboardPage");
11
11
  const sleep_1 = require("../../utils/sleep");
12
12
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
13
+ const users_1 = require("../../utils/users");
14
+ const testUser = (0, users_1.getTestUser)('twentyThirdUser');
13
15
  _8_7_1.test.describe.configure({ mode: 'parallel' });
14
16
  _8_7_1.test.describe('Optimize User Flow Tests', () => {
15
17
  const clusterName = 'Test Cluster';
16
18
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
17
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
19
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
18
20
  });
19
21
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
20
22
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -233,7 +235,7 @@ _8_7_1.test.describe('Optimize User Flow Tests', () => {
233
235
  await optimizeTabOptimizeHomePage.clickDashboardLink();
234
236
  await (0, sleep_1.sleep)(120000);
235
237
  await operateTabOptimizeDashboardPage.processLinkAssertion(processName, 6);
236
- await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName);
238
+ await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName, testUser.username);
237
239
  });
238
240
  });
239
241
  });
@@ -5,10 +5,12 @@ const _8_7_1 = require("../../fixtures/8.7");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const sleep_1 = require("../../utils/sleep");
7
7
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
8
+ const users_1 = require("../../utils/users");
9
+ const testUser = (0, users_1.getTestUser)('twentyFourthUser');
8
10
  _8_7_1.test.describe.configure({ mode: 'parallel' });
9
11
  _8_7_1.test.describe('Deploy and run a process in Play', () => {
10
12
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
11
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
13
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
12
14
  });
13
15
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
14
16
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -6,6 +6,8 @@ const _setup_1 = require("../../test-setup.js");
6
6
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
7
7
  const sleep_1 = require("../../utils/sleep");
8
8
  const resetSession_1 = require("../../utils/resetSession");
9
+ const users_1 = require("../../utils/users");
10
+ const mainUser = (0, users_1.getTestUser)('twentyFifthUser');
9
11
  _8_7_1.test.describe.configure({ mode: 'parallel' });
10
12
  _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
11
13
  const clusterNames = {
@@ -14,7 +16,7 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
14
16
  'RBA On User Flow - Permission for All Processes': 'Third RBA Cluster',
15
17
  };
16
18
  _8_7_1.test.beforeEach(async ({ page, homePage, clusterPage, loginPage }, testInfo) => {
17
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
19
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, mainUser, (testInfo.workerIndex + 1) * 1000);
18
20
  await (0, test_1.expect)(homePage.clusterTab).toBeVisible({ timeout: 120000 });
19
21
  await homePage.clickClusters();
20
22
  (0, test_1.expect)(clusterNames[testInfo.title]).toBeTruthy();
@@ -55,7 +57,7 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
55
57
  await _8_7_1.test.step('Navigate to Users and Make Sure that No Authorized Resources Are Created', async () => {
56
58
  await homePage.clickOrganization();
57
59
  await consoleOrganizationsPage.clickUsersTab();
58
- await consoleOrganizationsPage.clickMainUser();
60
+ await consoleOrganizationsPage.clickMainUser(mainUser.username);
59
61
  await consoleOrganizationsPage.clickAuthorizations();
60
62
  await (0, test_1.expect)(page.getByText(processIdBeforeEnablingRBA + '1', { exact: true })).not.toBeVisible({
61
63
  timeout: 120000,
@@ -125,7 +127,7 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
125
127
  await _8_7_1.test.step('Navigate to Users and Create Authorized Resource For Process 1', async () => {
126
128
  await homePage.clickOrganization();
127
129
  await consoleOrganizationsPage.clickUsersTab();
128
- await consoleOrganizationsPage.clickMainUser();
130
+ await consoleOrganizationsPage.clickMainUser(mainUser.username);
129
131
  await consoleOrganizationsPage.clickAuthorizations();
130
132
  await (0, test_1.expect)(page.getByText(processId1, { exact: true })).not.toBeVisible({
131
133
  timeout: 60000,
@@ -172,6 +174,7 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
172
174
  await _8_7_1.test.step('Login as Test User', async () => {
173
175
  await loginPage.loginWithTestUser({
174
176
  username: process.env.C8_USERNAME_TEST_2,
177
+ password: process.env.C8_PASSWORD_TEST_2,
175
178
  });
176
179
  });
177
180
  await _8_7_1.test.step('Navigate to Operate and Check Processes Are Not Accessible', async () => {
@@ -226,7 +229,7 @@ _8_7_1.test.describe('RBA Enabled User Flows Test', () => {
226
229
  await appsPage.clickConsoleLink();
227
230
  await homePage.clickOrganization();
228
231
  await consoleOrganizationsPage.clickUsersTab();
229
- await consoleOrganizationsPage.clickMainUser();
232
+ await consoleOrganizationsPage.clickMainUser(mainUser.username);
230
233
  await consoleOrganizationsPage.clickAuthorizations();
231
234
  await consoleOrganizationsPage.authorizedResourceAssertion(processId1);
232
235
  await consoleOrganizationsPage.authorizedResourceAssertion(processId2);
@@ -14,11 +14,13 @@ const OptimizeHomePage_1 = require("../../pages/8.7/OptimizeHomePage");
14
14
  const OptimizeCollectionsPage_1 = require("../../pages/8.7/OptimizeCollectionsPage");
15
15
  const OptimizeReportPage_1 = require("../../pages/8.7/OptimizeReportPage");
16
16
  const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
17
+ const users_1 = require("../../utils/users");
18
+ const testUser = (0, users_1.getTestUser)('thirteenthUser');
17
19
  _8_7_1.test.describe.configure({ mode: 'parallel' });
18
20
  _8_7_1.test.describe('Smoke Tests', () => {
19
21
  const clusterName = 'Test Cluster';
20
22
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
21
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
23
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
22
24
  });
23
25
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
24
26
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -5,19 +5,18 @@ const _8_7_1 = require("../../fixtures/8.7");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const sleep_1 = require("../../utils/sleep");
7
7
  const UtilitiesPage_1 = require("../../pages/8.7/UtilitiesPage");
8
+ const users_1 = require("../../utils/users");
8
9
  _8_7_1.test.describe.configure({ mode: 'parallel' });
9
10
  _8_7_1.test.describe('Cluster Setup Tests', () => {
10
- _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
11
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
12
- });
13
11
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
14
12
  await (0, _setup_1.captureScreenshot)(page, testInfo);
15
13
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
16
14
  });
17
- (0, _8_7_1.test)('Enable Alpha Features', async ({ page, homePage, consoleOrganizationsPage, }) => {
15
+ (0, _8_7_1.test)('Enable Alpha Features', async ({ page, homePage, loginPage, consoleOrganizationsPage, }, testInfo) => {
18
16
  if (process.env.IS_PROD === 'true') {
19
17
  _8_7_1.test.skip(true, 'Skipping test because not required on PROD test org');
20
18
  }
19
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
21
20
  await homePage.clickOrganization();
22
21
  await (0, test_1.expect)(consoleOrganizationsPage.settingsTab).toBeVisible({
23
22
  timeout: 60000,
@@ -29,41 +28,49 @@ _8_7_1.test.describe('Cluster Setup Tests', () => {
29
28
  await consoleOrganizationsPage.clickSettingsTab();
30
29
  await consoleOrganizationsPage.enableAlphaFeature('AI-powered features');
31
30
  });
32
- (0, _8_7_1.test)('Create Default Cluster', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
31
+ (0, _8_7_1.test)('Create Default Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, }, testInfo) => {
33
32
  _8_7_1.test.slow();
34
33
  const clusterName = 'Test Cluster';
34
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
35
35
  await homePage.clickClusters();
36
36
  await clusterPage.createCluster(clusterName);
37
37
  await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
38
38
  await clusterPage.clickClusterLink(clusterName);
39
39
  await clusterDetailsPage.assertComponentsHealth();
40
40
  });
41
- (0, _8_7_1.test)('Create AWS Cluster', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
41
+ (0, _8_7_1.test)('Create AWS Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, }, testInfo) => {
42
42
  _8_7_1.test.slow();
43
43
  const clusterName = 'AWS Cluster';
44
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
44
45
  await homePage.clickClusters();
45
46
  await clusterPage.createCluster(clusterName, 'AWS');
46
47
  await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
47
48
  await clusterPage.clickClusterLink(clusterName);
48
49
  await clusterDetailsPage.assertComponentsHealth();
49
50
  });
50
- (0, _8_7_1.test)('Create Project Folder', async ({ homePage, appsPage, modelerHomePage, }) => {
51
- await _8_7_1.test.step('Navigate to Web Modeler', async () => {
52
- await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
53
- timeout: 120000,
51
+ for (const [index, user] of (0, users_1.getTestUsers)().entries()) {
52
+ (0, _8_7_1.test)(`Create Project Folder for User ${index + 1}`, async ({ page, loginPage, homePage, appsPage, modelerHomePage, }, testInfo) => {
53
+ await _8_7_1.test.step('Log in', async () => {
54
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, user, (testInfo.workerIndex + 1) * 1000);
54
55
  });
55
- await appsPage.clickCamundaApps();
56
- await appsPage.clickModeler();
57
- await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
58
- timeout: 180000,
56
+ await _8_7_1.test.step('Navigate to Web Modeler', async () => {
57
+ await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
58
+ timeout: 120000,
59
+ });
60
+ await appsPage.clickCamundaApps();
61
+ await appsPage.clickModeler();
62
+ await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
63
+ timeout: 180000,
64
+ });
59
65
  });
60
- });
61
- await _8_7_1.test.step('Create Cross Component Project Folder', async () => {
62
- await modelerHomePage.createCrossComponentProjectFolder();
63
- await modelerHomePage.clickHomeBreadcrumb();
64
- await (0, test_1.expect)(modelerHomePage.crossComponentProjectFolder).toBeVisible({
65
- timeout: 60000,
66
+ await _8_7_1.test.step('Create Cross Component Project Folder', async () => {
67
+ await homePage.clickSkipCustomization();
68
+ await modelerHomePage.createCrossComponentProjectFolder();
69
+ await modelerHomePage.clickHomeBreadcrumb();
70
+ await (0, test_1.expect)(modelerHomePage.crossComponentProjectFolder).toBeVisible({
71
+ timeout: 60000,
72
+ });
66
73
  });
67
74
  });
68
- });
75
+ }
69
76
  });
@@ -12,6 +12,9 @@ const deleteOrg_1 = require("../../utils/deleteOrg");
12
12
  const sleep_1 = require("../../utils/sleep");
13
13
  const mailSlurpClient_1 = require("../../utils/mailSlurpClient");
14
14
  const resetSession_1 = require("../../utils/resetSession");
15
+ const users_1 = require("../../utils/users");
16
+ const node_crypto_1 = require("node:crypto");
17
+ const testUser = (0, users_1.getTestUser)('eleventhUser');
15
18
  _8_7_1.test.describe.configure({ mode: 'parallel' });
16
19
  _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
17
20
  const clusterName = 'Test Cluster';
@@ -20,7 +23,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
20
23
  'Invite Existing C8 member to Web Modeler flow': '',
21
24
  };
22
25
  _8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
23
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
26
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
24
27
  });
25
28
  _8_7_1.test.afterEach(async ({ page }, testInfo) => {
26
29
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -159,7 +162,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
159
162
  });
160
163
  await settingsPage.clickOpenSettingsButton();
161
164
  await settingsPage.clickLogoutButton();
162
- await loginPage.login();
165
+ await loginPage.login(testUser);
163
166
  await (0, sleep_1.sleep)(30000);
164
167
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
165
168
  timeout: 90000,
@@ -219,7 +222,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
219
222
  });
220
223
  await settingsPage.clickOpenSettingsButton();
221
224
  await settingsPage.clickLogoutButton();
222
- await loginPage.login();
225
+ await loginPage.login(testUser);
223
226
  await (0, sleep_1.sleep)(20000);
224
227
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
225
228
  timeout: 60000,
@@ -394,7 +397,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
394
397
  timeout: 60000,
395
398
  });
396
399
  await page.goto('/');
397
- await loginPage.login();
400
+ await loginPage.login(testUser);
398
401
  });
399
402
  await _8_7_1.test.step('Navigate to Web Modeler as Project Admin', async () => {
400
403
  await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
@@ -416,8 +419,11 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
416
419
  const { id, emailAddress } = await (0, mailSlurpClient_1.createInbox)();
417
420
  inboxes[testInfo.title] = id;
418
421
  let newOrganizationUuid = '';
422
+ const password = (await (0, _setup_1.generateRandomStringAsync)(5)) +
423
+ (0, node_crypto_1.randomInt)(10000000, 90000000) +
424
+ '*';
419
425
  await _8_7_1.test.step('Sign up new user to C8', async () => {
420
- await signUpPage.signupToC8(emailAddress);
426
+ await signUpPage.signupToC8(emailAddress, password);
421
427
  });
422
428
  await _8_7_1.test.step('Log in to C8 as New User', async () => {
423
429
  await (0, UtilitiesPage_1.clickInvitationLinkInEmail)(page, id);
@@ -429,7 +435,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
429
435
  await settingsPage.clickLogoutButton();
430
436
  await loginPage.loginWithoutOrgAssertion({
431
437
  username: emailAddress,
432
- password: process.env.C8_PASSWORD,
438
+ password: password,
433
439
  });
434
440
  await (0, test_1.expect)(homePage.gettingStartedHeading).toBeVisible({
435
441
  timeout: 40000,
@@ -447,7 +453,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
447
453
  await _8_7_1.test.step('Login as Project Admin', async () => {
448
454
  await settingsPage.clickOpenSettingsButton();
449
455
  await settingsPage.clickLogoutButton();
450
- await loginPage.login();
456
+ await loginPage.login(testUser);
451
457
  });
452
458
  await _8_7_1.test.step('Navigate to Web Modeler', async () => {
453
459
  await appsPage.clickCamundaApps();
@@ -474,7 +480,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
474
480
  await (0, sleep_1.sleep)(60000);
475
481
  await loginPage.login({
476
482
  username: emailAddress,
477
- password: process.env.C8_PASSWORD,
483
+ password: password,
478
484
  });
479
485
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(modelerHomePage, modelerHomePage.crossComponentProjectFolder, 'Cross Component Test Project', 60000, 5);
480
486
  });
@@ -483,7 +489,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
483
489
  await settingsPage.clickLogoutButton();
484
490
  });
485
491
  await _8_7_1.test.step('Navigate to Web Modeler as Project Admin', async () => {
486
- await loginPage.login();
492
+ await loginPage.login(testUser);
487
493
  await appsPage.clickCamundaApps();
488
494
  await appsPage.clickModeler();
489
495
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
@@ -652,7 +658,7 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
652
658
  });
653
659
  });
654
660
  await _8_7_1.test.step('Login to Tasklist and Check User Task Has the Correct Input Values and Can Be Completed', async () => {
655
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, 5000);
661
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, 5000);
656
662
  await appsPage.clickCamundaApps();
657
663
  await appsPage.clickTasklist(clusterName);
658
664
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, taskPanelPage.taskListPageBanner, 'Tasklist banner');
@@ -110,6 +110,7 @@ _8_8_1.test.describe('User Roles User Flow', () => {
110
110
  await (0, UtilitiesPage_1.waitForLoadingToFinish)(page);
111
111
  await appsPage.clickCamundaApps();
112
112
  await appsPage.clickModeler();
113
+ await homePage.clickSkipCustomization();
113
114
  await modelerHomePage.createCrossComponentProjectFolder();
114
115
  await modelerHomePage.clickDiagramTypeDropdown();
115
116
  await modelerHomePage.clickBpmnTemplateOption();
@@ -200,6 +201,7 @@ _8_8_1.test.describe('User Roles User Flow', () => {
200
201
  await _8_8_1.test.step('Navigate to Modeler and Ensure Diagram Failed To Deploy', async () => {
201
202
  await appsPage.clickCamundaApps();
202
203
  await appsPage.clickModeler();
204
+ await homePage.clickSkipCustomization();
203
205
  await modelerHomePage.createCrossComponentProjectFolder();
204
206
  await modelerHomePage.clickDiagramTypeDropdown();
205
207
  await modelerHomePage.clickBpmnTemplateOption();
@@ -295,6 +297,7 @@ _8_8_1.test.describe('User Roles User Flow', () => {
295
297
  await _8_8_1.test.step('Navigate to Modeler and Ensure Diagram Can Be Deployed', async () => {
296
298
  await appsPage.clickCamundaApps();
297
299
  await appsPage.clickModeler();
300
+ await homePage.clickSkipCustomization();
298
301
  await modelerHomePage.createCrossComponentProjectFolder();
299
302
  await modelerHomePage.clickDiagramTypeDropdown();
300
303
  await modelerHomePage.clickBpmnTemplateOption();
@@ -7,8 +7,8 @@ const OperateProcessInstancePage_1 = require("../../pages/8.8/OperateProcessInst
7
7
  const formatDate_1 = require("../../utils/formatDate");
8
8
  const UtilitiesPage_1 = require("../../pages/8.8/UtilitiesPage");
9
9
  const sleep_1 = require("../../utils/sleep");
10
- const googleapi_1 = require("../../utils/googleapi");
11
10
  const users_1 = require("../../utils/users");
11
+ const mailSlurpClient_1 = require("../../utils/mailSlurpClient");
12
12
  const testUser = (0, users_1.getTestUser)('eighteenthUser');
13
13
  _8_8_1.test.describe.configure({ mode: 'parallel' });
14
14
  _8_8_1.test.describe('Console User Flow Tests @tasklistV2', () => {
@@ -69,9 +69,9 @@ _8_8_1.test.describe('Console User Flow Tests @tasklistV2', () => {
69
69
  _8_8_1.test.slow();
70
70
  const processName = 'Email_Alert_Process' + (await (0, _setup_1.generateRandomStringAsync)(3));
71
71
  const invalidURl = 'https://invalid';
72
- const senderEmail = 'no-reply@camunda.io';
73
72
  let lastTriggerTime = 0;
74
73
  const alertFlowClusterName = 'Alert Flow Cluster';
74
+ const { id } = await (0, mailSlurpClient_1.createInbox)(testUser.username);
75
75
  await _8_8_1.test.step('Create Cluster', async () => {
76
76
  await homePage.clickClusters();
77
77
  await clusterPage.createClusterIfNotExists(alertFlowClusterName);
@@ -142,11 +142,7 @@ _8_8_1.test.describe('Console User Flow Tests @tasklistV2', () => {
142
142
  });
143
143
  await _8_8_1.test.step('Verify Alerts Received via Email for Incident', async () => {
144
144
  await (0, sleep_1.sleep)(60000);
145
- const token = await (0, googleapi_1.getGoogleAccessToken)();
146
- const messages = await (0, googleapi_1.getGmailMessagesWithRetry)(token, senderEmail, processName);
147
- (0, test_1.expect)(messages.length).toBe(1);
148
- const emailDetails = await (0, googleapi_1.getLatestEmailDetails)(token, await messages[0]['id']);
149
- (0, test_1.expect)(emailDetails).toContain('New Incidents: 1');
145
+ await (0, UtilitiesPage_1.assertLatestAlertEmail)(id, mailSlurpClient_1.mailSlurp, processName, 'New Incidents: 1');
150
146
  lastTriggerTime = Math.floor(Date.now() / 1000); // Current time in seconds (Unix timestamp)
151
147
  console.log('Captured Target Time:', lastTriggerTime);
152
148
  });
@@ -184,10 +180,7 @@ _8_8_1.test.describe('Console User Flow Tests @tasklistV2', () => {
184
180
  });
185
181
  await _8_8_1.test.step('Verify Alerts Received via Email for Incident', async () => {
186
182
  await (0, sleep_1.sleep)(60000);
187
- const token = await (0, googleapi_1.getGoogleAccessToken)();
188
- const messages = await (0, googleapi_1.getGmailMessagesWithRetry)(token, senderEmail, processName, lastTriggerTime);
189
- const emailDetails = await (0, googleapi_1.getLatestEmailDetails)(token, await messages[0]['id']);
190
- (0, test_1.expect)(emailDetails).toContain('New Incidents: 2'); //# of alerts triggered since the last one
183
+ await (0, UtilitiesPage_1.assertLatestAlertEmail)(id, mailSlurpClient_1.mailSlurp, processName, 'New Incidents: 2');
191
184
  });
192
185
  });
193
186
  });
@@ -242,7 +242,7 @@ _8_8_1.test.describe('Optimize User Flow Tests', () => {
242
242
  await optimizeTabOptimizeHomePage.clickDashboardLink();
243
243
  await (0, sleep_1.sleep)(90000);
244
244
  await operateTabOptimizeDashboardPage.processLinkAssertion(processName, 6);
245
- await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName);
245
+ await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName, testUser.username);
246
246
  });
247
247
  });
248
248
  });
@@ -1,4 +1,4 @@
1
1
  import { MailSlurp } from 'mailslurp-client';
2
2
  export declare const mailSlurp: MailSlurp;
3
- export declare function createInbox(expriesIn?: number): Promise<import("mailslurp-client").InboxDto>;
3
+ export declare function createInbox(emailAddress?: string, expriesIn?: number): Promise<import("mailslurp-client").InboxDto>;
4
4
  export declare function deleteInbox(id: string): Promise<void>;
@@ -5,10 +5,15 @@ const mailslurp_client_1 = require("mailslurp-client");
5
5
  exports.mailSlurp = new mailslurp_client_1.MailSlurp({
6
6
  apiKey: process.env.MAIL_SLURP_API_KEY,
7
7
  });
8
- async function createInbox(expriesIn = 1200000) {
9
- const inbox = await exports.mailSlurp.createInbox(undefined, undefined, undefined, undefined, undefined, undefined, undefined, expriesIn);
10
- console.log(`Created inbox ${inbox.id}`);
11
- return inbox;
8
+ async function createInbox(emailAddress, expriesIn = 1200000) {
9
+ try {
10
+ const inbox = await exports.mailSlurp.createInbox(emailAddress, undefined, undefined, undefined, undefined, undefined, undefined, expriesIn);
11
+ console.log(`Created inbox ${inbox.id}`);
12
+ return inbox;
13
+ }
14
+ catch (e) {
15
+ throw new Error('Failed to create inbox: ' + e);
16
+ }
12
17
  }
13
18
  exports.createInbox = createInbox;
14
19
  async function deleteInbox(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.153",
3
+ "version": "0.0.155",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",