@camunda/e2e-test-suite 0.0.1263 → 0.0.1265

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.
@@ -286,8 +286,13 @@ class Authorization {
286
286
  console.warn(`Attempt ${attempt + 1} did not list the ` +
287
287
  `${authorization.resourceType} authorization for ` +
288
288
  `"${authorization.ownerId}". Retrying...`);
289
- await this.page.reload();
290
- await this.page.waitForLoadState('domcontentloaded');
289
+ // A refused/reset connection while the gateway restarts must feed
290
+ // the next attempt, not abort the retry loop.
291
+ await this.page
292
+ .reload({ waitUntil: 'domcontentloaded' })
293
+ .catch((reloadError) => {
294
+ lastError = reloadError;
295
+ });
291
296
  }
292
297
  }
293
298
  }
@@ -123,9 +123,16 @@ class ManagementIdentityPage {
123
123
  .map((c) => `"${c}"`)
124
124
  .join(' or ')} was found. The role may already be removed, or its ` +
125
125
  `label may have changed in this version.`).toBeVisible({ timeout: 60000 });
126
+ // Click the Delete control inside the matched role's own table row. A
127
+ // `td:right-of(:text(...))` spatial match resolves to a neighbouring row's
128
+ // button once the roles table carries rows before the target (Orchestration
129
+ // is ordered above Hub), so it removed the wrong role and left the intended
130
+ // one still assigned.
126
131
  await this.page
127
- .locator(candidates.map((c) => `td:right-of(:text("${c}"))`).join(', '))
132
+ .locator('tr')
133
+ .filter({ has: this.page.locator(rowSelector) })
128
134
  .first()
135
+ .getByRole('button', { name: 'Delete' })
129
136
  .click({ timeout: 60000 });
130
137
  }
131
138
  async clickConfirmDeleteButton() {
@@ -32,7 +32,11 @@ class KeycloakLoginPage {
32
32
  }
33
33
  }
34
34
  async clickLogin() {
35
- await this.page.click('button[type="submit"]');
35
+ // Submitting the Keycloak form starts a redirect chain that page.click
36
+ // implicitly waits on ("waiting for scheduled navigations to finish"), so
37
+ // the action inherits the 10s actionTimeout to cover a navigation. Give it
38
+ // the navigation budget the rest of the suite uses instead.
39
+ await this.page.click('button[type="submit"]', { timeout: 60000 });
36
40
  }
37
41
  }
38
42
  exports.KeycloakLoginPage = KeycloakLoginPage;
@@ -31,10 +31,10 @@ class OptimizeHomePage {
31
31
  await this.modalCloseButton.click({ timeout: 60000 });
32
32
  }
33
33
  async clickCollectionsLink() {
34
- await this.collectionsLink.click({ timeout: 1000 });
34
+ await this.collectionsLink.click({ timeout: 60000 });
35
35
  }
36
36
  async clickDashboardLink() {
37
- await this.dashboardLink.click({ timeout: 1000 });
37
+ await this.dashboardLink.click({ timeout: 60000 });
38
38
  }
39
39
  async assertProcessHasBeenImported(processId) {
40
40
  await this.clickDashboardLink();
@@ -0,0 +1,6 @@
1
+ import { Page } from '@playwright/test';
2
+ import { ModelerHomePage } from '../SM-8.10/ModelerHomePage';
3
+ declare class TopologyModelerHomePage extends ModelerHomePage {
4
+ constructor(page: Page);
5
+ }
6
+ export { TopologyModelerHomePage };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TopologyModelerHomePage = void 0;
4
+ const ModelerHomePage_1 = require("../SM-8.10/ModelerHomePage");
5
+ // The topology golden path runs against a mixed-version Hub: an 8.7 chart with
6
+ // the Web Modeler image built from the branch under test. That legacy Modeler
7
+ // has no Workspaces feature, and its Koa server serves an allowlist of client
8
+ // routes only, so a full-page load of the unrouted `/modeler/workspaces` falls
9
+ // through to a hard server 404 whose StaticPages/ErrorPage renders "Not Found".
10
+ // The shared SM-8.10 page object's flag-off detection matches only the Design
11
+ // System SPA's in-app router 404 ("no match for the current location"), so on
12
+ // 8.7 it never recognises the route as absent and its legacy fallback never
13
+ // engages. Widen the signal to also match the legacy hard 404 so
14
+ // ensureWorkspaceOpen falls through to the projects flow on this deployment.
15
+ // Scoped to SM-8.7: the shared object is left untouched for the passing 8.8/8.10
16
+ // consumers (see camunda/c8-cross-component-e2e-tests#3687 for the same fix in
17
+ // the shared object for the SM-8.8 topology spec).
18
+ class TopologyModelerHomePage extends ModelerHomePage_1.ModelerHomePage {
19
+ constructor(page) {
20
+ super(page);
21
+ this.noRouteMatchMessage = page
22
+ .getByText(/no match for the current location/i)
23
+ .or(page.getByText('Not Found', { exact: true }))
24
+ .first();
25
+ }
26
+ }
27
+ exports.TopologyModelerHomePage = TopologyModelerHomePage;
@@ -5,7 +5,18 @@ const SM_8_10_1 = require("../../fixtures/SM-8.10");
5
5
  const _setup_1 = require("../../test-setup.js");
6
6
  const UtilitiesPage_1 = require("../../pages/SM-8.10/UtilitiesPage");
7
7
  const sleep_1 = require("../../utils/sleep");
8
- SM_8_10_1.test.describe.configure({ mode: 'parallel' });
8
+ // Serial: the two active webhook tests both fall back to importing the
9
+ // "Webhook Connector" marketplace package (which bundles the Boundary,
10
+ // Intermediate and Message-Start template variants) when the template is not
11
+ // already revealed in the change-element popup. Connector element-template IDs
12
+ // are unique per Workspace, and both tests create their own project inside the
13
+ // same shared "Cross Component Test Project" Workspace, so importing the same
14
+ // package concurrently makes the second import fail with HTTP 400
15
+ // "Template ID already in use" (surfaced as the marketplace "Try again" state).
16
+ // Running them serially lets the first import register the templates
17
+ // Workspace-wide; the second test then reveals them directly and skips the
18
+ // import, so there is no collision.
19
+ SM_8_10_1.test.describe.configure({ mode: 'serial' });
9
20
  SM_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
10
21
  const mtTenant = process.env.IS_MT === 'true' ? '<default>' : '';
11
22
  SM_8_10_1.test.beforeEach(async ({ navigationPage }, testInfo) => {
@@ -245,6 +245,7 @@ if (node_process_1.default.env.IS_RBA === 'true') {
245
245
  });
246
246
  await SM_8_10_1.test.step('Open Cross Component Test Project', async () => {
247
247
  await modelerHomePage.createCrossComponentProjectFolder(credentials);
248
+ await modelerHomePage.assignWorkspaceEnvironmentAsOrgAdmin(browser);
248
249
  });
249
250
  await SM_8_10_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
250
251
  await (0, UtilitiesPage_1.runMultipleProcesses)(page, modelerHomePage, modelerCreatePage, 2, processName, processName);
@@ -536,6 +537,7 @@ if (node_process_1.default.env.IS_RBA === 'true') {
536
537
  });
537
538
  await SM_8_10_1.test.step('Open Cross Component Test Project', async () => {
538
539
  await modelerHomePage.createCrossComponentProjectFolder(credentials);
540
+ await modelerHomePage.assignWorkspaceEnvironmentAsOrgAdmin(browser);
539
541
  });
540
542
  await SM_8_10_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
541
543
  await (0, UtilitiesPage_1.runMultipleProcesses)(page, modelerHomePage, modelerCreatePage, 2, processName, processName);
@@ -660,6 +662,7 @@ if (node_process_1.default.env.IS_RBA === 'true') {
660
662
  });
661
663
  await SM_8_10_1.test.step('Open Cross Component Test Project', async () => {
662
664
  await modelerHomePage.createCrossComponentProjectFolder(credentials);
665
+ await modelerHomePage.assignWorkspaceEnvironmentAsOrgAdmin(browser);
663
666
  });
664
667
  await SM_8_10_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
665
668
  await (0, UtilitiesPage_1.runMultipleProcesses)(page, modelerHomePage, modelerCreatePage, 2, processName, processName);
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const test_1 = require("@playwright/test");
4
4
  const SM_8_7_1 = require("../../fixtures/SM-8.7");
5
5
  const ModelerCreatePage_1 = require("../../pages/SM-8.10/ModelerCreatePage");
6
- const ModelerHomePage_1 = require("../../pages/SM-8.10/ModelerHomePage");
7
6
  const NavigationPage_1 = require("../../pages/SM-8.10/NavigationPage");
8
7
  const KeycloakUtils_1 = require("../../pages/SM-8.7/KeycloakUtils");
8
+ const TopologyModelerHomePage_1 = require("../../pages/SM-8.7/TopologyModelerHomePage");
9
9
  const UtlitiesPage_1 = require("../../pages/SM-8.7/UtlitiesPage");
10
10
  const _setup_1 = require("../../test-setup.js");
11
11
  const env_1 = require("../../utils/env");
@@ -17,7 +17,7 @@ SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
17
17
  SM_8_7_1.test.slow();
18
18
  const processName = `Topology_Orchestration_${await (0, _setup_1.generateRandomStringAsync)(5)}`;
19
19
  const hubNavigationPage = new NavigationPage_1.NavigationPage(page);
20
- const modelerHomePage = new ModelerHomePage_1.ModelerHomePage(page);
20
+ const modelerHomePage = new TopologyModelerHomePage_1.TopologyModelerHomePage(page);
21
21
  const modelerCreatePage = new ModelerCreatePage_1.ModelerCreatePage(page);
22
22
  (0, KeycloakUtils_1.setAdminUserCredentials)(navigationPage);
23
23
  await SM_8_7_1.test.step('Create and start a process in Web Modeler', async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1263",
3
+ "version": "0.0.1265",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",