@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.
- package/dist/pages/8.10/ClusterDetailsPage.d.ts +4 -1
- package/dist/pages/8.10/ClusterDetailsPage.js +33 -1
- package/dist/pages/8.7/ClusterDetailsPage.d.ts +4 -1
- package/dist/pages/8.7/ClusterDetailsPage.js +33 -1
- package/dist/pages/8.9/ClusterDetailsPage.d.ts +4 -1
- package/dist/pages/8.9/ClusterDetailsPage.js +33 -1
- package/dist/tests/c8Run-8.10/connectors-user-flows.spec.js +12 -6
- package/dist/tests/c8Run-8.10/mcp-connector-authentication.spec.js +2 -1
- package/dist/tests/c8Run-8.10/mcp-user-flows.spec.js +2 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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();
|