@camunda/e2e-test-suite 0.0.894 → 0.0.896

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.
@@ -48,6 +48,20 @@ declare class ModelerHomePage {
48
48
  clickOpenOrganizationsButton(): Promise<void>;
49
49
  clickCrossComponentProjectFolder(): Promise<void>;
50
50
  createCrossComponentProjectFolder(): Promise<void>;
51
+ /**
52
+ * Asserts the Cross Component project folder is listed on the Modeler home
53
+ * page.
54
+ *
55
+ * A freshly created project is renamed in place (`POST /projects` then
56
+ * `PATCH /projects/<id>`), but the home page renders from the project list
57
+ * that was fetched at creation time — i.e. before the rename landed — and
58
+ * clicking the Home breadcrumb is client-side routing that does not
59
+ * re-fetch it. The row therefore keeps showing the placeholder
60
+ * "New project" name indefinitely, so a plain visibility wait can never
61
+ * resolve however long it is given. Reload between attempts so the
62
+ * assertion sees the committed name.
63
+ */
64
+ assertCrossComponentProjectFolderVisible(): Promise<void>;
51
65
  clickManageButton(retries?: number): Promise<void>;
52
66
  clickUploadFilesButton(): Promise<void>;
53
67
  clickMessageBanner(): Promise<void>;
@@ -4,6 +4,7 @@ exports.ModelerHomePage = void 0;
4
4
  const test_1 = require("@playwright/test");
5
5
  const sleep_1 = require("../../utils/sleep");
6
6
  const clickLocatorWithRetry_1 = require("../../utils/assertionHelpers/clickLocatorWithRetry");
7
+ const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
7
8
  class ModelerHomePage {
8
9
  defaultFolderName = 'Cross Component Test Project';
9
10
  page;
@@ -227,6 +228,30 @@ class ModelerHomePage {
227
228
  await this.clickCreateNewProjectButton();
228
229
  await this.enterNewProjectName(this.defaultFolderName);
229
230
  }
231
+ /**
232
+ * Asserts the Cross Component project folder is listed on the Modeler home
233
+ * page.
234
+ *
235
+ * A freshly created project is renamed in place (`POST /projects` then
236
+ * `PATCH /projects/<id>`), but the home page renders from the project list
237
+ * that was fetched at creation time — i.e. before the rename landed — and
238
+ * clicking the Home breadcrumb is client-side routing that does not
239
+ * re-fetch it. The row therefore keeps showing the placeholder
240
+ * "New project" name indefinitely, so a plain visibility wait can never
241
+ * resolve however long it is given. Reload between attempts so the
242
+ * assertion sees the committed name.
243
+ */
244
+ async assertCrossComponentProjectFolderVisible() {
245
+ await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.crossComponentProjectFolder, {
246
+ totalTimeout: 120000,
247
+ visibilityTimeout: 20000,
248
+ maxRetries: 4,
249
+ postAction: async () => {
250
+ await this.page.reload();
251
+ await this.dismissOverlays();
252
+ },
253
+ });
254
+ }
230
255
  async clickManageButton(retries = 3) {
231
256
  await this.optionsButton.click({ timeout: 30000 });
232
257
  for (let i = 0; i < retries; i++) {
@@ -164,11 +164,14 @@ class ModelerCreatePage {
164
164
  this.clientIdTextbox = page.getByLabel('Client ID');
165
165
  this.clientSecretTextbox = page.getByLabel('Client secret');
166
166
  this.rememberCredentialsCheckbox = page.getByText('Remember credentials');
167
+ // Marketplace "Save as copy" imports leave extra copies of the same
168
+ // connector template in the shared project, each rendered as another
169
+ // identically-named popup entry but carrying a generated `Template_<id>`.
170
+ // A name query matches every copy and throws in strict mode, so target the
171
+ // canonical marketplace template by its stable entry id instead.
167
172
  this.webhookMessageStartEventConnectorOption = page
168
173
  .locator('.djs-popup-results')
169
- .getByRole('option', {
170
- name: 'Webhook Message Start Event Connector',
171
- });
174
+ .locator('[data-id="replace.template-io.camunda.connectors.webhook.WebhookConnectorStartMessage.v1"]');
172
175
  this.webhookIdInput = page.getByLabel('Webhook ID');
173
176
  this.firstElement = page.locator('.djs-element.djs-shape').nth(0);
174
177
  this.secondElement = page.locator('.djs-element.djs-shape').nth(1);
@@ -176,7 +179,11 @@ class ModelerCreatePage {
176
179
  this.implementationSection = page.locator('[data-group-id="group-userTaskImplementation"]');
177
180
  this.implementationOptions = page.locator('#bio-properties-panel-userTaskImplementation');
178
181
  this.assignmentSection = page.locator('[data-group-id="group-assignmentDefinition"]');
179
- this.priorityInput = page.getByRole('textbox', { name: 'priority' });
182
+ // The user-task priority field renders as `<input type="number">`, whose
183
+ // ARIA role is `spinbutton`, not `textbox`. Its id is also what separates it
184
+ // from the "Job priority" group's `jobPriorityDefinitionPriority` field,
185
+ // which any name-based query matches as well.
186
+ this.priorityInput = page.locator('#bio-properties-panel-priorityDefinitionPriority');
180
187
  this.appendElementButton = page
181
188
  .locator('[class="djs-context-pad open"]')
182
189
  .first();
@@ -196,9 +203,7 @@ class ModelerCreatePage {
196
203
  });
197
204
  this.intermediateWebhookConnectorOption = page
198
205
  .locator('.djs-popup-results')
199
- .getByRole('option', {
200
- name: 'Webhook Intermediate Event Connector',
201
- });
206
+ .locator('[data-id="replace.template-io.camunda.connectors.webhook.WebhookConnectorIntermediate.v1"]');
202
207
  this.correlationKeyPayloadInput = page.getByLabel('Correlation key (payload)');
203
208
  this.correlationKeyProcessInput = page.getByLabel('Correlation key (process)');
204
209
  this.playTab = page.getByRole('tab', {
@@ -1003,10 +1008,12 @@ class ModelerCreatePage {
1003
1008
  }
1004
1009
  async expandAssignmentSection() {
1005
1010
  const isExpanded = (await this.assignmentSection
1006
- .locator('[data-group-id="group-assignmentDefinition"] .bio-properties-panel-group-header.open')
1011
+ .locator('.bio-properties-panel-group-header.open')
1007
1012
  .count()) > 0;
1008
1013
  if (!isExpanded) {
1009
- await this.assignmentSection.click({ timeout: 60000 });
1014
+ await this.assignmentSection
1015
+ .locator('.bio-properties-panel-group-header')
1016
+ .click({ timeout: 60000 });
1010
1017
  }
1011
1018
  }
1012
1019
  async clickAppendElementButton() {
@@ -1035,7 +1042,7 @@ class ModelerCreatePage {
1035
1042
  await this.priorityInput.click();
1036
1043
  }
1037
1044
  catch (error) {
1038
- await this.assignmentSection.click({ timeout: 60000 });
1045
+ await this.expandAssignmentSection();
1039
1046
  await this.priorityInput.click({ timeout: 60000 });
1040
1047
  }
1041
1048
  }
@@ -75,9 +75,7 @@ _8_7_1.test.describe('Cluster Setup Tests', () => {
75
75
  await homePage.clickSkipCustomization();
76
76
  await modelerHomePage.createCrossComponentProjectFolder();
77
77
  await modelerHomePage.clickHomeBreadcrumb();
78
- await (0, test_1.expect)(modelerHomePage.crossComponentProjectFolder).toBeVisible({
79
- timeout: 60000,
80
- });
78
+ await modelerHomePage.assertCrossComponentProjectFolderVisible();
81
79
  });
82
80
  });
83
81
  }
@@ -419,7 +419,8 @@ _8_7_1.test.describe('Web Modeler User Flow Tests', () => {
419
419
  await (0, UtilitiesPage_1.assertPageTextWithRetry)(page, emailAddress, false, 60000);
420
420
  });
421
421
  });
422
- (0, _8_7_1.test)('Invite Existing C8 member to Web Modeler flow', async ({ page, loginPage, signUpPage, homePage, modelerUserInvitePage, appsPage, modelerHomePage, settingsPage, }, testInfo) => {
422
+ // Skipped due to bug #4677: https://github.com/camunda/web-modeler/issues/4677
423
+ _8_7_1.test.skip('Invite Existing C8 member to Web Modeler flow', async ({ page, loginPage, signUpPage, homePage, modelerUserInvitePage, appsPage, modelerHomePage, settingsPage, }, testInfo) => {
423
424
  _8_7_1.test.slow();
424
425
  const { id, emailAddress } = await (0, mailSlurpClient_1.createInbox)();
425
426
  inboxes[testInfo.title] = id;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.894",
3
+ "version": "0.0.896",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",