@camunda/e2e-test-suite 0.0.830 → 0.0.832

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.
@@ -40,6 +40,9 @@ declare class ClusterDetailsPage {
40
40
  readonly orchestrationClusterCheckbox: Locator;
41
41
  readonly clientCredentialsLink: (clientCredentials: string) => Locator;
42
42
  readonly reviewUpdateButton: Locator;
43
+ readonly selectTargetVersionDialog: Locator;
44
+ readonly nextButton: Locator;
45
+ readonly targetVersionOption: (version: string) => Locator;
43
46
  readonly updateAvailableDialog: Locator;
44
47
  readonly updateButton: Locator;
45
48
  readonly mcpSupportToggle: Locator;
@@ -86,7 +89,7 @@ declare class ClusterDetailsPage {
86
89
  assertAlertText(text: string, timeout?: number, maxRetries?: number): Promise<void>;
87
90
  checkOrchestrationClusterCheckbox(): Promise<void>;
88
91
  clickReviewUpdateButton(): Promise<void>;
89
- performClusterUpdate(): Promise<void>;
92
+ performClusterUpdate(targetVersion?: string): Promise<void>;
90
93
  checkMcpSupportToggle(): Promise<void>;
91
94
  clickMCPTab(): Promise<void>;
92
95
  getMcpConfigurationText(): Promise<string>;
@@ -45,6 +45,9 @@ class ClusterDetailsPage {
45
45
  orchestrationClusterCheckbox;
46
46
  clientCredentialsLink;
47
47
  reviewUpdateButton;
48
+ selectTargetVersionDialog;
49
+ nextButton;
50
+ targetVersionOption;
48
51
  updateAvailableDialog;
49
52
  updateButton;
50
53
  mcpSupportToggle;
@@ -141,6 +144,20 @@ class ClusterDetailsPage {
141
144
  .filter({ hasText: /^Orchestration Cluster API$/ });
142
145
  this.clientCredentialsLink = (clientCredentials) => page.getByRole('cell', { name: clientCredentials }).locator('a');
143
146
  this.reviewUpdateButton = page.getByRole('button', { name: 'Review Update' });
147
+ this.selectTargetVersionDialog = page
148
+ .getByRole('dialog')
149
+ .filter({ hasText: 'Select target version' });
150
+ this.nextButton = this.selectTargetVersionDialog.getByRole('button', {
151
+ name: 'Next',
152
+ });
153
+ this.targetVersionOption = (version) => {
154
+ const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
155
+ // Match the version as a leading token: some options are suffixed with
156
+ // "(latest)" (or similar), others (e.g. in nightly runs) are not.
157
+ return this.selectTargetVersionDialog
158
+ .locator('label')
159
+ .filter({ hasText: new RegExp(`^${escaped}(\\s|$)`) });
160
+ };
144
161
  this.updateAvailableDialog = page
145
162
  .locator('.cds--modal-container')
146
163
  .filter({ hasText: 'Update available' });
@@ -615,8 +632,23 @@ class ClusterDetailsPage {
615
632
  async clickReviewUpdateButton() {
616
633
  await this.reviewUpdateButton.click({ timeout: 60000 });
617
634
  }
618
- async performClusterUpdate() {
635
+ async performClusterUpdate(targetVersion) {
619
636
  await this.clickReviewUpdateButton();
637
+ // When multiple target generations are available, Console inserts a
638
+ // "Select target version" step before "Update available". The desired
639
+ // version is otherwise not guaranteed to be the pre-selected one, so
640
+ // pick it explicitly before proceeding.
641
+ const hasTargetVersionStep = await this.selectTargetVersionDialog
642
+ .waitFor({ state: 'visible', timeout: 10000 })
643
+ .then(() => true)
644
+ .catch(() => false);
645
+ if (hasTargetVersionStep) {
646
+ const version = targetVersion ?? process.env.CLUSTER_VERSION;
647
+ if (version) {
648
+ await this.targetVersionOption(version).click({ timeout: 30000 });
649
+ }
650
+ await this.nextButton.click({ timeout: 60000 });
651
+ }
620
652
  await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
621
653
  await this.updateButton.click({ timeout: 60000 });
622
654
  }
@@ -43,6 +43,9 @@ declare class ClusterDetailsPage {
43
43
  readonly clientRow: (name: string) => Locator;
44
44
  readonly clientRowDeleteButton: (name: string) => Locator;
45
45
  readonly reviewUpdateButton: Locator;
46
+ readonly selectTargetVersionDialog: Locator;
47
+ readonly nextButton: Locator;
48
+ readonly targetVersionOption: (version: string) => Locator;
46
49
  readonly updateAvailableDialog: Locator;
47
50
  readonly updateButton: Locator;
48
51
  constructor(page: Page);
@@ -85,6 +88,6 @@ declare class ClusterDetailsPage {
85
88
  fillAPIClientName(name: string): Promise<void>;
86
89
  clickExpandButton(): Promise<void>;
87
90
  clickReviewUpdateButton(): Promise<void>;
88
- performClusterUpdate(): Promise<void>;
91
+ performClusterUpdate(targetVersion?: string): Promise<void>;
89
92
  }
90
93
  export { ClusterDetailsPage };
@@ -49,6 +49,9 @@ class ClusterDetailsPage {
49
49
  clientRow;
50
50
  clientRowDeleteButton;
51
51
  reviewUpdateButton;
52
+ selectTargetVersionDialog;
53
+ nextButton;
54
+ targetVersionOption;
52
55
  updateAvailableDialog;
53
56
  updateButton;
54
57
  constructor(page) {
@@ -157,6 +160,20 @@ class ClusterDetailsPage {
157
160
  this.clientRow = (name) => this.clientsList.filter({ hasText: name });
158
161
  this.clientRowDeleteButton = (name) => this.clientRow(name).getByRole('button', { name: 'Delete' });
159
162
  this.reviewUpdateButton = page.getByRole('button', { name: 'Review Update' });
163
+ this.selectTargetVersionDialog = page
164
+ .getByRole('dialog')
165
+ .filter({ hasText: 'Select target version' });
166
+ this.nextButton = this.selectTargetVersionDialog.getByRole('button', {
167
+ name: 'Next',
168
+ });
169
+ this.targetVersionOption = (version) => {
170
+ const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
171
+ // Match the version as a leading token: some options are suffixed with
172
+ // "(latest)" (or similar), others (e.g. in nightly runs) are not.
173
+ return this.selectTargetVersionDialog
174
+ .locator('label')
175
+ .filter({ hasText: new RegExp(`^${escaped}(\\s|$)`) });
176
+ };
160
177
  this.updateAvailableDialog = page
161
178
  .locator('.cds--modal-container')
162
179
  .filter({ hasText: 'Update available' });
@@ -474,8 +491,23 @@ class ClusterDetailsPage {
474
491
  async clickReviewUpdateButton() {
475
492
  await this.reviewUpdateButton.click({ timeout: 60000 });
476
493
  }
477
- async performClusterUpdate() {
494
+ async performClusterUpdate(targetVersion) {
478
495
  await this.clickReviewUpdateButton();
496
+ // When multiple target generations are available, Console inserts a
497
+ // "Select target version" step before "Update available". The desired
498
+ // version is otherwise not guaranteed to be the pre-selected one, so
499
+ // pick it explicitly before proceeding.
500
+ const hasTargetVersionStep = await this.selectTargetVersionDialog
501
+ .waitFor({ state: 'visible', timeout: 10000 })
502
+ .then(() => true)
503
+ .catch(() => false);
504
+ if (hasTargetVersionStep) {
505
+ const version = targetVersion ?? process.env.CLUSTER_VERSION;
506
+ if (version) {
507
+ await this.targetVersionOption(version).click({ timeout: 30000 });
508
+ }
509
+ await this.nextButton.click({ timeout: 60000 });
510
+ }
479
511
  await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
480
512
  await this.updateButton.click({ timeout: 60000 });
481
513
  }
@@ -45,6 +45,9 @@ declare class ClusterDetailsPage {
45
45
  readonly mcpTab: Locator;
46
46
  readonly mcpTextarea: Locator;
47
47
  readonly reviewUpdateButton: Locator;
48
+ readonly selectTargetVersionDialog: Locator;
49
+ readonly nextButton: Locator;
50
+ readonly targetVersionOption: (version: string) => Locator;
48
51
  readonly updateAvailableDialog: Locator;
49
52
  readonly updateButton: Locator;
50
53
  constructor(page: Page);
@@ -58,7 +61,7 @@ declare class ClusterDetailsPage {
58
61
  clickOptimizeCheckbox(): Promise<void>;
59
62
  clickCreateButton(): Promise<void>;
60
63
  clickReviewUpdateButton(): Promise<void>;
61
- performClusterUpdate(): Promise<void>;
64
+ performClusterUpdate(targetVersion?: string): Promise<void>;
62
65
  clickCloseModalButton(): Promise<void>;
63
66
  clickSettingsTab(): Promise<void>;
64
67
  enableAuthorizations(): Promise<void>;
@@ -50,6 +50,9 @@ class ClusterDetailsPage {
50
50
  mcpTab;
51
51
  mcpTextarea;
52
52
  reviewUpdateButton;
53
+ selectTargetVersionDialog;
54
+ nextButton;
55
+ targetVersionOption;
53
56
  updateAvailableDialog;
54
57
  updateButton;
55
58
  constructor(page) {
@@ -150,6 +153,20 @@ class ClusterDetailsPage {
150
153
  this.mcpTab = page.getByRole('tab', { name: 'MCP' });
151
154
  this.mcpTextarea = page.getByLabel('MCP', { exact: true }).locator('pre');
152
155
  this.reviewUpdateButton = page.getByRole('button', { name: 'Review Update' });
156
+ this.selectTargetVersionDialog = page
157
+ .getByRole('dialog')
158
+ .filter({ hasText: 'Select target version' });
159
+ this.nextButton = this.selectTargetVersionDialog.getByRole('button', {
160
+ name: 'Next',
161
+ });
162
+ this.targetVersionOption = (version) => {
163
+ const escaped = version.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
164
+ // Match the version as a leading token: some options are suffixed with
165
+ // "(latest)" (or similar), others (e.g. in nightly runs) are not.
166
+ return this.selectTargetVersionDialog
167
+ .locator('label')
168
+ .filter({ hasText: new RegExp(`^${escaped}(\\s|$)`) });
169
+ };
153
170
  this.updateAvailableDialog = page
154
171
  .locator('.cds--modal-container')
155
172
  .filter({ hasText: 'Update available' });
@@ -190,8 +207,23 @@ class ClusterDetailsPage {
190
207
  async clickReviewUpdateButton() {
191
208
  await this.reviewUpdateButton.click({ timeout: 60000 });
192
209
  }
193
- async performClusterUpdate() {
210
+ async performClusterUpdate(targetVersion) {
194
211
  await this.clickReviewUpdateButton();
212
+ // When multiple target generations are available, Console inserts a
213
+ // "Select target version" step before "Update available". The desired
214
+ // version is otherwise not guaranteed to be the pre-selected one, so
215
+ // pick it explicitly before proceeding.
216
+ const hasTargetVersionStep = await this.selectTargetVersionDialog
217
+ .waitFor({ state: 'visible', timeout: 10000 })
218
+ .then(() => true)
219
+ .catch(() => false);
220
+ if (hasTargetVersionStep) {
221
+ const version = targetVersion ?? process.env.CLUSTER_VERSION;
222
+ if (version) {
223
+ await this.targetVersionOption(version).click({ timeout: 30000 });
224
+ }
225
+ await this.nextButton.click({ timeout: 60000 });
226
+ }
195
227
  await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
196
228
  await this.updateButton.click({ timeout: 60000 });
197
229
  }
@@ -9,7 +9,8 @@ const sleep_1 = require("../../utils/sleep");
9
9
  const constants_1 = require("../../utils/constants");
10
10
  const apiHelpers_1 = require("../../utils/apiHelpers");
11
11
  c8Run_8_10_1.test.beforeAll(async () => {
12
- await (0, apiHelpers_1.waitForConnectorsReady)(undefined, 600000);
12
+ c8Run_8_10_1.test.setTimeout(18 * 60 * 1000);
13
+ await (0, apiHelpers_1.waitForConnectorsReady)(undefined, 900000);
13
14
  await Promise.all([
14
15
  (0, zeebeClient_1.deploy)('./resources/Basic_Auth_REST_Connector.bpmn'),
15
16
  (0, zeebeClient_1.deploy)('./resources/Intermediate_Event_Webhook_Connector_No_Auth_Process.bpmn'),
@@ -35,7 +36,8 @@ c8Run_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
35
36
  await (0, _setup_1.captureScreenshot)(page, testInfo);
36
37
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
37
38
  });
38
- (0, c8Run_8_10_1.test)('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
39
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
40
+ c8Run_8_10_1.test.skip('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
39
41
  await c8Run_8_10_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
40
42
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
41
43
  await operateHomePage.clickProcessesTab();
@@ -46,7 +48,8 @@ c8Run_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
46
48
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.statusVariable.getByText('"Awesome!"'), 'Status variable text');
47
49
  });
48
50
  });
49
- (0, c8Run_8_10_1.test)('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
51
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
52
+ c8Run_8_10_1.test.skip('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
50
53
  await c8Run_8_10_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
51
54
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
52
55
  await operateHomePage.clickProcessesTab();
@@ -57,7 +60,8 @@ c8Run_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
57
60
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable.getByText('"Awesome!"'), 'Status variable text');
58
61
  });
59
62
  });
60
- (0, c8Run_8_10_1.test)('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
63
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
64
+ c8Run_8_10_1.test.skip('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
61
65
  await c8Run_8_10_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
62
66
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
63
67
  await operateHomePage.clickProcessesTab();
@@ -72,7 +76,8 @@ c8Run_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
72
76
  });
73
77
  });
74
78
  });
75
- (0, c8Run_8_10_1.test)('Start Event Webhook Connector No Auth User Flow', async ({ page, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
79
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
80
+ c8Run_8_10_1.test.skip('Start Event Webhook Connector No Auth User Flow', async ({ page, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
76
81
  await c8Run_8_10_1.test.step('Make Authorization Request', async () => {
77
82
  await (0, sleep_1.sleep)(300000);
78
83
  await (0, test_1.expect)(async () => {
@@ -90,7 +95,8 @@ c8Run_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
90
95
  await operateProcessInstancePage.completedIconAssertion();
91
96
  });
92
97
  });
93
- (0, c8Run_8_10_1.test)('Intermediate Event Webhook Connector No Auth User Flow', async ({ request, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
98
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
99
+ c8Run_8_10_1.test.skip('Intermediate Event Webhook Connector No Auth User Flow', async ({ request, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
94
100
  await c8Run_8_10_1.test.step('Make Authorization Request', async () => {
95
101
  await (0, sleep_1.sleep)(60000);
96
102
  await (0, test_1.expect)(async () => {
@@ -52,7 +52,8 @@ c8Run_8_10_1.test.describe('@tasklistV2 MCP Client connector authentication test
52
52
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
53
53
  });
54
54
  for (const { name, processId, getVariables } of authMethods) {
55
- (0, c8Run_8_10_1.test)(`As a user I can authenticate using ${name} and list tools`, async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
55
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
56
+ c8Run_8_10_1.test.skip(`As a user I can authenticate using ${name} and list tools`, async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
56
57
  await (0, zeebeClient_1.createInstances)(processId, 1, 1, getVariables?.());
57
58
  await (0, sleep_1.sleep)(2000);
58
59
  await c8Run_8_10_1.test.step('Navigate to completed process instance', async () => {
@@ -28,7 +28,8 @@ c8Run_8_10_1.test.describe('@tasklistV2 MCP Client connector tests', () => {
28
28
  await (0, _setup_1.captureScreenshot)(page, testInfo);
29
29
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
30
30
  });
31
- (0, c8Run_8_10_1.test)('As an user I can invoke the MCP Client connector and use all its operations', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
31
+ // Skipped due to bug #7984: https://github.com/camunda/connectors/issues/7984
32
+ c8Run_8_10_1.test.skip('As an user I can invoke the MCP Client connector and use all its operations', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
32
33
  c8Run_8_10_1.test.slow();
33
34
  await c8Run_8_10_1.test.step('Navigate to completed process instance', async () => {
34
35
  await operateHomePage.clickProcessesTab();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.830",
3
+ "version": "0.0.832",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",