@camunda/e2e-test-suite 0.0.313 → 0.0.314
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 +0 -1
- package/dist/pages/8.10/ClusterDetailsPage.js +2 -6
- package/dist/pages/8.10/ClusterPage.d.ts +1 -0
- package/dist/pages/8.10/ClusterPage.js +2 -0
- package/dist/pages/8.7/ClusterDetailsPage.d.ts +0 -1
- package/dist/pages/8.7/ClusterDetailsPage.js +2 -6
- package/dist/pages/8.8/ClusterDetailsPage.d.ts +3 -0
- package/dist/pages/8.8/ClusterDetailsPage.js +40 -4
- package/dist/pages/8.8/ClusterPage.d.ts +2 -1
- package/dist/pages/8.8/ClusterPage.js +15 -5
- package/dist/pages/8.8/TaskPanelPage.js +13 -1
- package/dist/pages/8.9/ClusterDetailsPage.d.ts +0 -1
- package/dist/pages/8.9/ClusterDetailsPage.js +2 -6
- package/dist/pages/8.9/ClusterPage.d.ts +2 -1
- package/dist/pages/8.9/ClusterPage.js +4 -2
- package/dist/tests/8.10/saas-migration-path-user-flows.spec.js +9 -53
- package/dist/tests/8.7/saas-migration-path-user-flows.spec.js +10 -4
- package/dist/tests/8.7/test-setup.spec.js +1 -0
- package/dist/tests/8.8/saas-migration-path-user-flows.spec.js +21 -17
- package/dist/tests/8.9/saas-migration-path-user-flows.spec.js +24 -23
- package/package.json +1 -1
|
@@ -81,7 +81,6 @@ declare class ClusterDetailsPage {
|
|
|
81
81
|
assertAlertText(text: string, timeout?: number, maxRetries?: number): Promise<void>;
|
|
82
82
|
checkOrchestrationClusterCheckbox(): Promise<void>;
|
|
83
83
|
clickReviewUpdateButton(): Promise<void>;
|
|
84
|
-
clickUpdateButton(): Promise<void>;
|
|
85
84
|
performClusterUpdate(): Promise<void>;
|
|
86
85
|
}
|
|
87
86
|
export { ClusterDetailsPage };
|
|
@@ -495,14 +495,10 @@ class ClusterDetailsPage {
|
|
|
495
495
|
async clickReviewUpdateButton() {
|
|
496
496
|
await this.reviewUpdateButton.click({ timeout: 60000 });
|
|
497
497
|
}
|
|
498
|
-
async clickUpdateButton() {
|
|
499
|
-
await this.updateButton.click({ timeout: 60000 });
|
|
500
|
-
}
|
|
501
498
|
async performClusterUpdate() {
|
|
502
499
|
await this.clickReviewUpdateButton();
|
|
503
|
-
await this.
|
|
504
|
-
await
|
|
505
|
-
await this.clickUpdateButton();
|
|
500
|
+
await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
|
|
501
|
+
await this.updateButton.click({ timeout: 60000 });
|
|
506
502
|
}
|
|
507
503
|
}
|
|
508
504
|
exports.ClusterDetailsPage = ClusterDetailsPage;
|
|
@@ -34,6 +34,7 @@ declare class ClusterPage {
|
|
|
34
34
|
readonly clusterHealthiness: (clusterName: string) => Locator;
|
|
35
35
|
readonly clusterLink: (clusterName: string) => Locator;
|
|
36
36
|
readonly dialog: Locator;
|
|
37
|
+
readonly clusterVersion: (clusterName: string, versionText: string) => Locator;
|
|
37
38
|
constructor(page: Page, testInfo?: TestInfo);
|
|
38
39
|
clickClusterBanner(): Promise<void>;
|
|
39
40
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -40,6 +40,7 @@ class ClusterPage {
|
|
|
40
40
|
clusterHealthiness;
|
|
41
41
|
clusterLink;
|
|
42
42
|
dialog;
|
|
43
|
+
clusterVersion;
|
|
43
44
|
constructor(page, testInfo) {
|
|
44
45
|
this.page = page;
|
|
45
46
|
this.testInfo = testInfo;
|
|
@@ -106,6 +107,7 @@ class ClusterPage {
|
|
|
106
107
|
name: clusterName,
|
|
107
108
|
});
|
|
108
109
|
this.dialog = page.getByRole('dialog');
|
|
110
|
+
this.clusterVersion = (clusterName, versionText) => this.cluster(clusterName).getByText(versionText, { exact: true });
|
|
109
111
|
}
|
|
110
112
|
async clickClusterBanner() {
|
|
111
113
|
await this.page
|
|
@@ -85,7 +85,6 @@ declare class ClusterDetailsPage {
|
|
|
85
85
|
fillAPIClientName(name: string): Promise<void>;
|
|
86
86
|
clickExpandButton(): Promise<void>;
|
|
87
87
|
clickReviewUpdateButton(): Promise<void>;
|
|
88
|
-
clickUpdateButton(): Promise<void>;
|
|
89
88
|
performClusterUpdate(): Promise<void>;
|
|
90
89
|
}
|
|
91
90
|
export { ClusterDetailsPage };
|
|
@@ -472,14 +472,10 @@ class ClusterDetailsPage {
|
|
|
472
472
|
async clickReviewUpdateButton() {
|
|
473
473
|
await this.reviewUpdateButton.click({ timeout: 60000 });
|
|
474
474
|
}
|
|
475
|
-
async clickUpdateButton() {
|
|
476
|
-
await this.updateButton.click({ timeout: 60000 });
|
|
477
|
-
}
|
|
478
475
|
async performClusterUpdate() {
|
|
479
476
|
await this.clickReviewUpdateButton();
|
|
480
|
-
await this.
|
|
481
|
-
await
|
|
482
|
-
await this.clickUpdateButton();
|
|
477
|
+
await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
|
|
478
|
+
await this.updateButton.click({ timeout: 60000 });
|
|
483
479
|
}
|
|
484
480
|
}
|
|
485
481
|
exports.ClusterDetailsPage = ClusterDetailsPage;
|
|
@@ -43,6 +43,9 @@ declare class ClusterDetailsPage {
|
|
|
43
43
|
readonly reviewUpdateButton: Locator;
|
|
44
44
|
readonly updateAvailableDialog: Locator;
|
|
45
45
|
readonly updateButton: Locator;
|
|
46
|
+
readonly nextButton: Locator;
|
|
47
|
+
readonly tasklistV1RadioButton: Locator;
|
|
48
|
+
readonly tasklistV2RadioButton: Locator;
|
|
46
49
|
constructor(page: Page);
|
|
47
50
|
clickAPITab(): Promise<void>;
|
|
48
51
|
clickCreateClientButton(): Promise<void>;
|
|
@@ -49,6 +49,9 @@ class ClusterDetailsPage {
|
|
|
49
49
|
reviewUpdateButton;
|
|
50
50
|
updateAvailableDialog;
|
|
51
51
|
updateButton;
|
|
52
|
+
nextButton;
|
|
53
|
+
tasklistV1RadioButton;
|
|
54
|
+
tasklistV2RadioButton;
|
|
52
55
|
constructor(page) {
|
|
53
56
|
this.page = page;
|
|
54
57
|
this.apiTab = page.getByRole('tab', { name: 'API' });
|
|
@@ -137,12 +140,15 @@ class ClusterDetailsPage {
|
|
|
137
140
|
this.clientRow = (name) => this.clientsList.filter({ hasText: name });
|
|
138
141
|
this.clientRowDeleteButton = (name) => this.clientRow(name).getByRole('button', { name: 'Delete' });
|
|
139
142
|
this.reviewUpdateButton = page.getByRole('button', { name: 'Review Update' });
|
|
140
|
-
this.updateAvailableDialog = page
|
|
141
|
-
|
|
142
|
-
|
|
143
|
+
this.updateAvailableDialog = page
|
|
144
|
+
.locator('.cds--modal-container')
|
|
145
|
+
.filter({ hasText: 'Update available' });
|
|
143
146
|
this.updateButton = this.updateAvailableDialog.getByRole('button', {
|
|
144
147
|
name: 'Update',
|
|
145
148
|
});
|
|
149
|
+
this.nextButton = page.getByRole('button', { name: 'Next' });
|
|
150
|
+
this.tasklistV1RadioButton = page.locator('label[for="upgrade-tasklist-mode-v1"]');
|
|
151
|
+
this.tasklistV2RadioButton = page.locator('label[for="upgrade-tasklist-mode-v2"]');
|
|
146
152
|
}
|
|
147
153
|
async clickAPITab() {
|
|
148
154
|
await (0, test_1.expect)(this.apiTab).toBeVisible({ timeout: 60000 });
|
|
@@ -508,7 +514,37 @@ class ClusterDetailsPage {
|
|
|
508
514
|
}
|
|
509
515
|
async performClusterUpdate() {
|
|
510
516
|
await this.clickReviewUpdateButton();
|
|
511
|
-
|
|
517
|
+
// Wait a moment for the dialog to start appearing
|
|
518
|
+
await this.page.waitForTimeout(1000);
|
|
519
|
+
await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 60000 });
|
|
520
|
+
// Click through steps 1-5 (each requires clicking "Next")
|
|
521
|
+
for (let step = 1; step <= 5; step++) {
|
|
522
|
+
console.log(`Clicking Next on step ${step}`);
|
|
523
|
+
await (0, test_1.expect)(this.nextButton).toBeVisible({ timeout: 30000 });
|
|
524
|
+
await this.nextButton.click({ timeout: 30000 });
|
|
525
|
+
await this.page.waitForTimeout(500); // Brief wait between steps
|
|
526
|
+
}
|
|
527
|
+
// Step 6: Select Tasklist version based on environment variable
|
|
528
|
+
const tasklistVersion = process.env.TASKLIST_VERSION || 'v2';
|
|
529
|
+
console.log(`Selecting Tasklist version: ${tasklistVersion}`);
|
|
530
|
+
if (tasklistVersion === 'v1') {
|
|
531
|
+
await (0, test_1.expect)(this.tasklistV1RadioButton).toBeVisible({ timeout: 30000 });
|
|
532
|
+
await this.tasklistV1RadioButton.click();
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
// Default to v2 (which is usually pre-selected)
|
|
536
|
+
await (0, test_1.expect)(this.tasklistV2RadioButton).toBeVisible({ timeout: 30000 });
|
|
537
|
+
const v2Input = this.page.locator('#upgrade-tasklist-mode-v2');
|
|
538
|
+
if (!(await v2Input.isChecked())) {
|
|
539
|
+
await this.tasklistV2RadioButton.click();
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
// Click Next to proceed to final step
|
|
543
|
+
await (0, test_1.expect)(this.nextButton).toBeVisible({ timeout: 30000 });
|
|
544
|
+
await this.nextButton.click({ timeout: 30000 });
|
|
545
|
+
await this.page.waitForTimeout(500);
|
|
546
|
+
// Final step: Click Update button
|
|
547
|
+
await (0, test_1.expect)(this.updateButton).toBeVisible({ timeout: 60000 });
|
|
512
548
|
await this.updateButton.click({ timeout: 60000 });
|
|
513
549
|
}
|
|
514
550
|
}
|
|
@@ -34,6 +34,7 @@ declare class ClusterPage {
|
|
|
34
34
|
readonly clusterHealthiness: (clusterName: string) => Locator;
|
|
35
35
|
readonly clusterLink: (clusterName: string) => Locator;
|
|
36
36
|
readonly dialog: Locator;
|
|
37
|
+
readonly clusterVersion: (clusterName: string, versionText: string) => Locator;
|
|
37
38
|
constructor(page: Page, testInfo?: TestInfo);
|
|
38
39
|
clickClusterBanner(): Promise<void>;
|
|
39
40
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -53,7 +54,7 @@ declare class ClusterPage {
|
|
|
53
54
|
clickConnectorSecretsTab(clusterName: string): Promise<void>;
|
|
54
55
|
clickClusterOption(version: string): Promise<void>;
|
|
55
56
|
createClusterIfNotExists(clusterName: string, region?: string): Promise<void>;
|
|
56
|
-
assertClusterHealthyStatusWithRetry(name: string, visibilityTimeout?: number, totalTimeout?: number): Promise<void>;
|
|
57
|
+
assertClusterHealthyStatusWithRetry(name: string, visibilityTimeout?: number, totalTimeout?: number, isUpgradeScenario?: boolean): Promise<void>;
|
|
57
58
|
clickAlphaTab(): Promise<void>;
|
|
58
59
|
clickDevTab(): Promise<void>;
|
|
59
60
|
clickStableTab(): Promise<void>;
|
|
@@ -41,6 +41,7 @@ class ClusterPage {
|
|
|
41
41
|
clusterHealthiness;
|
|
42
42
|
clusterLink;
|
|
43
43
|
dialog;
|
|
44
|
+
clusterVersion;
|
|
44
45
|
constructor(page, testInfo) {
|
|
45
46
|
this.page = page;
|
|
46
47
|
this.testInfo = testInfo;
|
|
@@ -107,6 +108,7 @@ class ClusterPage {
|
|
|
107
108
|
this.clusterLink = (clusterName) => this.cluster(clusterName).getByRole('link', {
|
|
108
109
|
name: clusterName,
|
|
109
110
|
});
|
|
111
|
+
this.clusterVersion = (clusterName, versionText) => this.cluster(clusterName).getByText(versionText);
|
|
110
112
|
}
|
|
111
113
|
async clickClusterBanner() {
|
|
112
114
|
await this.page
|
|
@@ -330,14 +332,22 @@ class ClusterPage {
|
|
|
330
332
|
await this.assertClusterHealthyStatusWithRetry(clusterName, 120000, 600000);
|
|
331
333
|
}
|
|
332
334
|
}
|
|
333
|
-
async assertClusterHealthyStatusWithRetry(name, visibilityTimeout = 100000, totalTimeout = 420000) {
|
|
335
|
+
async assertClusterHealthyStatusWithRetry(name, visibilityTimeout = 100000, totalTimeout = 420000, isUpgradeScenario = false) {
|
|
336
|
+
// For upgrade scenarios, use much longer timeouts and more retries instead of fixed waits
|
|
337
|
+
const actualTotalTimeout = isUpgradeScenario ? 720000 : totalTimeout; // 12 minutes for upgrades
|
|
338
|
+
const actualVisibilityTimeout = isUpgradeScenario
|
|
339
|
+
? 15000
|
|
340
|
+
: visibilityTimeout; // Shorter individual checks
|
|
341
|
+
const maxRetries = isUpgradeScenario ? 20 : 5; // Many more retries for upgrades
|
|
342
|
+
console.log(isUpgradeScenario
|
|
343
|
+
? `Checking cluster health post-upgrade with extended timeouts (${actualTotalTimeout / 60000} min total, ${maxRetries} retries)`
|
|
344
|
+
: `Checking cluster health: ${name}`);
|
|
334
345
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.clusterHealthiness(name), {
|
|
335
|
-
visibilityTimeout:
|
|
336
|
-
totalTimeout:
|
|
337
|
-
maxRetries:
|
|
346
|
+
visibilityTimeout: actualVisibilityTimeout,
|
|
347
|
+
totalTimeout: actualTotalTimeout,
|
|
348
|
+
maxRetries: maxRetries,
|
|
338
349
|
preAction: async () => {
|
|
339
350
|
await this.page.reload();
|
|
340
|
-
await (0, test_1.expect)(this.cluster(name)).toBeVisible({ timeout: 10000 });
|
|
341
351
|
},
|
|
342
352
|
});
|
|
343
353
|
console.log('Cluster is healthy:', name);
|
|
@@ -60,7 +60,19 @@ class TaskPanelPage {
|
|
|
60
60
|
.click({ timeout: 60000 });
|
|
61
61
|
}
|
|
62
62
|
catch {
|
|
63
|
-
|
|
63
|
+
// Dismiss any active tooltips by clicking elsewhere and wait
|
|
64
|
+
await this.page.click('body');
|
|
65
|
+
await this.page.waitForTimeout(500);
|
|
66
|
+
try {
|
|
67
|
+
// Try force click to bypass tooltip overlay
|
|
68
|
+
await this.expandButton.click({ force: true, timeout: 60000 });
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Fallback: use keyboard navigation to avoid pointer events
|
|
72
|
+
await this.expandButton.focus();
|
|
73
|
+
await this.page.keyboard.press('Enter');
|
|
74
|
+
await this.page.waitForTimeout(1000);
|
|
75
|
+
}
|
|
64
76
|
await this.page
|
|
65
77
|
.getByRole('link', { name: option })
|
|
66
78
|
.getByText(option)
|
|
@@ -58,7 +58,6 @@ declare class ClusterDetailsPage {
|
|
|
58
58
|
clickOptimizeCheckbox(): Promise<void>;
|
|
59
59
|
clickCreateButton(): Promise<void>;
|
|
60
60
|
clickReviewUpdateButton(): Promise<void>;
|
|
61
|
-
clickUpdateButton(): Promise<void>;
|
|
62
61
|
performClusterUpdate(): Promise<void>;
|
|
63
62
|
clickCloseModalButton(): Promise<void>;
|
|
64
63
|
clickSettingsTab(): Promise<void>;
|
|
@@ -190,14 +190,10 @@ class ClusterDetailsPage {
|
|
|
190
190
|
async clickReviewUpdateButton() {
|
|
191
191
|
await this.reviewUpdateButton.click({ timeout: 60000 });
|
|
192
192
|
}
|
|
193
|
-
async clickUpdateButton() {
|
|
194
|
-
await this.updateButton.click({ timeout: 60000 });
|
|
195
|
-
}
|
|
196
193
|
async performClusterUpdate() {
|
|
197
194
|
await this.clickReviewUpdateButton();
|
|
198
|
-
await this.
|
|
199
|
-
await
|
|
200
|
-
await this.clickUpdateButton();
|
|
195
|
+
await (0, test_1.expect)(this.updateAvailableDialog).toBeVisible({ timeout: 30000 });
|
|
196
|
+
await this.updateButton.click({ timeout: 60000 });
|
|
201
197
|
}
|
|
202
198
|
async clickCloseModalButton() {
|
|
203
199
|
await this.closeModalButton.click({ timeout: 60000 });
|
|
@@ -33,6 +33,7 @@ declare class ClusterPage {
|
|
|
33
33
|
readonly cluster: (clusterName: string) => Locator;
|
|
34
34
|
readonly clusterHealthiness: (clusterName: string) => Locator;
|
|
35
35
|
readonly clusterLink: (clusterName: string) => Locator;
|
|
36
|
+
readonly clusterVersion: (clusterName: string, versionText: string) => Locator;
|
|
36
37
|
readonly dialog: Locator;
|
|
37
38
|
constructor(page: Page, testInfo?: TestInfo);
|
|
38
39
|
clickClusterBanner(): Promise<void>;
|
|
@@ -52,7 +53,7 @@ declare class ClusterPage {
|
|
|
52
53
|
clickConnectorSecretsTab(clusterName: string): Promise<void>;
|
|
53
54
|
clickClusterOption(): Promise<void>;
|
|
54
55
|
createClusterIfNotExists(clusterName: string, region?: string): Promise<void>;
|
|
55
|
-
assertClusterHealthyStatusWithRetry(name: string, visibilityTimeout?: number, totalTimeout?: number): Promise<void>;
|
|
56
|
+
assertClusterHealthyStatusWithRetry(name: string, visibilityTimeout?: number, totalTimeout?: number, maxRetries?: number): Promise<void>;
|
|
56
57
|
clickAlphaTab(): Promise<void>;
|
|
57
58
|
clickDevTab(): Promise<void>;
|
|
58
59
|
clickStableTab(): Promise<void>;
|
|
@@ -39,6 +39,7 @@ class ClusterPage {
|
|
|
39
39
|
cluster;
|
|
40
40
|
clusterHealthiness;
|
|
41
41
|
clusterLink;
|
|
42
|
+
clusterVersion;
|
|
42
43
|
dialog;
|
|
43
44
|
constructor(page, testInfo) {
|
|
44
45
|
this.page = page;
|
|
@@ -106,6 +107,7 @@ class ClusterPage {
|
|
|
106
107
|
this.clusterLink = (clusterName) => this.cluster(clusterName).getByRole('link', {
|
|
107
108
|
name: clusterName,
|
|
108
109
|
});
|
|
110
|
+
this.clusterVersion = (clusterName, versionText) => this.cluster(clusterName).getByText(versionText);
|
|
109
111
|
}
|
|
110
112
|
async clickClusterBanner() {
|
|
111
113
|
await this.page
|
|
@@ -296,11 +298,11 @@ class ClusterPage {
|
|
|
296
298
|
await this.assertClusterHealthyStatusWithRetry(clusterName, 120000, 600000);
|
|
297
299
|
}
|
|
298
300
|
}
|
|
299
|
-
async assertClusterHealthyStatusWithRetry(name, visibilityTimeout = 100000, totalTimeout = 500000) {
|
|
301
|
+
async assertClusterHealthyStatusWithRetry(name, visibilityTimeout = 100000, totalTimeout = 500000, maxRetries) {
|
|
300
302
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.clusterHealthiness(name), {
|
|
301
303
|
visibilityTimeout: visibilityTimeout,
|
|
302
304
|
totalTimeout: totalTimeout,
|
|
303
|
-
maxRetries: 5,
|
|
305
|
+
maxRetries: maxRetries ?? 5,
|
|
304
306
|
preAction: async () => {
|
|
305
307
|
await this.page.reload();
|
|
306
308
|
await (0, test_1.expect)(this.cluster(name)).toBeVisible({ timeout: 10000 });
|
|
@@ -26,7 +26,6 @@ const testUser = process.env.IS_MIGRATION === 'true'
|
|
|
26
26
|
password: process.env.C8_PASSWORD,
|
|
27
27
|
}
|
|
28
28
|
: (0, users_1.getTestUser)('twentyFirstUser');
|
|
29
|
-
_8_10_1.test.describe.configure({ mode: 'serial' });
|
|
30
29
|
_8_10_1.test.describe('SaaS Migration Path Tests', () => {
|
|
31
30
|
_8_10_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
32
31
|
// Skip if not in migration mode
|
|
@@ -39,7 +38,7 @@ _8_10_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
39
38
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
40
39
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
41
40
|
});
|
|
42
|
-
(0, _8_10_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({
|
|
41
|
+
(0, _8_10_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
|
|
43
42
|
_8_10_1.test.slow();
|
|
44
43
|
await _8_10_1.test.step('Navigate to SaaS Upgrade Section', async () => {
|
|
45
44
|
await homePage.clickClusters();
|
|
@@ -47,7 +46,7 @@ _8_10_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
47
46
|
await clusterDetailsPage.performClusterUpdate();
|
|
48
47
|
await homePage.clickClusters();
|
|
49
48
|
await clusterPage.assertClusterHealthyStatusWithRetry('Test Cluster');
|
|
50
|
-
await (0, test_1.expect)(
|
|
49
|
+
await (0, test_1.expect)(clusterPage.clusterVersion('Test Cluster', '8.10')).toBeVisible();
|
|
51
50
|
});
|
|
52
51
|
});
|
|
53
52
|
(0, _8_10_1.test)('Basic Navigation After SaaS Upgrade', async ({ homePage, appsPage, modelerHomePage, operateHomePage, optimizeHomePage, taskPanelPage, ocIdentityHomePage, }) => {
|
|
@@ -96,62 +95,19 @@ _8_10_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
96
95
|
});
|
|
97
96
|
});
|
|
98
97
|
});
|
|
99
|
-
(0, _8_10_1.test)('Assert
|
|
100
|
-
_8_10_1.test.slow();
|
|
101
|
-
// Use the same fixed names that were created in the pre-upgrade smoke tests
|
|
102
|
-
const processName = 'Zeebe_User_Task_ProcessUpgradeTest';
|
|
103
|
-
const reportName = 'UpgradeTestReport';
|
|
104
|
-
const clusterName = 'Test Cluster';
|
|
105
|
-
await _8_10_1.test.step('View Process Instance in Operate', async () => {
|
|
106
|
-
await appsPage.clickCamundaApps();
|
|
107
|
-
await appsPage.clickOperate(clusterName);
|
|
108
|
-
await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({
|
|
109
|
-
timeout: 120000,
|
|
110
|
-
});
|
|
111
|
-
await operateHomePage.clickProcessesTab();
|
|
112
|
-
await operateProcessesPage.clickProcessCompletedCheckbox();
|
|
113
|
-
await operateProcessesPage.clickProcessInstanceLink(processName);
|
|
114
|
-
await operateProcessInstancePage.assertProcessCompleteStatusWithRetry();
|
|
115
|
-
});
|
|
116
|
-
await _8_10_1.test.step('View Process Instance in Tasklist', async () => {
|
|
117
|
-
await appsPage.clickCamundaApps();
|
|
118
|
-
await appsPage.clickTasklist(clusterName);
|
|
119
|
-
await taskPanelPage.filterBy('Completed');
|
|
120
|
-
await (0, test_1.expect)(page.getByRole('heading', { name: 'completed' })).toBeVisible({
|
|
121
|
-
timeout: 45000,
|
|
122
|
-
});
|
|
123
|
-
await (0, test_1.expect)(page.getByText(processName)).toBeVisible({ timeout: 60000 });
|
|
124
|
-
});
|
|
125
|
-
await _8_10_1.test.step('View Report in Optimize', async () => {
|
|
126
|
-
await appsPage.clickCamundaApps();
|
|
127
|
-
await appsPage.clickOptimize(clusterName);
|
|
128
|
-
await optimizeHomePage.clickCollectionsLink();
|
|
129
|
-
// Look for the specific report created during pre-upgrade smoke tests
|
|
130
|
-
await (0, test_1.expect)(page.getByText(reportName)).toBeVisible({
|
|
131
|
-
timeout: 60000,
|
|
132
|
-
});
|
|
133
|
-
await page.getByText(reportName).click();
|
|
134
|
-
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance, page);
|
|
135
|
-
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance).toBeVisible({
|
|
136
|
-
timeout: 90000,
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
(0, _8_10_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, }) => {
|
|
98
|
+
(0, _8_10_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, homePage, consoleOrganizationsPage, }) => {
|
|
141
99
|
await _8_10_1.test.step('Verify Organization Settings Persist', async () => {
|
|
142
100
|
await appsPage.clickCamundaApps();
|
|
143
101
|
await appsPage.clickConsoleLink();
|
|
144
|
-
await
|
|
145
|
-
// Verify organization name and settings
|
|
146
|
-
await (0, test_1.expect)(page.getByTestId('organization-name')).toBeVisible();
|
|
147
|
-
await (0, test_1.expect)(page.getByTestId('organization-members')).toBeVisible();
|
|
102
|
+
await homePage.organizationTab.click();
|
|
148
103
|
});
|
|
149
104
|
await _8_10_1.test.step('Verify User Roles and Permissions Persist', async () => {
|
|
150
|
-
await
|
|
105
|
+
await consoleOrganizationsPage.clickUsersTab();
|
|
151
106
|
// Verify existing users still have correct roles
|
|
152
|
-
await (0, test_1.expect)(page.
|
|
153
|
-
await (0, test_1.expect)(page.
|
|
154
|
-
await (0, test_1.expect)(page.
|
|
107
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Owner' })).toBeVisible();
|
|
108
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Developer' })).toBeVisible();
|
|
109
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Modeler' })).toBeVisible();
|
|
110
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Admin' })).toBeVisible();
|
|
155
111
|
});
|
|
156
112
|
});
|
|
157
113
|
(0, _8_10_1.test)('Assert Connectors Still Function After SaaS Upgrade @tasklistV2', async ({ operateHomePage, appsPage, operateProcessesPage, operateProcessInstancePage, }) => {
|
|
@@ -26,7 +26,6 @@ const testUser = process.env.IS_MIGRATION === 'true'
|
|
|
26
26
|
password: process.env.C8_PASSWORD,
|
|
27
27
|
}
|
|
28
28
|
: (0, users_1.getTestUser)('twentyFirstUser');
|
|
29
|
-
_8_7_1.test.describe.configure({ mode: 'serial' });
|
|
30
29
|
_8_7_1.test.describe('SaaS Migration Path Tests', () => {
|
|
31
30
|
_8_7_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
32
31
|
if (process.env.IS_MIGRATION !== 'true') {
|
|
@@ -93,6 +92,8 @@ _8_7_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
93
92
|
// Use the same fixed names that were created in the pre-upgrade smoke tests
|
|
94
93
|
const processName = 'Zeebe_User_Task_ProcessUpgradeTest';
|
|
95
94
|
const reportName = 'UpgradeTestReport';
|
|
95
|
+
const task1Name = 'zeebeUserTaskWithFormUpgradeTest1';
|
|
96
|
+
const task2Name = 'zeebeUserTaskWithFormUpgradeTest2';
|
|
96
97
|
const clusterName = 'Test Cluster';
|
|
97
98
|
await _8_7_1.test.step('View Process Instance in Operate', async () => {
|
|
98
99
|
await appsPage.clickCamundaApps();
|
|
@@ -112,7 +113,12 @@ _8_7_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
112
113
|
await (0, test_1.expect)(page.getByRole('heading', { name: 'completed' })).toBeVisible({
|
|
113
114
|
timeout: 45000,
|
|
114
115
|
});
|
|
115
|
-
|
|
116
|
+
(0, test_1.expect)(page.getByText(task1Name)).toBeVisible({
|
|
117
|
+
timeout: 60000,
|
|
118
|
+
});
|
|
119
|
+
await (0, test_1.expect)(page.getByText(task2Name)).toBeVisible({
|
|
120
|
+
timeout: 60000,
|
|
121
|
+
});
|
|
116
122
|
});
|
|
117
123
|
await _8_7_1.test.step('View Report in Optimize', async () => {
|
|
118
124
|
await appsPage.clickCamundaApps();
|
|
@@ -122,8 +128,8 @@ _8_7_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
122
128
|
timeout: 60000,
|
|
123
129
|
});
|
|
124
130
|
await page.getByText(reportName).click();
|
|
125
|
-
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance, page);
|
|
126
|
-
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance).toBeVisible({
|
|
131
|
+
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance.first(), page);
|
|
132
|
+
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance.first()).toBeVisible({
|
|
127
133
|
timeout: 90000,
|
|
128
134
|
});
|
|
129
135
|
});
|
|
@@ -38,6 +38,7 @@ _8_7_1.test.describe('Cluster Setup Tests', () => {
|
|
|
38
38
|
await clusterDetailsPage.assertComponentsHealth();
|
|
39
39
|
});
|
|
40
40
|
(0, _8_7_1.test)('Create AWS Cluster', async ({ page, loginPage, homePage, clusterPage, clusterDetailsPage, }, testInfo) => {
|
|
41
|
+
_8_7_1.test.skip(process.env.IS_MIGRATION === 'true', 'Skipping AWS Cluster creation during upgrade testing');
|
|
41
42
|
_8_7_1.test.slow();
|
|
42
43
|
const clusterName = 'AWS Cluster';
|
|
43
44
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
/**
|
|
4
|
-
* SaaS Migration Path User Flows (8.
|
|
4
|
+
* SaaS Migration Path User Flows (8.7 → 8.8)
|
|
5
5
|
*
|
|
6
6
|
* This test suite focuses on UI upgrade automation and basic validation.
|
|
7
7
|
* Comprehensive functionality validation is handled by smoke test comparison
|
|
@@ -24,7 +24,6 @@ const testUser = process.env.IS_MIGRATION === 'true'
|
|
|
24
24
|
password: process.env.C8_PASSWORD,
|
|
25
25
|
}
|
|
26
26
|
: (0, users_1.getTestUser)('twentyFirstUser');
|
|
27
|
-
_8_8_1.test.describe.configure({ mode: 'serial' });
|
|
28
27
|
_8_8_1.test.describe('SaaS Migration Path Tests', () => {
|
|
29
28
|
_8_8_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
30
29
|
if (process.env.IS_MIGRATION !== 'true') {
|
|
@@ -36,15 +35,15 @@ _8_8_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
36
35
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
37
36
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
38
37
|
});
|
|
39
|
-
(0, _8_8_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({
|
|
38
|
+
(0, _8_8_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
|
|
40
39
|
_8_8_1.test.slow();
|
|
41
40
|
await _8_8_1.test.step('Navigate to SaaS Upgrade Section', async () => {
|
|
42
41
|
await homePage.clickClusters();
|
|
43
42
|
await clusterPage.clickClusterLink('Test Cluster');
|
|
44
43
|
await clusterDetailsPage.performClusterUpdate();
|
|
45
44
|
await homePage.clickClusters();
|
|
46
|
-
await clusterPage.assertClusterHealthyStatusWithRetry('Test Cluster');
|
|
47
|
-
await (0, test_1.expect)(
|
|
45
|
+
await clusterPage.assertClusterHealthyStatusWithRetry('Test Cluster', undefined, undefined, true);
|
|
46
|
+
await (0, test_1.expect)(clusterPage.clusterVersion('Test Cluster', '8.8')).toBeVisible();
|
|
48
47
|
});
|
|
49
48
|
});
|
|
50
49
|
(0, _8_8_1.test)('Basic Navigation After SaaS Upgrade', async ({ homePage, appsPage, modelerHomePage, operateHomePage, optimizeHomePage, taskPanelPage, ocIdentityHomePage, }) => {
|
|
@@ -98,6 +97,8 @@ _8_8_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
98
97
|
// Use the same fixed names that were created in the pre-upgrade smoke tests
|
|
99
98
|
const processName = 'Zeebe_User_Task_ProcessUpgradeTest';
|
|
100
99
|
const reportName = 'UpgradeTestReport';
|
|
100
|
+
const task1Name = 'zeebeUserTaskWithFormUpgradeTest1';
|
|
101
|
+
const task2Name = 'zeebeUserTaskWithFormUpgradeTest2';
|
|
101
102
|
const clusterName = 'Test Cluster';
|
|
102
103
|
await _8_8_1.test.step('View Process Instance in Operate', async () => {
|
|
103
104
|
await appsPage.clickCamundaApps();
|
|
@@ -117,7 +118,12 @@ _8_8_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
117
118
|
await (0, test_1.expect)(page.getByRole('heading', { name: 'completed' })).toBeVisible({
|
|
118
119
|
timeout: 45000,
|
|
119
120
|
});
|
|
120
|
-
await (0, test_1.expect)(page.getByText(
|
|
121
|
+
await (0, test_1.expect)(page.getByText(task1Name)).toBeVisible({
|
|
122
|
+
timeout: 60000,
|
|
123
|
+
});
|
|
124
|
+
await (0, test_1.expect)(page.getByText(task2Name)).toBeVisible({
|
|
125
|
+
timeout: 60000,
|
|
126
|
+
});
|
|
121
127
|
});
|
|
122
128
|
await _8_8_1.test.step('View Report in Optimize', async () => {
|
|
123
129
|
await appsPage.clickCamundaApps();
|
|
@@ -128,27 +134,25 @@ _8_8_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
128
134
|
timeout: 60000,
|
|
129
135
|
});
|
|
130
136
|
await page.getByText(reportName).click();
|
|
131
|
-
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance, page);
|
|
132
|
-
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance).toBeVisible({
|
|
137
|
+
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance.first(), page);
|
|
138
|
+
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance.first()).toBeVisible({
|
|
133
139
|
timeout: 90000,
|
|
134
140
|
});
|
|
135
141
|
});
|
|
136
142
|
});
|
|
137
|
-
(0, _8_8_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, }) => {
|
|
143
|
+
(0, _8_8_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, homePage, consoleOrganizationsPage, }) => {
|
|
138
144
|
await _8_8_1.test.step('Verify Organization Settings Persist', async () => {
|
|
139
145
|
await appsPage.clickCamundaApps();
|
|
140
146
|
await appsPage.clickConsoleLink();
|
|
141
|
-
await
|
|
142
|
-
// Verify organization name and settings
|
|
143
|
-
await (0, test_1.expect)(page.getByTestId('organization-name')).toBeVisible();
|
|
144
|
-
await (0, test_1.expect)(page.getByTestId('organization-members')).toBeVisible();
|
|
147
|
+
await homePage.organizationTab.click();
|
|
145
148
|
});
|
|
146
149
|
await _8_8_1.test.step('Verify User Roles and Permissions Persist', async () => {
|
|
147
|
-
await
|
|
150
|
+
await consoleOrganizationsPage.clickUsersTab();
|
|
148
151
|
// Verify existing users still have correct roles
|
|
149
|
-
await (0, test_1.expect)(page.
|
|
150
|
-
await (0, test_1.expect)(page.
|
|
151
|
-
await (0, test_1.expect)(page.
|
|
152
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Owner' })).toBeVisible();
|
|
153
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Developer' })).toBeVisible();
|
|
154
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Modeler' })).toBeVisible();
|
|
155
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Admin' })).toBeVisible();
|
|
152
156
|
});
|
|
153
157
|
});
|
|
154
158
|
(0, _8_8_1.test)('Assert Connectors Still Function After SaaS Upgrade @tasklistV2', async ({ operateHomePage, appsPage, operateProcessesPage, operateProcessInstancePage, }) => {
|
|
@@ -26,7 +26,6 @@ const testUser = process.env.IS_MIGRATION === 'true'
|
|
|
26
26
|
password: process.env.C8_PASSWORD,
|
|
27
27
|
}
|
|
28
28
|
: (0, users_1.getTestUser)('twentyFirstUser');
|
|
29
|
-
_8_9_1.test.describe.configure({ mode: 'serial' });
|
|
30
29
|
_8_9_1.test.describe('SaaS Migration Path Tests', () => {
|
|
31
30
|
_8_9_1.test.beforeEach(async ({ page, loginPage }, testInfo) => {
|
|
32
31
|
// Skip if not in migration mode
|
|
@@ -39,16 +38,13 @@ _8_9_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
39
38
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
40
39
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
41
40
|
});
|
|
42
|
-
(0, _8_9_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({
|
|
43
|
-
|
|
44
|
-
await
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
await clusterPage.assertClusterHealthyStatusWithRetry('Test Cluster');
|
|
50
|
-
await (0, test_1.expect)(page.getByText(process.env.MINOR_VERSION)).toBeVisible();
|
|
51
|
-
});
|
|
41
|
+
(0, _8_9_1.test)('SaaS UI Upgrade Flow Automation @saasUpgrade', async ({ homePage, clusterPage, clusterDetailsPage, }) => {
|
|
42
|
+
await homePage.clickClusters();
|
|
43
|
+
await clusterPage.clickClusterLink('Test Cluster');
|
|
44
|
+
await clusterDetailsPage.performClusterUpdate();
|
|
45
|
+
await homePage.clickClusters();
|
|
46
|
+
await clusterPage.assertClusterHealthyStatusWithRetry('Test Cluster');
|
|
47
|
+
await (0, test_1.expect)(clusterPage.clusterVersion('Test Cluster', '8.9')).toBeVisible();
|
|
52
48
|
});
|
|
53
49
|
(0, _8_9_1.test)('Basic Navigation After SaaS Upgrade', async ({ homePage, appsPage, modelerHomePage, operateHomePage, optimizeHomePage, taskPanelPage, ocIdentityHomePage, }) => {
|
|
54
50
|
const clusterName = 'Test Cluster';
|
|
@@ -100,6 +96,8 @@ _8_9_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
100
96
|
_8_9_1.test.slow();
|
|
101
97
|
// Use the same fixed names that were created in the pre-upgrade smoke tests
|
|
102
98
|
const processName = 'Zeebe_User_Task_ProcessUpgradeTest';
|
|
99
|
+
const task1Name = 'zeebeUserTaskWithFormUpgradeTest1';
|
|
100
|
+
const task2Name = 'zeebeUserTaskWithFormUpgradeTest2';
|
|
103
101
|
const reportName = 'UpgradeTestReport';
|
|
104
102
|
const clusterName = 'Test Cluster';
|
|
105
103
|
await _8_9_1.test.step('View Process Instance in Operate', async () => {
|
|
@@ -120,7 +118,12 @@ _8_9_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
120
118
|
await (0, test_1.expect)(page.getByRole('heading', { name: 'completed' })).toBeVisible({
|
|
121
119
|
timeout: 45000,
|
|
122
120
|
});
|
|
123
|
-
await (0, test_1.expect)(page.getByText(
|
|
121
|
+
await (0, test_1.expect)(page.getByText(task1Name)).toBeVisible({
|
|
122
|
+
timeout: 60000,
|
|
123
|
+
});
|
|
124
|
+
await (0, test_1.expect)(page.getByText(task2Name)).toBeVisible({
|
|
125
|
+
timeout: 60000,
|
|
126
|
+
});
|
|
124
127
|
});
|
|
125
128
|
await _8_9_1.test.step('View Report in Optimize', async () => {
|
|
126
129
|
await appsPage.clickCamundaApps();
|
|
@@ -131,27 +134,25 @@ _8_9_1.test.describe('SaaS Migration Path Tests', () => {
|
|
|
131
134
|
timeout: 60000,
|
|
132
135
|
});
|
|
133
136
|
await page.getByText(reportName).click();
|
|
134
|
-
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance, page);
|
|
135
|
-
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance).toBeVisible({
|
|
137
|
+
await optimizeReportPage.waitUntilLocatorIsVisible(optimizeReportPage.oneUserTaskInstance.first(), page);
|
|
138
|
+
await (0, test_1.expect)(optimizeReportPage.oneUserTaskInstance.first()).toBeVisible({
|
|
136
139
|
timeout: 90000,
|
|
137
140
|
});
|
|
138
141
|
});
|
|
139
142
|
});
|
|
140
|
-
(0, _8_9_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, }) => {
|
|
143
|
+
(0, _8_9_1.test)('Assert SaaS Organization Data Persists After Upgrade', async ({ page, appsPage, homePage, consoleOrganizationsPage, }) => {
|
|
141
144
|
await _8_9_1.test.step('Verify Organization Settings Persist', async () => {
|
|
142
145
|
await appsPage.clickCamundaApps();
|
|
143
146
|
await appsPage.clickConsoleLink();
|
|
144
|
-
await
|
|
145
|
-
// Verify organization name and settings
|
|
146
|
-
await (0, test_1.expect)(page.getByTestId('organization-name')).toBeVisible();
|
|
147
|
-
await (0, test_1.expect)(page.getByTestId('organization-members')).toBeVisible();
|
|
147
|
+
await homePage.organizationTab.click();
|
|
148
148
|
});
|
|
149
149
|
await _8_9_1.test.step('Verify User Roles and Permissions Persist', async () => {
|
|
150
|
-
await
|
|
150
|
+
await consoleOrganizationsPage.clickUsersTab();
|
|
151
151
|
// Verify existing users still have correct roles
|
|
152
|
-
await (0, test_1.expect)(page.
|
|
153
|
-
await (0, test_1.expect)(page.
|
|
154
|
-
await (0, test_1.expect)(page.
|
|
152
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Owner' })).toBeVisible();
|
|
153
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Developer' })).toBeVisible();
|
|
154
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Modeler' })).toBeVisible();
|
|
155
|
+
await (0, test_1.expect)(page.getByRole('cell', { name: 'Admin' })).toBeVisible();
|
|
155
156
|
});
|
|
156
157
|
});
|
|
157
158
|
(0, _8_9_1.test)('Assert Connectors Still Function After SaaS Upgrade @tasklistV2', async ({ operateHomePage, appsPage, operateProcessesPage, operateProcessInstancePage, }) => {
|