@camunda/e2e-test-suite 0.0.731 → 0.0.733

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.
@@ -180,6 +180,7 @@ declare class ModelerCreatePage {
180
180
  fillCorrelationKeyPayloadInput(correlationKeyPayload: string): Promise<void>;
181
181
  clickIdInput(): Promise<void>;
182
182
  fillIdInput(id: string): Promise<void>;
183
+ setAndVerifyProcessId(processId: string): Promise<void>;
183
184
  fillStartFormName(name: string): Promise<void>;
184
185
  fillStartFormDate(date: string): Promise<void>;
185
186
  checkStartFormCheckbox(): Promise<void>;
@@ -808,6 +808,25 @@ class ModelerCreatePage {
808
808
  async fillIdInput(id) {
809
809
  await this.processIdInput.fill(id);
810
810
  }
811
+ async setAndVerifyProcessId(processId) {
812
+ // The General properties group is already expanded by the caller. Setting
813
+ // the process ID on a freshly uploaded diagram intermittently fails to
814
+ // commit (the value is typed but the modeler does not persist it, leaving
815
+ // the template default id). Anything keyed on the process id — notably the
816
+ // RBA resource authorization auto-provisioned on deploy — then references
817
+ // the wrong id. Fill, blur to force the commit, and re-apply until the
818
+ // input reflects the intended id.
819
+ for (let attempt = 0; attempt < 3; attempt++) {
820
+ await this.processIdInput.click();
821
+ await this.processIdInput.fill('');
822
+ await this.processIdInput.fill(processId);
823
+ await this.processIdInput.blur();
824
+ if ((await this.processIdInput.inputValue()) === processId) {
825
+ return;
826
+ }
827
+ }
828
+ await (0, test_1.expect)(this.processIdInput).toHaveValue(processId, { timeout: 10000 });
829
+ }
811
830
  async fillStartFormName(name) {
812
831
  await this.payloadNameInput.fill(name);
813
832
  }
@@ -256,8 +256,7 @@ async function modelDiagramFromFile(page, modelerHomePage, modelerCreatePage, pr
256
256
  await modelerCreatePage.clickGeneralPropertiesPanel();
257
257
  await modelerCreatePage.clickNameInput();
258
258
  await modelerCreatePage.fillNamedInput(processName);
259
- await modelerCreatePage.clickIdInput();
260
- await modelerCreatePage.fillIdInput(processName);
259
+ await modelerCreatePage.setAndVerifyProcessId(processName);
261
260
  if (nrOfRenamedUserTasks > 0) {
262
261
  for (let i = 1; i <= nrOfRenamedUserTasks; i++) {
263
262
  await modelerCreatePage.clickUserTask('process' + i);
@@ -1071,7 +1071,12 @@ class ModelerCreatePage {
1071
1071
  await this.continueToPlayButton.click({ timeout: 30000 });
1072
1072
  }
1073
1073
  async assertScenarioNameVisible(scenarioName) {
1074
- await (0, test_1.expect)(this.page.getByTestId('instance-header').getByText(scenarioName)).toBeVisible();
1074
+ await (0, test_1.expect)(this.page
1075
+ .getByTestId('instance-header')
1076
+ .getByText(scenarioName)
1077
+ .or(this.page
1078
+ .getByRole('region', { name: 'Scenarios' })
1079
+ .getByText(scenarioName, { exact: false }))).toBeVisible();
1075
1080
  }
1076
1081
  async fillStartEventVariablesForDocHandling(zeebeUrl, zeebeClientId, zeebeClientSecret) {
1077
1082
  console.log(`URL: ${zeebeUrl}, ClientId: ${zeebeClientId}, Secret: ${zeebeClientSecret}`);
@@ -100,7 +100,12 @@ class NavigationPage {
100
100
  const now = new Date();
101
101
  const elapsed = Date.now() - startTime;
102
102
  if (attempt < maxRetries - 1) {
103
- await (0, sleep_1.sleep)(2000);
103
+ // Progressive backoff: a transient Keycloak 5xx during the OAuth
104
+ // login (the "We are sorry... internal server error" page) can
105
+ // persist for several seconds. Widening the gap between attempts
106
+ // (2s, 4s, 6s, 8s) lets the auth server recover instead of burning
107
+ // every retry inside one short outage window.
108
+ await (0, sleep_1.sleep)(2000 * (attempt + 1));
104
109
  if (!this.page.isClosed()) {
105
110
  try {
106
111
  await this.page.waitForLoadState('load', { timeout: timeout });
@@ -152,7 +152,7 @@ class OCIdentityRolesPage {
152
152
  await this.createIdField.fill(role.id);
153
153
  await this.createNameField.fill(role.name);
154
154
  await this.createRoleModalCreateButton.click();
155
- await (0, test_1.expect)(this.createRoleModal).not.toBeVisible();
155
+ await (0, test_1.expect)(this.createRoleModal).not.toBeVisible({ timeout: 60000 });
156
156
  await (0, expectLocatorWithPagination_1.expectLocatorWithPagination)(this.page, this.rolesList
157
157
  .getByRole('cell', {
158
158
  name: role.name,
@@ -59,6 +59,13 @@ class OperateHomePage {
59
59
  });
60
60
  await this.processesTab.click({ timeout: constants_1._1_SECOND_IN_MS * 4 });
61
61
  },
62
+ postAction: async () => {
63
+ // Operate is a Vite SPA: a transient module/CSS preload failure
64
+ // renders a "Something went wrong - Please reload the page" screen
65
+ // on which the Processes tab click is a no-op. Reload to fetch fresh
66
+ // assets so the next attempt can render the Processes view.
67
+ await this.page.reload({ waitUntil: 'domcontentloaded' });
68
+ },
62
69
  });
63
70
  }
64
71
  async closeInformationDialog() {
@@ -130,7 +130,7 @@ class OptimizeReportPage {
130
130
  }
131
131
  async waitUntilLocatorIsVisible(locator, tab) {
132
132
  let elapsedTime = 0;
133
- const maxWaitTimeSeconds = 120000;
133
+ const maxWaitTimeSeconds = 300000;
134
134
  while (elapsedTime < maxWaitTimeSeconds) {
135
135
  const element = await locator;
136
136
  if (await element.isVisible()) {
@@ -96,6 +96,23 @@ class PlayPage {
96
96
  await this.completeJobButton.click();
97
97
  }
98
98
  async clickStartInstanceButton() {
99
+ const scenariosRegion = this.page.getByRole('region', { name: 'Scenarios' });
100
+ const backToScenariosButton = scenariosRegion.getByRole('button', {
101
+ name: 'Back to scenarios',
102
+ });
103
+ const closeScenariosButton = scenariosRegion.getByRole('button', {
104
+ name: 'Close',
105
+ });
106
+ // When "Configure scenario" is clicked with a prior scenario already saved,
107
+ // the Play UI opens scenario DETAILS (with "Back to scenarios") instead of
108
+ // the input panel. Close the Scenarios panel to reveal the canvas start controls.
109
+ const isDetailsView = await backToScenariosButton
110
+ .waitFor({ state: 'visible', timeout: 3000 })
111
+ .then(() => true)
112
+ .catch(() => false);
113
+ if (isDetailsView) {
114
+ await closeScenariosButton.click();
115
+ }
99
116
  const startTrigger = this.configureTestPanelStartButton
100
117
  .or(this.inputPanelStartButton)
101
118
  .or(this.startInstanceButton)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.731",
3
+ "version": "0.0.733",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",