@camunda/e2e-test-suite 0.0.922 → 0.0.924

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.
@@ -107,6 +107,7 @@ declare class ModelerCreatePage {
107
107
  constructor(page: Page);
108
108
  clickSecondDeployButton(): Promise<void>;
109
109
  modelJobWorkerDiagram(processName: string, embedFrom?: boolean, processId?: string): Promise<void>;
110
+ private waitForDiagramEditorToLoad;
110
111
  modelCamundaUserTaskDiagram(processName: string, processId?: string, formName?: string): Promise<void>;
111
112
  assignToCandidateGroup(taskName: string, candidateGroup: string, assignee?: string): Promise<void>;
112
113
  assignToCandidateUser(taskName: string, candidateUser: string, assignee?: string): Promise<void>;
@@ -357,10 +357,29 @@ class ModelerCreatePage {
357
357
  await this.clickAppendEndEventButton();
358
358
  await (0, sleep_1.sleep)(20000);
359
359
  }
360
+ // Opening the freshly created diagram occasionally lands on a bare gateway
361
+ // error page instead of the editor (the nightly captured Envoy's "upstream
362
+ // connect error or disconnect/reset before headers" plain-text response). That
363
+ // page never renders the properties panel, so one long wait just burns the
364
+ // whole budget before failing; reload between attempts so the blip recovers.
365
+ async waitForDiagramEditorToLoad() {
366
+ const maxAttempts = 3;
367
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
368
+ try {
369
+ await (0, test_1.expect)(this.generalPanel).toBeVisible({ timeout: 60000 });
370
+ return;
371
+ }
372
+ catch (error) {
373
+ if (attempt === maxAttempts - 1) {
374
+ throw error;
375
+ }
376
+ console.warn(`Diagram editor did not load on attempt ${attempt + 1}; reloading.`);
377
+ await this.page.reload();
378
+ }
379
+ }
380
+ }
360
381
  async modelCamundaUserTaskDiagram(processName, processId = '', formName = '') {
361
- await (0, test_1.expect)(this.generalPanel).toBeVisible({
362
- timeout: 180000,
363
- });
382
+ await this.waitForDiagramEditorToLoad();
364
383
  await this.enterDiagramName(processName);
365
384
  await (0, sleep_1.sleep)(15000);
366
385
  if (processId.length > 0) {
@@ -663,9 +682,36 @@ class ModelerCreatePage {
663
682
  async clickEditDiagramNameButton() {
664
683
  await this.renameDiagramNameButton.click({ timeout: 10000 });
665
684
  }
685
+ // The rename can silently no-op: camunda-hub's breadcrumb name editor
686
+ // (InlineEditable) resets its input back to the stored diagram name whenever
687
+ // the diagram store pushes a new value, and `renameDiagram` returns early when
688
+ // the submitted name equals the stored one — so an Enter that races the
689
+ // editor's initial autosave commits nothing. The diagram then keeps its
690
+ // "New BPMN diagram" default name, and every later lookup by process name
691
+ // (Operate's instance list, Tasklist, Play) can never match, which is what the
692
+ // nightly showed: three instances deployed as "New BPMN diagram". Confirm the
693
+ // name landed in the breadcrumb and re-open the editor to retry if it didn't.
666
694
  async enterDiagramName(name) {
667
- await this.diagramNameInput.fill(name, { timeout: 90000 });
668
- await this.diagramNameInput.press('Enter', { timeout: 90000 });
695
+ const maxAttempts = 3;
696
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
697
+ if (attempt > 0) {
698
+ await this.clickDiagramBreadcrumb();
699
+ await this.clickEditDiagramNameButton();
700
+ }
701
+ await this.diagramNameInput.fill(name, { timeout: 90000 });
702
+ await this.diagramNameInput.press('Enter', { timeout: 90000 });
703
+ try {
704
+ await this.diagramNameBreadcrumb(name).waitFor({
705
+ state: 'visible',
706
+ timeout: 30000,
707
+ });
708
+ return;
709
+ }
710
+ catch {
711
+ console.warn(`Diagram rename to "${name}" did not commit on attempt ${attempt + 1}.`);
712
+ }
713
+ }
714
+ throw new Error(`Diagram name was not set to "${name}".`);
669
715
  }
670
716
  async clickVariableInput() {
671
717
  await this.variableInput.click({ timeout: 60000 });
@@ -1151,10 +1197,20 @@ class ModelerCreatePage {
1151
1197
  .getByText('Deploy process')
1152
1198
  .locator('..')
1153
1199
  .getByRole('button', { name: 'Deploy' });
1154
- // Keyed on the test id, not the label: the button reads "Configure test
1155
- // case" since camunda-hub a90fd06 and "Configure scenario" before it, while
1156
- // the test id kept its original wording across the rename.
1157
- const configureScenarioButton = this.page.getByTestId('play-configuration-configure-scenario-button');
1200
+ // Both attributes on this button have been renamed by camunda-hub, in
1201
+ // separate commits: a90fd06 changed the label from "Configure scenario" to
1202
+ // "Configure test case", and b3958a1649 (#27259, 2026-08-07) then changed
1203
+ // the test id from `play-configuration-configure-scenario-button` to
1204
+ // `configure-test-case-button`. Match current test id, then pre-rename test
1205
+ // id, then either label, so a further rename of any single attribute cannot
1206
+ // break the step.
1207
+ const configureScenarioButton = this.page
1208
+ .getByTestId('configure-test-case-button')
1209
+ .or(this.page.getByTestId('play-configuration-configure-scenario-button'))
1210
+ .or(this.page.getByRole('button', {
1211
+ name: /^Configure (test case|scenario)$/,
1212
+ }))
1213
+ .first();
1158
1214
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1159
1215
  // button to appear. Using .or() avoids separate sequential timeouts that would
1160
1216
  // both expire before the page finishes loading on a slow cluster.
@@ -1049,10 +1049,20 @@ class ModelerCreatePage {
1049
1049
  .getByText('Deploy process')
1050
1050
  .locator('..')
1051
1051
  .getByRole('button', { name: 'Deploy' });
1052
- // Keyed on the test id, not the label: the button reads "Configure test
1053
- // case" since camunda-hub a90fd06 and "Configure scenario" before it, while
1054
- // the test id kept its original wording across the rename.
1055
- const configureScenarioButton = this.page.getByTestId('play-configuration-configure-scenario-button');
1052
+ // Both attributes on this button have been renamed by camunda-hub, in
1053
+ // separate commits: a90fd06 changed the label from "Configure scenario" to
1054
+ // "Configure test case", and b3958a1649 (#27259, 2026-08-07) then changed
1055
+ // the test id from `play-configuration-configure-scenario-button` to
1056
+ // `configure-test-case-button`. Match current test id, then pre-rename test
1057
+ // id, then either label, so a further rename of any single attribute cannot
1058
+ // break the step.
1059
+ const configureScenarioButton = this.page
1060
+ .getByTestId('configure-test-case-button')
1061
+ .or(this.page.getByTestId('play-configuration-configure-scenario-button'))
1062
+ .or(this.page.getByRole('button', {
1063
+ name: /^Configure (test case|scenario)$/,
1064
+ }))
1065
+ .first();
1056
1066
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1057
1067
  // button to appear.
1058
1068
  const setupOrContinue = setupDeployButton.or(this.continueToPlayButton);
@@ -1198,10 +1198,20 @@ class ModelerCreatePage {
1198
1198
  .getByText('Deploy process')
1199
1199
  .locator('..')
1200
1200
  .getByRole('button', { name: 'Deploy' });
1201
- // Keyed on the test id, not the label: the button reads "Configure test
1202
- // case" since camunda-hub a90fd06 and "Configure scenario" before it, while
1203
- // the test id kept its original wording across the rename.
1204
- const configureScenarioButton = this.page.getByTestId('play-configuration-configure-scenario-button');
1201
+ // Both attributes on this button have been renamed by camunda-hub, in
1202
+ // separate commits: a90fd06 changed the label from "Configure scenario" to
1203
+ // "Configure test case", and b3958a1649 (#27259, 2026-08-07) then changed
1204
+ // the test id from `play-configuration-configure-scenario-button` to
1205
+ // `configure-test-case-button`. Match current test id, then pre-rename test
1206
+ // id, then either label, so a further rename of any single attribute cannot
1207
+ // break the step.
1208
+ const configureScenarioButton = this.page
1209
+ .getByTestId('configure-test-case-button')
1210
+ .or(this.page.getByTestId('play-configuration-configure-scenario-button'))
1211
+ .or(this.page.getByRole('button', {
1212
+ name: /^Configure (test case|scenario)$/,
1213
+ }))
1214
+ .first();
1205
1215
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1206
1216
  // button to appear. Using .or() avoids separate sequential timeouts that would
1207
1217
  // both expire before the page finishes loading on a slow cluster.
@@ -1146,15 +1146,19 @@ class ModelerCreatePage {
1146
1146
  .getByText('Deploy process')
1147
1147
  .locator('..')
1148
1148
  .getByRole('button', { name: 'Deploy' });
1149
- // The button reads "Configure test case" since camunda-hub a90fd06 and
1150
- // "Configure scenario" before it. camunda-hub b3958a1649 then renamed its
1151
- // test id from `play-configuration-configure-scenario-button` to
1152
- // `configure-test-case-button` (see
1153
- // TestMode/ConfigurationOverlay/index.tsx). Accept the pre-rename test id
1154
- // too so the page object works either side of the rename.
1149
+ // Both attributes on this button have been renamed by camunda-hub, in
1150
+ // separate commits: a90fd06 changed the label from "Configure scenario" to
1151
+ // "Configure test case", and b3958a1649 (#27259, 2026-08-07) then changed
1152
+ // the test id from `play-configuration-configure-scenario-button` to
1153
+ // `configure-test-case-button`. Match current test id, then pre-rename test
1154
+ // id, then either label, so a further rename of any single attribute cannot
1155
+ // break the step.
1155
1156
  const configureScenarioButton = this.page
1156
1157
  .getByTestId('configure-test-case-button')
1157
1158
  .or(this.page.getByTestId('play-configuration-configure-scenario-button'))
1159
+ .or(this.page.getByRole('button', {
1160
+ name: /^Configure (test case|scenario)$/,
1161
+ }))
1158
1162
  .first();
1159
1163
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1160
1164
  // button to appear. Using .or() avoids separate sequential timeouts that would
@@ -890,13 +890,19 @@ class ModelerCreatePage {
890
890
  .getByText('Deploy process')
891
891
  .locator('..')
892
892
  .getByRole('button', { name: 'Deploy' });
893
- // camunda-hub a90fd06 renamed this step to "Configure test case" AND
894
- // renamed its test id to `configure-test-case-button` (see
895
- // TestMode/ConfigurationOverlay/index.tsx). Accept the pre-rename test id
896
- // too so the page object works either side of the rename.
893
+ // Both attributes on this button have been renamed by camunda-hub, in
894
+ // separate commits: a90fd06 changed the label from "Configure scenario" to
895
+ // "Configure test case", and b3958a1649 (#27259, 2026-08-07) then changed
896
+ // the test id from `play-configuration-configure-scenario-button` to
897
+ // `configure-test-case-button`. Match current test id, then pre-rename test
898
+ // id, then either label, so a further rename of any single attribute cannot
899
+ // break the step.
897
900
  const configureScenarioButton = this.page
898
901
  .getByTestId('configure-test-case-button')
899
902
  .or(this.page.getByTestId('play-configuration-configure-scenario-button'))
903
+ .or(this.page.getByRole('button', {
904
+ name: /^Configure (test case|scenario)$/,
905
+ }))
900
906
  .first();
901
907
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
902
908
  // button to appear. Using .or() avoids separate sequential timeouts that would
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.922",
3
+ "version": "0.0.924",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",