@camunda/e2e-test-suite 0.0.157 → 0.0.158

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,7 +21,10 @@ class AppsPage {
21
21
  tasklistListItem;
22
22
  constructor(page) {
23
23
  this.page = page;
24
- this.modelerLink = page.getByRole('link', { name: 'Modeler', exact: true });
24
+ this.modelerLink = page
25
+ .getByRole('link', { name: 'Modeler', exact: true })
26
+ .or(page.getByLabel('App Panel').getByLabel('Camunda Modeler'))
27
+ .first();
25
28
  this.appSwitcherButton = page.getByLabel('App Switcher');
26
29
  this.tasklistLink = page.getByRole('link', { name: 'Tasklist', exact: true });
27
30
  this.operateLink = page.getByRole('link', { name: 'Operate', exact: true });
@@ -45,7 +45,7 @@ declare class ConsoleOrganizationPage {
45
45
  readonly filterTableSearchbox: Locator;
46
46
  constructor(page: Page);
47
47
  clickUsersTab(): Promise<void>;
48
- clickMainUser(): Promise<void>;
48
+ clickMainUser(email: string): Promise<void>;
49
49
  clickAuthorizations(): Promise<void>;
50
50
  clickCreateAuthorizedResourceButton(): Promise<void>;
51
51
  processIdResourceAssertion(processId: string): Promise<void>;
@@ -166,9 +166,11 @@ class ConsoleOrganizationPage {
166
166
  async clickUsersTab() {
167
167
  await this.usersTab.click({ timeout: 60000 });
168
168
  }
169
- async clickMainUser() {
170
- await (0, test_1.expect)(this.mainUser).toBeVisible({ timeout: 60000 });
171
- await this.mainUser.click();
169
+ async clickMainUser(email) {
170
+ await this.filterTable([email]);
171
+ const user = this.rows.filter({ hasText: email }).first();
172
+ await (0, test_1.expect)(user).toBeVisible({ timeout: 60000 });
173
+ await user.click();
172
174
  }
173
175
  async clickAuthorizations() {
174
176
  await (0, test_1.expect)(this.authorizedResources).toBeVisible({ timeout: 60000 });
@@ -448,6 +450,7 @@ class ConsoleOrganizationPage {
448
450
  }
449
451
  async filterTable(names) {
450
452
  for (const name of names) {
453
+ await (0, test_1.expect)(this.filterTableSearchbox).toBeVisible({ timeout: 120000 });
451
454
  await this.filterTableSearchbox.click({ timeout: 60000 });
452
455
  await this.filterTableSearchbox.fill(name);
453
456
  }
@@ -8,6 +8,7 @@ declare class FormJsPage {
8
8
  readonly formEditor: Locator;
9
9
  readonly keyInput: Locator;
10
10
  readonly generalPanel: Locator;
11
+ readonly textFieldInForm: Locator;
11
12
  constructor(page: Page);
12
13
  clickAIFormGeneratorButton(): Promise<void>;
13
14
  generateAIForm(request?: string): Promise<void>;
@@ -12,6 +12,7 @@ class FormJsPage {
12
12
  formEditor;
13
13
  keyInput;
14
14
  generalPanel;
15
+ textFieldInForm;
15
16
  constructor(page) {
16
17
  this.page = page;
17
18
  this.aiFormGeneratorButton = page.getByRole('button', {
@@ -21,8 +22,9 @@ class FormJsPage {
21
22
  this.generateFormButton = page.getByRole('button', { name: 'Generate form' });
22
23
  this.textField = page.locator('button[data-field-type="textfield"]');
23
24
  this.formEditor = page.getByLabel('Form Definition');
24
- this.generalPanel = page.getByTitle('General').first();
25
+ this.generalPanel = page.locator('[data-group-id="group-general"]').first();
25
26
  this.keyInput = page.getByRole('textbox', { name: 'key' });
27
+ this.textFieldInForm = page.getByLabel('Form Definition');
26
28
  }
27
29
  async clickAIFormGeneratorButton() {
28
30
  await this.aiFormGeneratorButton.click();
@@ -72,9 +72,19 @@ class HomePage {
72
72
  await this.openOrganizationButton.click({ timeout: 60000 });
73
73
  }
74
74
  async clickSkipCustomization() {
75
- if (await this.buttonSkipCustomization.isVisible({ timeout: 60000 })) {
76
- await this.buttonSkipCustomization.click();
75
+ try {
76
+ await (0, test_1.expect)(this.gettingStartedHeading).toBeVisible({
77
+ timeout: 20000,
78
+ });
79
+ await (0, test_1.expect)(this.buttonSkipCustomization).toBeVisible({
80
+ timeout: 30000,
81
+ });
82
+ await this.buttonSkipCustomization.click({ timeout: 60000 });
77
83
  await this.closeInformationDialog();
84
+ return;
85
+ }
86
+ catch (error) {
87
+ console.error(error);
78
88
  }
79
89
  }
80
90
  }
@@ -19,6 +19,7 @@ declare class ModelerHomePage {
19
19
  readonly uploadFilesButton: Locator;
20
20
  readonly messageBanner: Locator;
21
21
  readonly closeButton: Locator;
22
+ readonly cancelButton: Locator;
22
23
  readonly optionsButton: Locator;
23
24
  readonly formNameBreadcrumb: (formName: string) => Locator;
24
25
  constructor(page: Page);
@@ -24,6 +24,7 @@ class ModelerHomePage {
24
24
  uploadFilesButton;
25
25
  messageBanner;
26
26
  closeButton;
27
+ cancelButton;
27
28
  optionsButton;
28
29
  formNameBreadcrumb;
29
30
  constructor(page) {
@@ -59,6 +60,7 @@ class ModelerHomePage {
59
60
  this.uploadFilesButton = page.getByRole('menuitem', { name: 'Upload files' });
60
61
  this.messageBanner = page.locator('[data-test="close-top-banner"]');
61
62
  this.closeButton = page.getByRole('button', { name: 'Got it - Dismiss' });
63
+ this.cancelButton = page.getByRole('button', { name: 'Cancel' });
62
64
  this.optionsButton = page.getByRole('button', { name: 'Options' });
63
65
  this.formNameBreadcrumb = (formName) => page.locator('button[data-test="breadcrumb-form"]', {
64
66
  hasText: formName,
@@ -92,6 +94,7 @@ class ModelerHomePage {
92
94
  await this.formNameInput.click({ timeout: 60000 });
93
95
  await this.formNameInput.fill(name);
94
96
  await this.formNameInput.press('Enter');
97
+ await (0, sleep_1.sleep)(200);
95
98
  }
96
99
  async reload() {
97
100
  await this.page.reload();
@@ -139,16 +142,23 @@ class ModelerHomePage {
139
142
  await this.enterNewProjectName(this.defaultFolderName);
140
143
  }
141
144
  async clickManageButton(retries = 3) {
145
+ await this.optionsButton.click({ timeout: 30000 });
142
146
  for (let i = 0; i < retries; i++) {
143
147
  try {
144
- await this.manageButton.click({ timeout: 60000 });
145
- return; // Click succeeded, exit the loop
148
+ await (0, sleep_1.sleep)(5000);
149
+ if (await this.manageButton.isVisible({ timeout: 30000 })) {
150
+ await this.manageButton.click({ timeout: 10000 });
151
+ }
152
+ else {
153
+ await this.clickOpenOrganizationsButton();
154
+ await this.optionsButton.click({ timeout: 30000 });
155
+ await (0, test_1.expect)(this.manageButton).toBeVisible({ timeout: 30000 });
156
+ await this.manageButton.click({ timeout: 30000 });
157
+ }
158
+ return;
146
159
  }
147
160
  catch (error) {
148
- console.error(`Attempt ${i + 1} to click manage button failed: ${error}`);
149
161
  await (0, sleep_1.sleep)(10000);
150
- await this.clickOpenOrganizationsButton();
151
- await this.clickOptionsButton();
152
162
  }
153
163
  }
154
164
  throw new Error(`Failed to click manage button after ${retries} retries`);
@@ -158,13 +168,15 @@ class ModelerHomePage {
158
168
  }
159
169
  async clickMessageBanner() {
160
170
  try {
161
- await Promise.race([
162
- this.messageBanner.click(),
163
- this.closeButton.click({ timeout: 30000 }),
164
- ]);
171
+ const button = this.messageBanner
172
+ .or(this.closeButton)
173
+ .or(this.cancelButton)
174
+ .first();
175
+ await (0, test_1.expect)(button).toBeVisible({ timeout: 15000 });
176
+ await button.click();
165
177
  }
166
178
  catch {
167
- console.log('No additional banner or close button found to click');
179
+ console.log('No banner or close button found to click');
168
180
  }
169
181
  }
170
182
  async assertFormBreadcrumbVisible(formName) {
@@ -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) {
40
- const maxRetries = 10;
39
+ async processOwnerNameAssertion(processName, userEmail) {
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. 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(`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
  }
@@ -27,7 +27,7 @@ declare class SignUpPage {
27
27
  readonly verifyEmailText: Locator;
28
28
  readonly signupFailedText: Locator;
29
29
  constructor(page: Page);
30
- signupToC8(emailAddress: string): Promise<void>;
30
+ signupToC8(emailAddress: string, password: string): Promise<void>;
31
31
  clickFirstNameInput(): Promise<void>;
32
32
  fillFirstNameInput(firstName: string): Promise<void>;
33
33
  clickLastNameInput(): Promise<void>;
@@ -78,7 +78,7 @@ class SignUpPage {
78
78
  this.verifyEmailText = page.getByText('Verify your email');
79
79
  this.signupFailedText = page.getByText('Sign up failed');
80
80
  }
81
- async signupToC8(emailAddress) {
81
+ async signupToC8(emailAddress, password) {
82
82
  await this.page.goto('https://accounts.ultrawombat.com/signup');
83
83
  await this.clickFirstNameInput();
84
84
  await this.fillFirstNameInput('QA');
@@ -87,7 +87,7 @@ class SignUpPage {
87
87
  await this.clickEmailInput();
88
88
  await this.fillEmailInput(emailAddress);
89
89
  await this.clickPasswordInput();
90
- await this.fillPasswordInput(process.env.C8_PASSWORD);
90
+ await this.fillPasswordInput(password);
91
91
  await this.clickSignupButton();
92
92
  await (0, test_1.expect)(this.verifyEmailText.first()).toBeVisible({
93
93
  timeout: 40000,
@@ -195,7 +195,10 @@ class TaskDetailsPage {
195
195
  }
196
196
  }
197
197
  async fillTextInput(value) {
198
+ await (0, test_1.expect)(this.textInput).toBeVisible({ timeout: 90000 });
199
+ await this.textInput.click();
198
200
  await this.textInput.fill(value, { timeout: 90000 });
201
+ (0, test_1.expect)(await this.textInput.inputValue()).toBe(value);
199
202
  }
200
203
  async fillTextBox(text) {
201
204
  await this.textBox.fill(text);
@@ -204,7 +207,7 @@ class TaskDetailsPage {
204
207
  await this.nameInput.fill(nameInput);
205
208
  }
206
209
  async clickSubmitButton() {
207
- await (0, test_1.expect)(this.submitButton).toBeVisible();
210
+ await (0, test_1.expect)(this.submitButton).toBeVisible({ timeout: 60000 });
208
211
  await (0, test_1.expect)(this.submitButton).toBeEnabled();
209
212
  await this.submitButton.click();
210
213
  }
@@ -12,7 +12,10 @@ import { OperateProcessesPage } from './OperateProcessesPage';
12
12
  import { OperateProcessInstancePage } from './OperateProcessInstancePage';
13
13
  import { ConnectorSettingsPage } from './ConnectorSettingsPage';
14
14
  import { LoginPage } from './LoginPage';
15
- export declare function loginWithRetry(page: Page, loginPage: LoginPage, timeout: number, maxRetries?: number): Promise<void>;
15
+ export declare function loginWithRetry(page: Page, loginPage: LoginPage, testUser: {
16
+ username: string;
17
+ password: string;
18
+ }, timeout: number, maxRetries?: number): Promise<void>;
16
19
  export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, processName: string, url: string, auth: string, resultExpression: string, resultVariable?: string, basicAuthCredentials?: {
17
20
  username: string;
18
21
  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) {
@@ -8,12 +8,14 @@ const _setup_1 = require("../../test-setup.js");
8
8
  const sleep_1 = require("../../utils/sleep");
9
9
  const apiHelpers_1 = require("../../utils/apiHelpers");
10
10
  const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
11
+ const users_1 = require("../../utils/users");
12
+ const testUser = (0, users_1.getTestUser)('seventeenthUser');
11
13
  _8_6_1.test.describe.configure({ mode: 'parallel' });
12
14
  _8_6_1.test.describe('Connectors User Flow Tests', () => {
13
15
  const defaultClusterName = 'Test Cluster';
14
16
  const awsCluster = 'AWS Cluster';
15
17
  _8_6_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
16
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
18
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
17
19
  });
18
20
  _8_6_1.test.afterEach(async ({ page }, testInfo) => {
19
21
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -9,12 +9,14 @@ const googleapi_1 = require("../../utils/googleapi");
9
9
  const formatDate_1 = require("../../utils/formatDate");
10
10
  const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
11
11
  const constants_1 = require("../../utils/constants");
12
+ const users_1 = require("../../utils/users");
13
+ const testUser = (0, users_1.getTestUser)('eighteenthUser');
12
14
  _8_6_1.test.describe.configure({ mode: 'parallel' });
13
15
  _8_6_1.test.describe('Console User Flow Tests', () => {
14
16
  const defaultClusterName = 'Test Cluster';
15
17
  const awsCluster = 'AWS Cluster';
16
18
  _8_6_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_6_1.test.afterEach(async ({ page }, testInfo) => {
20
22
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -11,11 +11,13 @@ const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
11
11
  const sleep_1 = require("../../utils/sleep");
12
12
  const LoginPage_1 = require("../../pages/8.6/LoginPage");
13
13
  const resetSession_1 = require("../../utils/resetSession");
14
+ const users_1 = require("../../utils/users");
15
+ const testUser = (0, users_1.getTestUser)('nineteenthUser');
14
16
  _8_6_1.test.describe.configure({ mode: 'parallel' });
15
17
  _8_6_1.test.describe('HTO User Flow Tests', () => {
16
18
  const clusterName = 'Test Cluster';
17
19
  _8_6_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
18
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, (testInfo.workerIndex + 1) * 1000);
20
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, (testInfo.workerIndex + 1) * 1000);
19
21
  });
20
22
  _8_6_1.test.afterEach(async ({ page, homePage, appsPage, consoleOrganizationsPage }, testInfo) => {
21
23
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -261,9 +263,7 @@ _8_6_1.test.describe('HTO User Flow Tests', () => {
261
263
  await _8_6_1.test.step('Assign Users to the Created Groups in Identity', async () => {
262
264
  await consoleOrganizationsPage.clickUserGroup('Single User');
263
265
  await consoleOrganizationsPage.clickAssignMembers();
264
- await consoleOrganizationsPage.fillAssignMembers([
265
- process.env.C8_USERNAME,
266
- ]);
266
+ await consoleOrganizationsPage.fillAssignMembers([testUser.username]);
267
267
  await consoleOrganizationsPage.clickAssignSubButton();
268
268
  await consoleOrganizationsPage.clickOrganizationManagementLink();
269
269
  await consoleOrganizationsPage.clickGroupsTab();
@@ -348,6 +348,7 @@ _8_6_1.test.describe('HTO User Flow Tests', () => {
348
348
  const loginPage = new LoginPage_1.LoginPage(page);
349
349
  await loginPage.loginWithTestUser({
350
350
  username: process.env.C8_USERNAME_TEST_2,
351
+ password: process.env.C8_PASSWORD_TEST_2,
351
352
  });
352
353
  await appsPage.clickCamundaApps();
353
354
  await appsPage.clickTasklist(clusterName);
@@ -4,11 +4,13 @@ const test_1 = require("@playwright/test");
4
4
  const _8_6_1 = require("../../fixtures/8.6");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
7
+ const users_1 = require("../../utils/users");
8
+ const testUser = (0, users_1.getTestUser)('twentyFirstUser');
7
9
  _8_6_1.test.describe.configure({ mode: 'parallel' });
8
10
  _8_6_1.test.describe('Navigation Tests', () => {
9
11
  const clusterName = 'Test Cluster';
10
12
  _8_6_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_6_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.6/OptimizeHomePage");
10
10
  const OptimizeDashboardPage_1 = require("../../pages/8.6/OptimizeDashboardPage");
11
11
  const sleep_1 = require("../../utils/sleep");
12
12
  const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
13
+ const users_1 = require("../../utils/users");
14
+ const testUser = (0, users_1.getTestUser)('twentyThirdUser');
13
15
  _8_6_1.test.describe.configure({ mode: 'parallel' });
14
16
  _8_6_1.test.describe('Optimize User Flow Tests', () => {
15
17
  const clusterName = 'Test Cluster';
16
18
  _8_6_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_6_1.test.afterEach(async ({ page }, testInfo) => {
20
22
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -223,7 +225,7 @@ _8_6_1.test.describe('Optimize User Flow Tests', () => {
223
225
  await optimizeTabOptimizeHomePage.clickDashboardLink();
224
226
  await (0, sleep_1.sleep)(120000);
225
227
  await operateTabOptimizeDashboardPage.processLinkAssertion(processName, 5);
226
- await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName);
228
+ await operateTabOptimizeDashboardPage.processOwnerNameAssertion(processName, testUser.username);
227
229
  });
228
230
  });
229
231
  });
@@ -5,10 +5,12 @@ const _8_6_1 = require("../../fixtures/8.6");
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.6/UtilitiesPage");
8
+ const users_1 = require("../../utils/users");
9
+ const testUser = (0, users_1.getTestUser)('twentyFourthUser');
8
10
  _8_6_1.test.describe.configure({ mode: 'parallel' });
9
11
  _8_6_1.test.describe('Deploy and run a process in Play', () => {
10
12
  _8_6_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_6_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.6/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_6_1.test.describe.configure({ mode: 'parallel' });
10
12
  _8_6_1.test.describe('RBA Enabled User Flows Test', () => {
11
13
  const clusterNames = {
@@ -14,7 +16,7 @@ _8_6_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_6_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_6_1.test.describe('RBA Enabled User Flows Test', () => {
55
57
  await _8_6_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_6_1.test.describe('RBA Enabled User Flows Test', () => {
125
127
  await _8_6_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_6_1.test.describe('RBA Enabled User Flows Test', () => {
172
174
  await _8_6_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_6_1.test.step('Navigate to Operate and Check Processes Are Not Accessible', async () => {
@@ -226,7 +229,7 @@ _8_6_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 OptimizeCollectionsPage_1 = require("../../pages/8.6/OptimizeCollectionsPa
14
14
  const OptimizeReportPage_1 = require("../../pages/8.6/OptimizeReportPage");
15
15
  const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
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_6_1.test.describe.configure({ mode: 'parallel' });
18
20
  _8_6_1.test.describe('Smoke Tests', () => {
19
21
  const clusterName = 'Test Cluster';
20
22
  _8_6_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_6_1.test.afterEach(async ({ page }, testInfo) => {
24
26
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -4,20 +4,19 @@ const test_1 = require("@playwright/test");
4
4
  const _8_6_1 = require("../../fixtures/8.6");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const sleep_1 = require("../../utils/sleep");
7
+ const users_1 = require("../../utils/users");
8
+ const UtilitiesPage_1 = require("../../pages/8.6/UtilitiesPage");
7
9
  _8_6_1.test.describe.configure({ mode: 'parallel' });
8
10
  _8_6_1.test.describe('Cluster Setup Tests', () => {
9
- _8_6_1.test.beforeEach(async ({ page, loginPage }) => {
10
- await page.goto('/');
11
- await loginPage.login();
12
- });
13
11
  _8_6_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_6_1.test)('Enable Alpha Features', async ({ page, homePage, consoleOrganizationsPage, }) => {
15
+ (0, _8_6_1.test)('Enable Alpha Features', async ({ page, homePage, loginPage, consoleOrganizationsPage, }, testInfo) => {
18
16
  if (process.env.IS_PROD === 'true') {
19
17
  _8_6_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,37 +28,45 @@ _8_6_1.test.describe('Cluster Setup Tests', () => {
29
28
  await consoleOrganizationsPage.clickSettingsTab();
30
29
  await consoleOrganizationsPage.enableAlphaFeature('AI-powered features');
31
30
  });
32
- (0, _8_6_1.test)('Create Default Cluster', async ({ homePage, clusterDetailsPage, clusterPage, }) => {
31
+ (0, _8_6_1.test)('Create Default Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, }, testInfo) => {
33
32
  _8_6_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_6_1.test)('Create Project Folder', async ({ homePage, appsPage, modelerHomePage, }) => {
42
- await _8_6_1.test.step('Navigate to Web Modeler', async () => {
43
- await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
44
- timeout: 120000,
41
+ for (const [index, user] of (0, users_1.getTestUsers)().entries()) {
42
+ (0, _8_6_1.test)(`Create Project Folder for User ${index + 1}`, async ({ page, loginPage, homePage, appsPage, modelerHomePage, }, testInfo) => {
43
+ await _8_6_1.test.step('Log in', async () => {
44
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, user, (testInfo.workerIndex + 1) * 1000);
45
45
  });
46
- await appsPage.clickCamundaApps();
47
- await appsPage.clickModeler();
48
- await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
49
- timeout: 180000,
46
+ await _8_6_1.test.step('Navigate to Web Modeler', async () => {
47
+ await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
48
+ timeout: 120000,
49
+ });
50
+ await appsPage.clickCamundaApps();
51
+ await appsPage.clickModeler();
52
+ await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
53
+ timeout: 180000,
54
+ });
50
55
  });
51
- });
52
- await _8_6_1.test.step('Create Cross Component Project Folder', async () => {
53
- await modelerHomePage.createCrossComponentProjectFolder();
54
- await modelerHomePage.clickHomeBreadcrumb();
55
- await (0, test_1.expect)(modelerHomePage.crossComponentProjectFolder).toBeVisible({
56
- timeout: 60000,
56
+ await _8_6_1.test.step('Create Cross Component Project Folder', async () => {
57
+ await homePage.clickSkipCustomization();
58
+ await modelerHomePage.createCrossComponentProjectFolder();
59
+ await modelerHomePage.clickHomeBreadcrumb();
60
+ await (0, test_1.expect)(modelerHomePage.crossComponentProjectFolder).toBeVisible({
61
+ timeout: 60000,
62
+ });
57
63
  });
58
64
  });
59
- });
60
- (0, _8_6_1.test)('Create AWS Cluster', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
65
+ }
66
+ (0, _8_6_1.test)('Create AWS Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, }, testInfo) => {
61
67
  _8_6_1.test.slow();
62
68
  const clusterName = 'AWS Cluster';
69
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
63
70
  await homePage.clickClusters();
64
71
  await clusterPage.createCluster(clusterName, 'AWS');
65
72
  await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
@@ -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_6_1.test.describe.configure({ mode: 'parallel' });
16
19
  _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
17
20
  const clusterName = 'Test Cluster';
@@ -20,7 +23,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
20
23
  'Invite Existing C8 member to Web Modeler flow': '',
21
24
  };
22
25
  _8_6_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_6_1.test.afterEach(async ({ page }, testInfo) => {
26
29
  await (0, _setup_1.captureScreenshot)(page, testInfo);
@@ -106,7 +109,6 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
106
109
  timeout: 120000,
107
110
  });
108
111
  await modelerHomePage.clickOpenOrganizationsButton();
109
- await modelerHomePage.clickOptionsButton();
110
112
  await modelerHomePage.clickManageButton();
111
113
  await consoleOrganizationsPage.clickUsersTab();
112
114
  await consoleOrganizationsPage.filterTable([
@@ -139,6 +141,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
139
141
  await (0, test_1.expect)(appsPage.tasklistLink).not.toBeVisible();
140
142
  await (0, test_1.expect)(appsPage.modelerLink).toBeVisible();
141
143
  await appsPage.clickModeler();
144
+ await homePage.clickSkipCustomization();
142
145
  await modelerHomePage.createCrossComponentProjectFolder();
143
146
  await modelerHomePage.clickDiagramTypeDropdown();
144
147
  await modelerHomePage.clickBpmnTemplateOption();
@@ -160,7 +163,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
160
163
  });
161
164
  await settingsPage.clickOpenSettingsButton();
162
165
  await settingsPage.clickLogoutButton();
163
- await loginPage.login();
166
+ await loginPage.login(testUser);
164
167
  await (0, sleep_1.sleep)(30000);
165
168
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
166
169
  timeout: 90000,
@@ -170,7 +173,6 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
170
173
  timeout: 120000,
171
174
  });
172
175
  await modelerHomePage.clickOpenOrganizationsButton();
173
- await modelerHomePage.clickOptionsButton();
174
176
  await modelerHomePage.clickManageButton();
175
177
  await consoleOrganizationsPage.clickUsersTab();
176
178
  await page.reload();
@@ -221,7 +223,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
221
223
  });
222
224
  await settingsPage.clickOpenSettingsButton();
223
225
  await settingsPage.clickLogoutButton();
224
- await loginPage.login();
226
+ await loginPage.login(testUser);
225
227
  await (0, sleep_1.sleep)(20000);
226
228
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
227
229
  timeout: 60000,
@@ -231,7 +233,6 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
231
233
  timeout: 60000,
232
234
  });
233
235
  await modelerHomePage.clickOpenOrganizationsButton();
234
- await modelerHomePage.clickOptionsButton();
235
236
  await modelerHomePage.clickManageButton();
236
237
  await consoleOrganizationsPage.clickUsersTab();
237
238
  await page.reload();
@@ -396,7 +397,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
396
397
  timeout: 60000,
397
398
  });
398
399
  await page.goto('/');
399
- await loginPage.login();
400
+ await loginPage.login(testUser);
400
401
  });
401
402
  await _8_6_1.test.step('Navigate to Web Modeler as Project Admin', async () => {
402
403
  await (0, test_1.expect)(homePage.camundaComponentsButton).toBeVisible({
@@ -419,8 +420,11 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
419
420
  const { id, emailAddress } = await (0, mailSlurpClient_1.createInbox)();
420
421
  inboxes[testInfo.title] = id;
421
422
  let newOrganizationUuid = '';
423
+ const password = (await (0, _setup_1.generateRandomStringAsync)(5)) +
424
+ (0, node_crypto_1.randomInt)(10000000, 90000000) +
425
+ '*';
422
426
  await _8_6_1.test.step('Sign up new user to C8', async () => {
423
- await signUpPage.signupToC8(emailAddress);
427
+ await signUpPage.signupToC8(emailAddress, password);
424
428
  });
425
429
  await _8_6_1.test.step('Log in to C8 as New User', async () => {
426
430
  await (0, UtilitiesPage_1.clickInvitationLinkInEmail)(page, id);
@@ -432,7 +436,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
432
436
  await settingsPage.clickLogoutButton();
433
437
  await loginPage.loginWithoutOrgAssertion({
434
438
  username: emailAddress,
435
- password: process.env.C8_PASSWORD,
439
+ password: password,
436
440
  });
437
441
  await (0, test_1.expect)(homePage.gettingStartedHeading).toBeVisible({
438
442
  timeout: 40000,
@@ -450,7 +454,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
450
454
  await _8_6_1.test.step('Login as Project Admin', async () => {
451
455
  await settingsPage.clickOpenSettingsButton();
452
456
  await settingsPage.clickLogoutButton();
453
- await loginPage.login();
457
+ await loginPage.login(testUser);
454
458
  });
455
459
  await _8_6_1.test.step('Navigate to Web Modeler', async () => {
456
460
  await appsPage.clickCamundaApps();
@@ -477,7 +481,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
477
481
  await (0, sleep_1.sleep)(60000);
478
482
  await loginPage.login({
479
483
  username: emailAddress,
480
- password: process.env.C8_PASSWORD,
484
+ password: password,
481
485
  });
482
486
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(modelerHomePage, modelerHomePage.crossComponentProjectFolder, 'Cross Component Test Project', 60000, 5);
483
487
  });
@@ -486,7 +490,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
486
490
  await settingsPage.clickLogoutButton();
487
491
  });
488
492
  await _8_6_1.test.step('Navigate to Web Modeler as Project Admin', async () => {
489
- await loginPage.login();
493
+ await loginPage.login(testUser);
490
494
  await appsPage.clickCamundaApps();
491
495
  await appsPage.clickModeler();
492
496
  await (0, test_1.expect)(modelerHomePage.modelerPageBanner).toBeVisible({
@@ -618,8 +622,10 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
618
622
  await modelerHomePage.clickFormOption();
619
623
  await modelerHomePage.enterFormName(formName);
620
624
  await formJsPage.dragAndDrop(formJsPage.textField, formJsPage.formEditor);
625
+ await (0, test_1.expect)(formJsPage.textFieldInForm).toBeVisible();
621
626
  await formJsPage.clickGeneralPropertiesPanel();
622
627
  await formJsPage.fillKeyInput('Public_Form_Text_Field');
628
+ await (0, sleep_1.sleep)(10000);
623
629
  });
624
630
  await _8_6_1.test.step('Add A BPMN Template To The Project', async () => {
625
631
  await modelerHomePage.clickProjectBreadcrumb();
@@ -654,7 +660,7 @@ _8_6_1.test.describe('Web Modeler User Flow Tests', () => {
654
660
  });
655
661
  });
656
662
  await _8_6_1.test.step('Login to Tasklist and Check User Task Has the Correct Input Values and Can Be Completed', async () => {
657
- await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, 5000);
663
+ await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, testUser, 5000);
658
664
  await appsPage.clickCamundaApps();
659
665
  await appsPage.clickTasklist(clusterName);
660
666
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, taskPanelPage.taskListPageBanner, 'Tasklist banner');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.157",
3
+ "version": "0.0.158",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",