@camunda/e2e-test-suite 0.0.1205 → 0.0.1207
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/ClusterPage.d.ts +1 -0
- package/dist/pages/8.10/ClusterPage.js +10 -0
- package/dist/pages/8.10/ModelerHomePage.js +12 -5
- package/dist/pages/8.7/ClusterPage.d.ts +1 -0
- package/dist/pages/8.7/ClusterPage.js +10 -0
- package/dist/pages/8.8/ClusterPage.d.ts +1 -0
- package/dist/pages/8.8/ClusterPage.js +10 -0
- package/dist/pages/8.9/ClusterPage.d.ts +1 -0
- package/dist/pages/8.9/ClusterPage.js +10 -0
- package/dist/tests/8.10/connectors-user-flows.spec.js +8 -0
- package/dist/tests/8.10/orchestration-cluster-mcp-server/mcp-user-task-tools.spec.js +16 -3
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ class ClusterPage {
|
|
|
9
9
|
defaultClusterType = 'G3-Dev';
|
|
10
10
|
belgiumRegion;
|
|
11
11
|
londonRegion;
|
|
12
|
+
ohioRegion;
|
|
12
13
|
finlandRegion;
|
|
13
14
|
testInfo;
|
|
14
15
|
createNewClusterButton;
|
|
@@ -84,6 +85,9 @@ class ClusterPage {
|
|
|
84
85
|
this.londonRegion = page.locator('label').filter({
|
|
85
86
|
hasText: 'London, Europe (europe-west2)',
|
|
86
87
|
});
|
|
88
|
+
this.ohioRegion = page.locator('label').filter({
|
|
89
|
+
hasText: 'Ohio, North America (us-east-2)',
|
|
90
|
+
});
|
|
87
91
|
this.finlandRegion = page.locator('label').filter({
|
|
88
92
|
hasText: 'Finland, Europe (europe-north1)',
|
|
89
93
|
});
|
|
@@ -576,6 +580,12 @@ class ClusterPage {
|
|
|
576
580
|
await chosen.locator.click();
|
|
577
581
|
}
|
|
578
582
|
}
|
|
583
|
+
else if (region === 'AWS' && process.env.IS_PROD == 'true') {
|
|
584
|
+
// The AWS region tile has no default selection, unlike GCP's tiles.
|
|
585
|
+
// Only prod creates AWS clusters through this UI flow.
|
|
586
|
+
await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
|
|
587
|
+
await this.ohioRegion.click();
|
|
588
|
+
}
|
|
579
589
|
}
|
|
580
590
|
async clickGCPRegion() {
|
|
581
591
|
const regionSelectionEnabled = process.env.REGION_SELECTION === 'true';
|
|
@@ -522,15 +522,22 @@ class ModelerHomePage {
|
|
|
522
522
|
await this.page.goto(this.processApplicationUrl, {
|
|
523
523
|
waitUntil: 'domcontentloaded',
|
|
524
524
|
});
|
|
525
|
-
//
|
|
525
|
+
// Up to two reloads before spending the whole budget: processApplicationStore
|
|
526
526
|
// .init() swallows a failed fetch (it only toasts "Yikes! Couldn't
|
|
527
527
|
// retrieve your project" and clears its loading flag), so a transient 5xx
|
|
528
528
|
// leaves a fully rendered page that simply has no process-application
|
|
529
529
|
// breadcrumb -- waiting the full 90s on it can only ever time out, and
|
|
530
|
-
// re-running the store init is the only thing that brings it back.
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
530
|
+
// re-running the store init is the only thing that brings it back. A
|
|
531
|
+
// single reload can itself land on a second transient failure (seen in
|
|
532
|
+
// run 35340608406), so retry the reload once more before falling through
|
|
533
|
+
// to the full-budget wait below.
|
|
534
|
+
const maxReloadAttempts = 2;
|
|
535
|
+
let backInside = false;
|
|
536
|
+
for (let attempt = 0; attempt < maxReloadAttempts && !backInside; attempt++) {
|
|
537
|
+
backInside = await this.becameVisible(this.processApplicationPage.breadcrumb, 45000);
|
|
538
|
+
if (!backInside) {
|
|
539
|
+
await this.page.reload({ waitUntil: 'domcontentloaded' });
|
|
540
|
+
}
|
|
534
541
|
}
|
|
535
542
|
await this.processApplicationPage.waitForProcessApplication();
|
|
536
543
|
await this.dismissBlockingDialog();
|
|
@@ -5,6 +5,7 @@ declare class ClusterPage {
|
|
|
5
5
|
readonly belgiumRegion: Locator;
|
|
6
6
|
readonly finlandRegion: Locator;
|
|
7
7
|
readonly londonRegion: Locator;
|
|
8
|
+
readonly ohioRegion: Locator;
|
|
8
9
|
readonly createNewClusterButton: Locator;
|
|
9
10
|
readonly clusterNameInput: Locator;
|
|
10
11
|
readonly createClusterButton: Locator;
|
|
@@ -12,6 +12,7 @@ class ClusterPage {
|
|
|
12
12
|
belgiumRegion;
|
|
13
13
|
finlandRegion;
|
|
14
14
|
londonRegion;
|
|
15
|
+
ohioRegion;
|
|
15
16
|
createNewClusterButton;
|
|
16
17
|
clusterNameInput;
|
|
17
18
|
createClusterButton;
|
|
@@ -97,6 +98,9 @@ class ClusterPage {
|
|
|
97
98
|
this.londonRegion = page.locator('label').filter({
|
|
98
99
|
hasText: 'London, Europe (europe-west2)',
|
|
99
100
|
});
|
|
101
|
+
this.ohioRegion = page.locator('label').filter({
|
|
102
|
+
hasText: 'Ohio, North America (us-east-2)',
|
|
103
|
+
});
|
|
100
104
|
this.clustersList = page
|
|
101
105
|
.getByRole('row')
|
|
102
106
|
.filter({ hasNotText: 'Generation' }); //Filter out header row
|
|
@@ -231,6 +235,12 @@ class ClusterPage {
|
|
|
231
235
|
await chosen.locator.click();
|
|
232
236
|
}
|
|
233
237
|
}
|
|
238
|
+
else if (region === 'AWS' && process.env.IS_PROD == 'true') {
|
|
239
|
+
// The AWS region tile has no default selection, unlike GCP's tiles.
|
|
240
|
+
// Only prod creates AWS clusters through this UI flow.
|
|
241
|
+
await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
|
|
242
|
+
await this.ohioRegion.click();
|
|
243
|
+
}
|
|
234
244
|
}
|
|
235
245
|
extractClusterIdFromUrl(url) {
|
|
236
246
|
const clusterIdMatch = url.match(/\/cluster\/([a-f0-9-]+)/);
|
|
@@ -22,6 +22,7 @@ declare class ClusterPage {
|
|
|
22
22
|
readonly g3DevClusterType: Locator;
|
|
23
23
|
readonly belgiumRegion: Locator;
|
|
24
24
|
readonly londonRegion: Locator;
|
|
25
|
+
readonly ohioRegion: Locator;
|
|
25
26
|
readonly finlandRegion: Locator;
|
|
26
27
|
readonly alphaTab: Locator;
|
|
27
28
|
readonly devTab: Locator;
|
|
@@ -29,6 +29,7 @@ class ClusterPage {
|
|
|
29
29
|
g3DevClusterType;
|
|
30
30
|
belgiumRegion;
|
|
31
31
|
londonRegion;
|
|
32
|
+
ohioRegion;
|
|
32
33
|
finlandRegion;
|
|
33
34
|
alphaTab;
|
|
34
35
|
devTab;
|
|
@@ -87,6 +88,9 @@ class ClusterPage {
|
|
|
87
88
|
this.londonRegion = page.locator('label').filter({
|
|
88
89
|
hasText: 'London, Europe (europe-west2)',
|
|
89
90
|
});
|
|
91
|
+
this.ohioRegion = page.locator('label').filter({
|
|
92
|
+
hasText: 'Ohio, North America (us-east-2)',
|
|
93
|
+
});
|
|
90
94
|
this.belgiumRegion = page.locator('label').filter({
|
|
91
95
|
hasText: 'Chaos, Belgium, Europe (europe-west1)',
|
|
92
96
|
});
|
|
@@ -264,6 +268,12 @@ class ClusterPage {
|
|
|
264
268
|
await chosen.locator.click();
|
|
265
269
|
}
|
|
266
270
|
}
|
|
271
|
+
else if (region === 'AWS' && process.env.IS_PROD == 'true') {
|
|
272
|
+
// The AWS region tile has no default selection, unlike GCP's tiles.
|
|
273
|
+
// Only prod creates AWS clusters through this UI flow.
|
|
274
|
+
await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
|
|
275
|
+
await this.ohioRegion.click();
|
|
276
|
+
}
|
|
267
277
|
}
|
|
268
278
|
async determineTasklistAPI(tasklistV1Api) {
|
|
269
279
|
// Determine tasklistV1Api from project name if not explicitly provided
|
|
@@ -10,6 +10,7 @@ class ClusterPage {
|
|
|
10
10
|
defaultClusterType = 'G3-Dev';
|
|
11
11
|
belgiumRegion;
|
|
12
12
|
londonRegion;
|
|
13
|
+
ohioRegion;
|
|
13
14
|
finlandRegion;
|
|
14
15
|
testInfo;
|
|
15
16
|
createNewClusterButton;
|
|
@@ -81,6 +82,9 @@ class ClusterPage {
|
|
|
81
82
|
this.londonRegion = page.locator('label').filter({
|
|
82
83
|
hasText: 'London, Europe (europe-west2)',
|
|
83
84
|
});
|
|
85
|
+
this.ohioRegion = page.locator('label').filter({
|
|
86
|
+
hasText: 'Ohio, North America (us-east-2)',
|
|
87
|
+
});
|
|
84
88
|
this.finlandRegion = page.locator('label').filter({
|
|
85
89
|
hasText: 'Finland, Europe (europe-north1)',
|
|
86
90
|
});
|
|
@@ -415,6 +419,12 @@ class ClusterPage {
|
|
|
415
419
|
await chosen.locator.click();
|
|
416
420
|
}
|
|
417
421
|
}
|
|
422
|
+
else if (region === 'AWS' && process.env.IS_PROD == 'true') {
|
|
423
|
+
// The AWS region tile has no default selection, unlike GCP's tiles.
|
|
424
|
+
// Only prod creates AWS clusters through this UI flow.
|
|
425
|
+
await (0, test_1.expect)(this.ohioRegion).toBeVisible({ timeout: 20000 });
|
|
426
|
+
await this.ohioRegion.click();
|
|
427
|
+
}
|
|
418
428
|
}
|
|
419
429
|
async clickGCPRegion() {
|
|
420
430
|
const regionSelectionEnabled = process.env.REGION_SELECTION === 'true';
|
|
@@ -272,6 +272,14 @@ _8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
272
272
|
await operateProcessesPage.clickProcessCompletedCheckbox();
|
|
273
273
|
await operateProcessesPage.clickProcessInstanceLink(processName);
|
|
274
274
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(page, operateProcessInstancePage.completedIcon, {
|
|
275
|
+
// This flow's REST connector call round-trips to a real AWS
|
|
276
|
+
// endpoint using the secrets above, which can take longer to
|
|
277
|
+
// complete than the suite's default 60s/3-retry budget (seen
|
|
278
|
+
// timing out in run 35340608406). Match the operateBanner budget
|
|
279
|
+
// above rather than the suite default used elsewhere.
|
|
280
|
+
totalTimeout: 120000,
|
|
281
|
+
visibilityTimeout: 30000,
|
|
282
|
+
maxRetries: 5,
|
|
275
283
|
postAction: async () => {
|
|
276
284
|
await page.reload();
|
|
277
285
|
},
|
|
@@ -21,8 +21,20 @@ _8_10_1.test.describe('Orchestration Cluster MCP Server - User Task Tools @taskl
|
|
|
21
21
|
throw new Error('Failed to deploy user task tools processes');
|
|
22
22
|
}
|
|
23
23
|
const testFileProcessKey = String(deployedTestFileProcessKey);
|
|
24
|
+
// searchUserTaskVariables (below) returns the task's own VARIABLES
|
|
25
|
+
// (name/value pairs), not fields of the task entity itself -- unlike
|
|
26
|
+
// searchUserTasks/getUserTask, whose responses do carry the task's own
|
|
27
|
+
// userTaskKey. mcp_user_task_test_file.bpmn's user task has no input
|
|
28
|
+
// variables and only writes its output on completion (which this test
|
|
29
|
+
// never reaches), so a process instance started with no variables would
|
|
30
|
+
// have nothing for that call to find, and no amount of retrying or
|
|
31
|
+
// waiting could ever make its response contain testUserTaskKey (run
|
|
32
|
+
// 35340608406 and its retry both failed identically on exactly this).
|
|
33
|
+
// Start the process instance with a marker variable instead, so there is
|
|
34
|
+
// a real value in the task's scope to search for.
|
|
35
|
+
const taskVariableMarker = await (0, _setup_1.generateRandomStringAsync)(10);
|
|
24
36
|
// Create test instance which will create a user task
|
|
25
|
-
const testInstanceKey = await (0, apiHelpers_1.createProcessInstance)(testFileProcessKey, authToken, 'saas', 'agentic_cluster');
|
|
37
|
+
const testInstanceKey = await (0, apiHelpers_1.createProcessInstance)(testFileProcessKey, authToken, 'saas', 'agentic_cluster', { taskVariableMarker });
|
|
26
38
|
// Get the user task key created by the test instance (with retry logic)
|
|
27
39
|
const testUserTaskKey = await (0, userTaskHelpers_1.getUserTaskKeyByProcessInstanceKey)(testInstanceKey, authToken, 'saas', 'agentic_cluster');
|
|
28
40
|
console.log('Creating tools instance with variables:', {
|
|
@@ -36,6 +48,7 @@ _8_10_1.test.describe('Orchestration Cluster MCP Server - User Task Tools @taskl
|
|
|
36
48
|
testFileProcessKey,
|
|
37
49
|
testInstanceKey,
|
|
38
50
|
testUserTaskKey,
|
|
51
|
+
taskVariableMarker,
|
|
39
52
|
};
|
|
40
53
|
};
|
|
41
54
|
_8_10_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
@@ -101,8 +114,8 @@ _8_10_1.test.describe('Orchestration Cluster MCP Server - User Task Tools @taskl
|
|
|
101
114
|
description: 'search response contains totalItems field',
|
|
102
115
|
},
|
|
103
116
|
{
|
|
104
|
-
text: () => data.
|
|
105
|
-
description: 'search response contains the
|
|
117
|
+
text: () => data.taskVariableMarker,
|
|
118
|
+
description: 'search response contains the variable set on the task',
|
|
106
119
|
},
|
|
107
120
|
],
|
|
108
121
|
},
|