@camunda/e2e-test-suite 0.0.893 → 0.0.895

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++) {
@@ -103,28 +103,41 @@ class ModelerHomePage {
103
103
  });
104
104
  }
105
105
  async enterNewProjectName(name) {
106
- for (let attempt = 0; attempt < 3; attempt++) {
107
- try {
108
- await (0, test_1.expect)(this.projectNameInput.first()).toBeVisible({
109
- timeout: 90000,
110
- });
111
- await this.projectNameInput
112
- .first()
113
- .click({ timeout: 60000, force: true });
114
- await this.projectNameInput.first().fill(name);
115
- await this.projectNameInput.first().press('Enter');
106
+ // The inline rename silently drops the value when the editable title field
107
+ // is not yet in edit mode as fill() runs, leaving the project named
108
+ // "New project". Re-enter until the field reflects the requested name.
109
+ //
110
+ // Once the rename commits, the editable input unmounts and the name
111
+ // renders as static text: on the projects list as a `[title="<name>"]`
112
+ // link, and on the project detail page (where this inline rename runs) as
113
+ // the breadcrumb project button's text. Treat either committed-name
114
+ // rendering as success, and confirm it reflects the PERSISTED state (the
115
+ // breadcrumb can optimistically show the typed name then revert to
116
+ // "New project"), so verify after a reload.
117
+ const committedProjectName = this.page
118
+ .getByTitle(name, { exact: true })
119
+ .or(this.page
120
+ .locator('[data-test="breadcrumb-project-menu"]')
121
+ .filter({ hasText: name }));
122
+ await (0, test_1.expect)(async () => {
123
+ if (await committedProjectName.first().isVisible()) {
116
124
  return;
117
125
  }
118
- catch (error) {
119
- if (attempt >= 2) {
120
- throw error;
121
- }
122
- await this.dismissOverlays();
123
- await this.page.reload({ waitUntil: 'domcontentloaded' });
124
- await this.page.waitForLoadState('domcontentloaded');
125
- await this.clickCreateNewProjectButton();
126
- }
127
- }
126
+ await this.projectNameInput.first().click({ timeout: 15000 });
127
+ await this.projectNameInput.first().fill(name);
128
+ // Confirm the value actually landed in the edit field before committing;
129
+ // if fill() ran before edit mode was active the input stays empty/default
130
+ // and this fails, so toPass retries with a fresh click.
131
+ await (0, test_1.expect)(this.projectNameInput.first()).toHaveValue(name, {
132
+ timeout: 5000,
133
+ });
134
+ await this.projectNameInput.first().press('Enter');
135
+ await (0, sleep_1.sleep)(1000);
136
+ // Reload so the check reflects the PERSISTED server state, not the
137
+ // optimistic client render that can silently revert to "New project".
138
+ await this.page.reload();
139
+ await (0, test_1.expect)(committedProjectName.first()).toBeVisible({ timeout: 15000 });
140
+ }).toPass({ timeout: 120000 });
128
141
  }
129
142
  async enterIdpApplicationName(name) {
130
143
  await this.idpApplicationNameInput.click({ timeout: 60000 });
@@ -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;
@@ -35,7 +35,7 @@ _8_8_1.test.describe('User Roles User Flow', () => {
35
35
  await (0, _setup_1.captureScreenshot)(page, testInfo);
36
36
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
37
37
  });
38
- //Skipped due to bug 39350: https://github.com/camunda/camunda/issues/39350
38
+ // Skipped due to bug #58514: https://github.com/camunda/camunda/issues/58514
39
39
  _8_8_1.test.skip('Modeler Role User Flow', async ({ page, modelerHomePage, appsPage, homePage, clusterPage, clusterDetailsPage, context, consoleOrganizationsPage, settingsPage, operateHomePage, ocIdentityHomePage, taskPanelPage, optimizeHomePage, modelerCreatePage, }) => {
40
40
  const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
41
41
  const processName = 'User Roles User Flow' + randomString;
@@ -405,7 +405,6 @@ _8_8_1.test.describe('Web Modeler User Flow Tests', () => {
405
405
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(operateProcessInstancePage, operateProcessInstancePage.completedIcon, 'Completed icon', 60000, false, 5);
406
406
  });
407
407
  });
408
- //Skipped due to bug 22577: https://github.com/camunda/camunda-hub/issues/22577
409
408
  (0, _8_8_1.test)('Public Start Form @tasklistV1', async ({ page, homePage, modelerHomePage, appsPage, modelerCreatePage, formJsPage, taskDetailsPage, taskPanelPage, operateHomePage, operateProcessesPage, operateProcessInstancePage, browser, }) => {
410
409
  const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
411
410
  const processName = 'User_Task_Process_With_Public_Form' + randomString;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.893",
3
+ "version": "0.0.895",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",