@camunda/e2e-test-suite 0.0.903 → 0.0.905

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.
@@ -204,6 +204,7 @@ declare class ModelerCreatePage {
204
204
  clickTaskDefinitionPropertiesPanel(): Promise<void>;
205
205
  clickJobTypeInput(): Promise<void>;
206
206
  fillJobTypeInput(name: string): Promise<void>;
207
+ private suppressTestModeAnnouncement;
207
208
  switchToPlay(): Promise<void>;
208
209
  completePlayConfiguration(clusterName: string): Promise<void>;
209
210
  embedForm(formName: string): Promise<void>;
@@ -256,9 +256,14 @@ class ModelerCreatePage {
256
256
  this.serviceTaskOption = page.locator('.djs-popup-results [data-id="replace-with-service-task"]');
257
257
  this.taskDefinitionPanel = page.locator('[data-group-id="group-taskDefinition"]');
258
258
  this.jobTypeInput = page.getByRole('textbox', { name: /job type/i });
259
- this.playTab = page.getByRole('tab', {
260
- name: 'Play',
261
- });
259
+ // Modeler renamed the third mode tab "Play" -> "Test" (camunda-hub
260
+ // a90fd06). Accept either label; the "Test" branch is scoped to the modes
261
+ // tablist because the details panel also renders a tab named "Test".
262
+ this.playTab = page
263
+ .getByRole('tab', { name: 'Play' })
264
+ .or(page
265
+ .getByRole('tablist', { name: 'List of modes' })
266
+ .getByRole('tab', { name: 'Test', exact: true }));
262
267
  this.continueToPlayButton = page.getByRole('button', { name: 'Continue' });
263
268
  this.assignmentSection = page.locator('[data-group-id="group-assignmentDefinition"]');
264
269
  this.assigneeInput = page.getByRole('textbox', { name: 'assignee' });
@@ -1124,7 +1129,16 @@ class ModelerCreatePage {
1124
1129
  async fillJobTypeInput(name) {
1125
1130
  await this.jobTypeInput.fill(name);
1126
1131
  }
1132
+ // Test mode mounts a one-time "A new way to test your processes" modal
1133
+ // (camunda-hub TestAnnouncementModal) that covers the setup steps behind it.
1134
+ // It renders unless localStorage already carries the seen flag, which it
1135
+ // reads on mount; a fresh Playwright context always starts empty, so set the
1136
+ // flag before entering Test mode rather than clicking the modal away.
1137
+ async suppressTestModeAnnouncement() {
1138
+ await this.page.evaluate(() => localStorage.setItem('play-testAnnouncementSeen', 'true'));
1139
+ }
1127
1140
  async switchToPlay() {
1141
+ await this.suppressTestModeAnnouncement();
1128
1142
  await this.playTab.click();
1129
1143
  }
1130
1144
  async completePlayConfiguration(clusterName) {
@@ -1132,14 +1146,15 @@ class ModelerCreatePage {
1132
1146
  // New flow (8.10+): "Setup environment" panel with three steps:
1133
1147
  // 1. Connect cluster → "Configure environment" modal → select cluster → Save
1134
1148
  // 2. Deploy process → wait for success banner
1135
- // 3. Configure scenario
1149
+ // 3. Configure test case
1136
1150
  const setupDeployButton = this.page
1137
1151
  .getByText('Deploy process')
1138
1152
  .locator('..')
1139
1153
  .getByRole('button', { name: 'Deploy' });
1140
- const configureScenarioButton = this.page.getByRole('button', {
1141
- name: 'Configure scenario',
1142
- });
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');
1143
1158
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1144
1159
  // button to appear. Using .or() avoids separate sequential timeouts that would
1145
1160
  // both expire before the page finishes loading on a slow cluster.
@@ -198,6 +198,7 @@ declare class ModelerCreatePage {
198
198
  clickTaskDefinitionPropertiesPanel(): Promise<void>;
199
199
  clickJobTypeInput(): Promise<void>;
200
200
  fillJobTypeInput(name: string): Promise<void>;
201
+ private suppressTestModeAnnouncement;
201
202
  switchToPlay(): Promise<void>;
202
203
  completePlayConfiguration(clusterName: string): Promise<void>;
203
204
  selectCluster(clusterName: string): Promise<void>;
@@ -223,9 +223,14 @@ class ModelerCreatePage {
223
223
  this.serviceTaskOption = page.locator('.djs-popup-results [data-id="replace-with-service-task"]');
224
224
  this.taskDefinitionPanel = page.locator('[data-group-id="group-taskDefinition"]');
225
225
  this.jobTypeInput = page.getByRole('textbox', { name: /job type/i });
226
- this.playTab = page.getByRole('tab', {
227
- name: 'Play',
228
- });
226
+ // Modeler renamed the third mode tab "Play" -> "Test" (camunda-hub
227
+ // a90fd06). Accept either label; the "Test" branch is scoped to the modes
228
+ // tablist because the details panel also renders a tab named "Test".
229
+ this.playTab = page
230
+ .getByRole('tab', { name: 'Play' })
231
+ .or(page
232
+ .getByRole('tablist', { name: 'List of modes' })
233
+ .getByRole('tab', { name: 'Test', exact: true }));
229
234
  this.continueToPlayButton = page.getByRole('button', { name: 'Continue' });
230
235
  this.assignmentSection = page.locator('[data-group-id="group-assignmentDefinition"]');
231
236
  this.assigneeInput = page.getByRole('textbox', { name: 'assignee' });
@@ -1022,7 +1027,16 @@ class ModelerCreatePage {
1022
1027
  async fillJobTypeInput(name) {
1023
1028
  await this.jobTypeInput.fill(name);
1024
1029
  }
1030
+ // Test mode mounts a one-time "A new way to test your processes" modal
1031
+ // (camunda-hub TestAnnouncementModal) that covers the setup steps behind it.
1032
+ // It renders unless localStorage already carries the seen flag, which it
1033
+ // reads on mount; a fresh Playwright context always starts empty, so set the
1034
+ // flag before entering Test mode rather than clicking the modal away.
1035
+ async suppressTestModeAnnouncement() {
1036
+ await this.page.evaluate(() => localStorage.setItem('play-testAnnouncementSeen', 'true'));
1037
+ }
1025
1038
  async switchToPlay() {
1039
+ await this.suppressTestModeAnnouncement();
1026
1040
  await this.playTab.click();
1027
1041
  }
1028
1042
  async completePlayConfiguration(clusterName) {
@@ -1030,14 +1044,15 @@ class ModelerCreatePage {
1030
1044
  // New flow (8.10+): "Setup environment" panel with three steps:
1031
1045
  // 1. Connect cluster → "Configure environment" modal → select cluster → Save
1032
1046
  // 2. Deploy process → wait for success banner
1033
- // 3. Configure scenario
1047
+ // 3. Configure test case
1034
1048
  const setupDeployButton = this.page
1035
1049
  .getByText('Deploy process')
1036
1050
  .locator('..')
1037
1051
  .getByRole('button', { name: 'Deploy' });
1038
- const configureScenarioButton = this.page.getByRole('button', {
1039
- name: 'Configure scenario',
1040
- });
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');
1041
1056
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1042
1057
  // button to appear.
1043
1058
  const setupOrContinue = setupDeployButton.or(this.continueToPlayButton);
@@ -15,7 +15,14 @@ class PlayPage {
15
15
  constructor(page) {
16
16
  this.page = page;
17
17
  this.diagram = page.getByTestId('diagram');
18
- this.playTab = page.getByRole('tab', { name: 'Play' });
18
+ // Modeler renamed the third mode tab "Play" -> "Test" (camunda-hub
19
+ // a90fd06). Accept either label; the "Test" branch is scoped to the modes
20
+ // tablist because the details panel also renders a tab named "Test".
21
+ this.playTab = page
22
+ .getByRole('tab', { name: 'Play' })
23
+ .or(page
24
+ .getByRole('tablist', { name: 'List of modes' })
25
+ .getByRole('tab', { name: 'Test', exact: true }));
19
26
  this.completeJobButton = this.diagram.getByLabel('Complete job');
20
27
  // Newer Modeler Play UI: the "Configure Scenario" floating card hosts a
21
28
  // primary "Start" Carbon button (variants: "Start", "Start with
@@ -203,6 +203,7 @@ declare class ModelerCreatePage {
203
203
  clickTaskDefinitionPropertiesPanel(): Promise<void>;
204
204
  clickJobTypeInput(): Promise<void>;
205
205
  fillJobTypeInput(name: string): Promise<void>;
206
+ private suppressTestModeAnnouncement;
206
207
  switchToPlay(): Promise<void>;
207
208
  completePlayConfiguration(clusterName: string): Promise<void>;
208
209
  embedForm(formName: string): Promise<void>;
@@ -255,9 +255,14 @@ class ModelerCreatePage {
255
255
  this.serviceTaskOption = page.locator('.djs-popup-results [data-id="replace-with-service-task"]');
256
256
  this.taskDefinitionPanel = page.locator('[data-group-id="group-taskDefinition"]');
257
257
  this.jobTypeInput = page.getByRole('textbox', { name: /job type/i });
258
- this.playTab = page.getByRole('tab', {
259
- name: 'Play',
260
- });
258
+ // Modeler renamed the third mode tab "Play" -> "Test" (camunda-hub
259
+ // a90fd06). Accept either label; the "Test" branch is scoped to the modes
260
+ // tablist because the details panel also renders a tab named "Test".
261
+ this.playTab = page
262
+ .getByRole('tab', { name: 'Play' })
263
+ .or(page
264
+ .getByRole('tablist', { name: 'List of modes' })
265
+ .getByRole('tab', { name: 'Test', exact: true }));
261
266
  this.continueToPlayButton = page.getByRole('button', { name: 'Continue' });
262
267
  this.assignmentSection = page.locator('[data-group-id="group-assignmentDefinition"]');
263
268
  this.assigneeInput = page.getByRole('textbox', { name: 'assignee' });
@@ -1171,7 +1176,16 @@ class ModelerCreatePage {
1171
1176
  async fillJobTypeInput(name) {
1172
1177
  await this.jobTypeInput.fill(name);
1173
1178
  }
1179
+ // Test mode mounts a one-time "A new way to test your processes" modal
1180
+ // (camunda-hub TestAnnouncementModal) that covers the setup steps behind it.
1181
+ // It renders unless localStorage already carries the seen flag, which it
1182
+ // reads on mount; a fresh Playwright context always starts empty, so set the
1183
+ // flag before entering Test mode rather than clicking the modal away.
1184
+ async suppressTestModeAnnouncement() {
1185
+ await this.page.evaluate(() => localStorage.setItem('play-testAnnouncementSeen', 'true'));
1186
+ }
1174
1187
  async switchToPlay() {
1188
+ await this.suppressTestModeAnnouncement();
1175
1189
  await this.playTab.click();
1176
1190
  }
1177
1191
  async completePlayConfiguration(clusterName) {
@@ -1179,14 +1193,15 @@ class ModelerCreatePage {
1179
1193
  // New flow (8.10+): "Setup environment" panel with three steps:
1180
1194
  // 1. Connect cluster → "Configure environment" modal → select cluster → Save
1181
1195
  // 2. Deploy process → wait for success banner
1182
- // 3. Configure scenario
1196
+ // 3. Configure test case
1183
1197
  const setupDeployButton = this.page
1184
1198
  .getByText('Deploy process')
1185
1199
  .locator('..')
1186
1200
  .getByRole('button', { name: 'Deploy' });
1187
- const configureScenarioButton = this.page.getByRole('button', {
1188
- name: 'Configure scenario',
1189
- });
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');
1190
1205
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1191
1206
  // button to appear. Using .or() avoids separate sequential timeouts that would
1192
1207
  // both expire before the page finishes loading on a slow cluster.
@@ -203,6 +203,7 @@ declare class ModelerCreatePage {
203
203
  clickTaskDefinitionPropertiesPanel(): Promise<void>;
204
204
  clickJobTypeInput(): Promise<void>;
205
205
  fillJobTypeInput(name: string): Promise<void>;
206
+ private suppressTestModeAnnouncement;
206
207
  switchToPlay(): Promise<void>;
207
208
  completePlayConfiguration(clusterName: string): Promise<void>;
208
209
  embedForm(formName: string): Promise<void>;
@@ -255,9 +255,14 @@ class ModelerCreatePage {
255
255
  this.serviceTaskOption = page.locator('.djs-popup-results [data-id="replace-with-service-task"]');
256
256
  this.taskDefinitionPanel = page.locator('[data-group-id="group-taskDefinition"]');
257
257
  this.jobTypeInput = page.getByRole('textbox', { name: /job type/i });
258
- this.playTab = page.getByRole('tab', {
259
- name: 'Play',
260
- });
258
+ // Modeler renamed the third mode tab "Play" -> "Test" (camunda-hub
259
+ // a90fd06). Accept either label; the "Test" branch is scoped to the modes
260
+ // tablist because the details panel also renders a tab named "Test".
261
+ this.playTab = page
262
+ .getByRole('tab', { name: 'Play' })
263
+ .or(page
264
+ .getByRole('tablist', { name: 'List of modes' })
265
+ .getByRole('tab', { name: 'Test', exact: true }));
261
266
  this.continueToPlayButton = page.getByRole('button', { name: 'Continue' });
262
267
  this.assignmentSection = page.locator('[data-group-id="group-assignmentDefinition"]');
263
268
  this.assigneeInput = page.getByRole('textbox', { name: 'assignee' });
@@ -1119,7 +1124,16 @@ class ModelerCreatePage {
1119
1124
  async fillJobTypeInput(name) {
1120
1125
  await this.jobTypeInput.fill(name);
1121
1126
  }
1127
+ // Test mode mounts a one-time "A new way to test your processes" modal
1128
+ // (camunda-hub TestAnnouncementModal) that covers the setup steps behind it.
1129
+ // It renders unless localStorage already carries the seen flag, which it
1130
+ // reads on mount; a fresh Playwright context always starts empty, so set the
1131
+ // flag before entering Test mode rather than clicking the modal away.
1132
+ async suppressTestModeAnnouncement() {
1133
+ await this.page.evaluate(() => localStorage.setItem('play-testAnnouncementSeen', 'true'));
1134
+ }
1122
1135
  async switchToPlay() {
1136
+ await this.suppressTestModeAnnouncement();
1123
1137
  await this.playTab.click();
1124
1138
  }
1125
1139
  async completePlayConfiguration(clusterName) {
@@ -1127,14 +1141,15 @@ class ModelerCreatePage {
1127
1141
  // New flow (8.10+): "Setup environment" panel with three steps:
1128
1142
  // 1. Connect cluster → "Configure environment" modal → select cluster → Save
1129
1143
  // 2. Deploy process → wait for success banner
1130
- // 3. Configure scenario
1144
+ // 3. Configure test case
1131
1145
  const setupDeployButton = this.page
1132
1146
  .getByText('Deploy process')
1133
1147
  .locator('..')
1134
1148
  .getByRole('button', { name: 'Deploy' });
1135
- const configureScenarioButton = this.page.getByRole('button', {
1136
- name: 'Configure scenario',
1137
- });
1149
+ // Keyed on the test id, not the label: the button reads "Configure test
1150
+ // case" since camunda-hub a90fd06 and "Configure scenario" before it, while
1151
+ // the test id kept its original wording across the rename.
1152
+ const configureScenarioButton = this.page.getByTestId('play-configuration-configure-scenario-button');
1138
1153
  // Wait up to 15s for EITHER the new-flow setup panel OR the legacy Continue
1139
1154
  // button to appear. Using .or() avoids separate sequential timeouts that would
1140
1155
  // both expire before the page finishes loading on a slow cluster.
@@ -368,6 +368,18 @@ class ModelerCreatePage {
368
368
  await (0, test_1.expect)(this.dialog).toBeVisible({
369
369
  timeout: 30000,
370
370
  });
371
+ const modelerClusterName = process.env.MODELER_CLUSTER_NAME;
372
+ if (modelerClusterName) {
373
+ const clusterSelect = this.dialog.getByRole('combobox', {
374
+ name: 'Select a cluster',
375
+ });
376
+ await clusterSelect.click();
377
+ const escapedClusterName = modelerClusterName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
378
+ await this.dialog
379
+ .getByText(new RegExp(`^${escapedClusterName}(?: \\(|$)`))
380
+ .click();
381
+ await (0, test_1.expect)(clusterSelect).toContainText(modelerClusterName);
382
+ }
371
383
  if (variables.length > 0) {
372
384
  await (0, test_1.expect)(this.variableInput).toBeVisible({
373
385
  timeout: 60000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.903",
3
+ "version": "0.0.905",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",