@camunda/e2e-test-suite 0.0.270 → 0.0.272
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.js +14 -3
- package/dist/pages/8.10/ClusterPage.d.ts +1 -0
- package/dist/pages/8.10/ClusterPage.js +12 -3
- package/dist/pages/8.10/ClusterSecretsPage.js +6 -4
- package/dist/pages/8.10/ConsoleOrganizationPage.js +13 -29
- package/dist/pages/8.10/ModelerCreatePage.js +1 -1
- package/dist/pages/8.6/ClusterDetailsPage.js +16 -4
- package/dist/pages/8.6/ClusterPage.d.ts +1 -0
- package/dist/pages/8.6/ClusterPage.js +9 -3
- package/dist/pages/8.6/ClusterSecretsPage.js +4 -2
- package/dist/pages/8.6/ConsoleOrganizationPage.js +13 -29
- package/dist/pages/8.6/ModelerCreatePage.js +1 -1
- package/dist/pages/8.7/ClusterDetailsPage.js +20 -5
- package/dist/pages/8.7/ClusterPage.d.ts +1 -0
- package/dist/pages/8.7/ClusterPage.js +12 -3
- package/dist/pages/8.7/ConsoleOrganizationPage.js +13 -29
- package/dist/pages/8.7/ModelerCreatePage.js +1 -1
- package/dist/pages/8.8/ClusterDetailsPage.js +4 -1
- package/dist/pages/8.8/ClusterPage.d.ts +1 -0
- package/dist/pages/8.8/ClusterPage.js +12 -3
- package/dist/pages/8.8/ClusterSecretsPage.js +6 -4
- package/dist/pages/8.8/ConsoleOrganizationPage.js +13 -29
- package/dist/pages/8.9/ClusterDetailsPage.js +13 -3
- package/dist/pages/8.9/ClusterPage.d.ts +1 -0
- package/dist/pages/8.9/ClusterPage.js +12 -3
- package/dist/pages/8.9/ClusterSecretsPage.js +6 -4
- package/dist/pages/8.9/ConsoleOrganizationPage.js +13 -29
- package/dist/tests/8.10/test-setup.spec.js +2 -4
- package/dist/tests/8.6/test-setup.spec.js +2 -4
- package/dist/tests/8.7/console-user-flows.spec.js +1 -1
- package/dist/tests/8.7/test-setup.spec.js +2 -4
- package/dist/tests/8.8/test-setup.spec.js +2 -4
- package/dist/tests/8.9/test-setup.spec.js +2 -4
- package/package.json +1 -1
|
@@ -51,12 +51,20 @@ class ClusterDetailsPage {
|
|
|
51
51
|
name: 'Create your first Client',
|
|
52
52
|
});
|
|
53
53
|
this.clientNameTextbox = page.getByRole('textbox', { name: 'Client Name' });
|
|
54
|
-
this.tasklistCheckbox = page
|
|
54
|
+
this.tasklistCheckbox = page
|
|
55
|
+
.getByRole('dialog')
|
|
56
|
+
.locator('label')
|
|
57
|
+
.filter({ hasText: 'Tasklist' });
|
|
55
58
|
this.optimizeCheckbox = page
|
|
59
|
+
.getByRole('dialog')
|
|
56
60
|
.locator('label')
|
|
57
61
|
.filter({ hasText: /^Optimize API$/ });
|
|
58
|
-
this.operateCheckbox = page
|
|
62
|
+
this.operateCheckbox = page
|
|
63
|
+
.getByRole('dialog')
|
|
64
|
+
.locator('label')
|
|
65
|
+
.filter({ hasText: 'Operate' });
|
|
59
66
|
this.secretsCheckbox = page
|
|
67
|
+
.getByRole('dialog')
|
|
60
68
|
.locator('label')
|
|
61
69
|
.filter({ hasText: /^Administration API - Resource: Secrets$/ });
|
|
62
70
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
@@ -111,7 +119,10 @@ class ClusterDetailsPage {
|
|
|
111
119
|
this.envVarsTab = this.clientCredentialsDialog.getByRole('tab', {
|
|
112
120
|
name: 'Env Vars',
|
|
113
121
|
});
|
|
114
|
-
this.zeebeCheckbox = page
|
|
122
|
+
this.zeebeCheckbox = page
|
|
123
|
+
.getByRole('dialog')
|
|
124
|
+
.locator('label')
|
|
125
|
+
.filter({ hasText: /^Zeebe$/ });
|
|
115
126
|
this.apiClientNameTextbox = page.getByRole('textbox', {
|
|
116
127
|
name: 'Client Name',
|
|
117
128
|
});
|
|
@@ -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 dialog: Locator;
|
|
36
37
|
constructor(page: Page, testInfo?: TestInfo);
|
|
37
38
|
clickClusterBanner(): Promise<void>;
|
|
38
39
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -39,12 +39,17 @@ class ClusterPage {
|
|
|
39
39
|
cluster;
|
|
40
40
|
clusterHealthiness;
|
|
41
41
|
clusterLink;
|
|
42
|
+
dialog;
|
|
42
43
|
constructor(page, testInfo) {
|
|
43
44
|
this.page = page;
|
|
44
45
|
this.testInfo = testInfo;
|
|
45
|
-
this.createNewClusterButton =
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
this.createNewClusterButton = this.createNewClusterButton = page
|
|
47
|
+
.getByRole('button', {
|
|
48
|
+
name: 'Create new cluster',
|
|
49
|
+
})
|
|
50
|
+
.or(this.page.getByRole('button', {
|
|
51
|
+
name: 'Create cluster',
|
|
52
|
+
}));
|
|
48
53
|
this.clusterNameInput = page.getByPlaceholder('Enter a name for the cluster');
|
|
49
54
|
this.createClusterButton = page.getByRole('button', {
|
|
50
55
|
name: 'Create cluster',
|
|
@@ -100,6 +105,7 @@ class ClusterPage {
|
|
|
100
105
|
this.clusterLink = (clusterName) => this.cluster(clusterName).getByRole('link', {
|
|
101
106
|
name: clusterName,
|
|
102
107
|
});
|
|
108
|
+
this.dialog = page.getByRole('dialog');
|
|
103
109
|
}
|
|
104
110
|
async clickClusterBanner() {
|
|
105
111
|
await this.page
|
|
@@ -129,6 +135,8 @@ class ClusterPage {
|
|
|
129
135
|
await (0, test_1.expect)(deleteButton).toBeVisible({ timeout: 60000 });
|
|
130
136
|
await deleteButton.click({ force: true, timeout: 60000 });
|
|
131
137
|
}
|
|
138
|
+
await (0, test_1.expect)(this.dialog).toBeVisible({ timeout: 60000 });
|
|
139
|
+
await (0, test_1.expect)(this.confirmDeleteInput).toBeVisible({ timeout: 60000 });
|
|
132
140
|
await this.confirmDeleteInput.click({ force: true, timeout: 60000 });
|
|
133
141
|
await this.confirmDeleteInput.fill('DELETE', { timeout: 60000 });
|
|
134
142
|
const dangerDeleteButtons = await this.dangerDeleteButton.all();
|
|
@@ -137,6 +145,7 @@ class ClusterPage {
|
|
|
137
145
|
await (0, test_1.expect)(this.page.getByText('Deleting...')).not.toBeVisible({
|
|
138
146
|
timeout: 60000,
|
|
139
147
|
});
|
|
148
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({ timeout: 60000 });
|
|
140
149
|
// Refresh the list of delete buttons
|
|
141
150
|
deleteButtons = this.cluster(name).getByRole('button', {
|
|
142
151
|
name: 'Delete',
|
|
@@ -28,8 +28,10 @@ class ClusterSecretsPage {
|
|
|
28
28
|
this.createNewSecretButton = page.getByRole('button', {
|
|
29
29
|
name: 'Create new secret',
|
|
30
30
|
});
|
|
31
|
-
this.keyInput = page.getByLabel('Key');
|
|
32
|
-
this.valueInput = page
|
|
31
|
+
this.keyInput = page.getByRole('dialog').getByLabel('Key');
|
|
32
|
+
this.valueInput = page
|
|
33
|
+
.getByRole('dialog')
|
|
34
|
+
.getByLabel('Value', { exact: true });
|
|
33
35
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
34
36
|
this.optionsButton = page
|
|
35
37
|
.getByRole('cell', { name: 'Options' })
|
|
@@ -44,7 +46,7 @@ class ClusterSecretsPage {
|
|
|
44
46
|
this.dialog = page.getByRole('dialog');
|
|
45
47
|
this.importButton = page.getByRole('button', { name: 'Import', exact: true });
|
|
46
48
|
this.fromFileButton = page.getByText('from File', { exact: true });
|
|
47
|
-
this.bulkImportTextArea = page.locator('[id="
|
|
49
|
+
this.bulkImportTextArea = page.locator('[id="bulk-import-content"]');
|
|
48
50
|
this.dialogImportButton = this.page
|
|
49
51
|
.getByRole('dialog')
|
|
50
52
|
.getByRole('button', { name: 'Import', exact: true });
|
|
@@ -208,7 +210,7 @@ class ClusterSecretsPage {
|
|
|
208
210
|
await this.bulkImportTextArea.click();
|
|
209
211
|
await this.bulkImportTextArea.fill(mapped);
|
|
210
212
|
await this.dialogImportButton.click();
|
|
211
|
-
await (0, test_1.expect)(this.
|
|
213
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({
|
|
212
214
|
timeout: 60000,
|
|
213
215
|
});
|
|
214
216
|
await (0, test_1.expect)(this.createNewSecretButton).toBeVisible({
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConsoleOrganizationPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
7
|
class ConsoleOrganizationPage {
|
|
7
8
|
page;
|
|
8
9
|
usersTab;
|
|
@@ -59,7 +60,7 @@ class ConsoleOrganizationPage {
|
|
|
59
60
|
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
|
|
60
61
|
this.settingsTab = page.getByRole('tab', { name: 'Settings' });
|
|
61
62
|
this.optInButton = page.getByRole('button', { name: 'Opt-in', exact: true });
|
|
62
|
-
this.optInCheckbox = page.getByLabel('I understand and agree to
|
|
63
|
+
this.optInCheckbox = page.getByLabel('I understand and agree to');
|
|
63
64
|
this.newContextPadButton = page.getByRole('switch').last();
|
|
64
65
|
this.newContextPadButtonText = page
|
|
65
66
|
.locator('[class= "cds--toggle__text"]')
|
|
@@ -246,7 +247,7 @@ class ConsoleOrganizationPage {
|
|
|
246
247
|
}
|
|
247
248
|
//Opt-in The Alpha Feature
|
|
248
249
|
const alphaFeatureOptInButton = alphaFeature.getByRole('button', {
|
|
249
|
-
name: 'Opt
|
|
250
|
+
name: 'Opt in to enable',
|
|
250
251
|
});
|
|
251
252
|
if (await alphaFeatureOptInButton.isVisible({ timeout: 10000 })) {
|
|
252
253
|
await alphaFeatureOptInButton.click({ timeout: 90000 });
|
|
@@ -273,33 +274,9 @@ class ConsoleOrganizationPage {
|
|
|
273
274
|
await (0, test_1.expect)(alphaFeature.locator('[class= "cds--toggle__text"]')).toHaveText('Enabled');
|
|
274
275
|
}
|
|
275
276
|
async scrollToOptInCheckbox() {
|
|
276
|
-
await this.page
|
|
277
|
-
.
|
|
278
|
-
|
|
279
|
-
await this.page
|
|
280
|
-
.getByText('Pre-release. The Customer')
|
|
281
|
-
.scrollIntoViewIfNeeded();
|
|
282
|
-
await this.page
|
|
283
|
-
.getByText('Confidential Information. The')
|
|
284
|
-
.scrollIntoViewIfNeeded();
|
|
285
|
-
await this.page
|
|
286
|
-
.getByText('THESE TERMS DO NOT ENTITLE')
|
|
287
|
-
.scrollIntoViewIfNeeded();
|
|
288
|
-
await this.page
|
|
289
|
-
.getByText('Rights and Obligations Upon')
|
|
290
|
-
.scrollIntoViewIfNeeded();
|
|
291
|
-
await this.page
|
|
292
|
-
.getByText('NOTWITHSTANDING ANYTHING TO')
|
|
293
|
-
.scrollIntoViewIfNeeded();
|
|
294
|
-
await this.page
|
|
295
|
-
.getByRole('heading', { name: 'General' })
|
|
296
|
-
.scrollIntoViewIfNeeded();
|
|
297
|
-
await this.page
|
|
298
|
-
.getByText('Liability. Camunda is liable')
|
|
299
|
-
.scrollIntoViewIfNeeded();
|
|
300
|
-
await this.page
|
|
301
|
-
.getByLabel('I understand and agree to the')
|
|
302
|
-
.scrollIntoViewIfNeeded();
|
|
277
|
+
await this.page.locator('.ps-contract-scroll').evaluate((el) => {
|
|
278
|
+
el.scrollTop = el.scrollHeight;
|
|
279
|
+
});
|
|
303
280
|
}
|
|
304
281
|
async checkOptInCheckbox() {
|
|
305
282
|
await this.optInCheckbox.check({ timeout: 90000 });
|
|
@@ -323,6 +300,13 @@ class ConsoleOrganizationPage {
|
|
|
323
300
|
}
|
|
324
301
|
}
|
|
325
302
|
async optInToAlphaFeatures() {
|
|
303
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rows.first(), {
|
|
304
|
+
visibilityTimeout: 60000,
|
|
305
|
+
totalTimeout: 140000,
|
|
306
|
+
postAction: async () => {
|
|
307
|
+
await this.page.reload();
|
|
308
|
+
},
|
|
309
|
+
});
|
|
326
310
|
try {
|
|
327
311
|
await (0, test_1.expect)(this.optInButton).toBeVisible({ timeout: 30000 });
|
|
328
312
|
await this.clickOptInButton();
|
|
@@ -147,7 +147,7 @@ class ModelerCreatePage {
|
|
|
147
147
|
this.diagramBreadcrumb = page.locator('[data-test="breadcrumb-diagram"]');
|
|
148
148
|
this.renameDiagramNameButton = page.getByText('Rename');
|
|
149
149
|
this.diagramNameInput = page.locator('[data-test="editable-input"]');
|
|
150
|
-
this.variableInput = page.
|
|
150
|
+
this.variableInput = page.locator('textarea#variables-json');
|
|
151
151
|
this.embedFormButton = page.getByRole('button', { name: 'Link form' });
|
|
152
152
|
this.embedButton = page.locator('[data-test="confirm-move"]');
|
|
153
153
|
this.newForm = page
|
|
@@ -48,10 +48,22 @@ class ClusterDetailsPage {
|
|
|
48
48
|
name: 'Create your first Client',
|
|
49
49
|
});
|
|
50
50
|
this.clientNameTextbox = page.getByRole('textbox', { name: 'Client Name' });
|
|
51
|
-
this.tasklistCheckbox = page
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
this.tasklistCheckbox = page
|
|
52
|
+
.getByRole('dialog')
|
|
53
|
+
.locator('label.cds--checkbox-label')
|
|
54
|
+
.filter({ hasText: /^Tasklist$/ });
|
|
55
|
+
this.optimizeCheckbox = page
|
|
56
|
+
.getByRole('dialog')
|
|
57
|
+
.locator('label.cds--checkbox-label')
|
|
58
|
+
.filter({ hasText: /^Optimize$/ });
|
|
59
|
+
this.operateCheckbox = page
|
|
60
|
+
.getByRole('dialog')
|
|
61
|
+
.locator('label.cds--checkbox-label')
|
|
62
|
+
.filter({ hasText: /^Operate$/ });
|
|
63
|
+
this.secretsCheckbox = page
|
|
64
|
+
.getByRole('dialog')
|
|
65
|
+
.locator('label')
|
|
66
|
+
.filter({ hasText: /^Secrets$/ });
|
|
55
67
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
56
68
|
this.closeModalButton = page
|
|
57
69
|
.getByRole('dialog', { name: 'Client credentials', exact: true })
|
|
@@ -30,6 +30,7 @@ declare class ClusterPage {
|
|
|
30
30
|
readonly clusterHealthiness: (clusterName: string) => Locator;
|
|
31
31
|
readonly clusterLink: (clusterName: string) => Locator;
|
|
32
32
|
readonly clusterDeleteButton: (clusterName: string) => Locator;
|
|
33
|
+
readonly dialog: Locator;
|
|
33
34
|
constructor(page: Page);
|
|
34
35
|
clickClusterBanner(): Promise<void>;
|
|
35
36
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -36,11 +36,17 @@ class ClusterPage {
|
|
|
36
36
|
clusterHealthiness;
|
|
37
37
|
clusterLink;
|
|
38
38
|
clusterDeleteButton;
|
|
39
|
+
dialog;
|
|
39
40
|
constructor(page) {
|
|
40
41
|
this.page = page;
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
this.dialog = page.getByRole('dialog');
|
|
43
|
+
this.createNewClusterButton = this.createNewClusterButton = page
|
|
44
|
+
.getByRole('button', {
|
|
45
|
+
name: 'Create new cluster',
|
|
46
|
+
})
|
|
47
|
+
.or(this.page.getByRole('button', {
|
|
48
|
+
name: 'Create cluster',
|
|
49
|
+
}));
|
|
44
50
|
this.clusterNameInput = page.getByPlaceholder('Enter a name for the cluster');
|
|
45
51
|
this.createClusterButton = page.getByRole('button', {
|
|
46
52
|
name: 'Create cluster',
|
|
@@ -21,8 +21,10 @@ class ClusterSecretsPage {
|
|
|
21
21
|
this.createNewSecretButton = page.getByRole('button', {
|
|
22
22
|
name: 'Create new secret',
|
|
23
23
|
});
|
|
24
|
-
this.keyInput = page.getByLabel('Key');
|
|
25
|
-
this.valueInput = page
|
|
24
|
+
this.keyInput = page.getByRole('dialog').getByLabel('Key');
|
|
25
|
+
this.valueInput = page
|
|
26
|
+
.getByRole('dialog')
|
|
27
|
+
.getByLabel('Value', { exact: true });
|
|
26
28
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
27
29
|
this.optionsButton = page
|
|
28
30
|
.getByRole('cell', { name: 'Options' })
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConsoleOrganizationPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
7
|
class ConsoleOrganizationPage {
|
|
7
8
|
page;
|
|
8
9
|
usersTab;
|
|
@@ -67,7 +68,7 @@ class ConsoleOrganizationPage {
|
|
|
67
68
|
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
|
|
68
69
|
this.settingsTab = page.getByRole('tab', { name: 'Settings' });
|
|
69
70
|
this.optInButton = page.getByRole('button', { name: 'Opt-in', exact: true });
|
|
70
|
-
this.optInCheckbox = page.getByLabel('I understand and agree to
|
|
71
|
+
this.optInCheckbox = page.getByLabel('I understand and agree to');
|
|
71
72
|
this.optInAICheckbox = page.getByLabel('I understand and agree to Terms for AI Usage');
|
|
72
73
|
this.newContextPadButton = page.getByRole('switch').last();
|
|
73
74
|
this.newContextPadButtonText = page
|
|
@@ -281,33 +282,9 @@ class ConsoleOrganizationPage {
|
|
|
281
282
|
await this.optInButton.click({ timeout: 60000 });
|
|
282
283
|
}
|
|
283
284
|
async scrollToOptInCheckbox() {
|
|
284
|
-
await this.page
|
|
285
|
-
.
|
|
286
|
-
|
|
287
|
-
await this.page
|
|
288
|
-
.getByText('Pre-release. The Customer')
|
|
289
|
-
.scrollIntoViewIfNeeded();
|
|
290
|
-
await this.page
|
|
291
|
-
.getByText('Confidential Information. The')
|
|
292
|
-
.scrollIntoViewIfNeeded();
|
|
293
|
-
await this.page
|
|
294
|
-
.getByText('THESE TERMS DO NOT ENTITLE')
|
|
295
|
-
.scrollIntoViewIfNeeded();
|
|
296
|
-
await this.page
|
|
297
|
-
.getByText('Rights and Obligations Upon')
|
|
298
|
-
.scrollIntoViewIfNeeded();
|
|
299
|
-
await this.page
|
|
300
|
-
.getByText('NOTWITHSTANDING ANYTHING TO')
|
|
301
|
-
.scrollIntoViewIfNeeded();
|
|
302
|
-
await this.page
|
|
303
|
-
.getByRole('heading', { name: 'General' })
|
|
304
|
-
.scrollIntoViewIfNeeded();
|
|
305
|
-
await this.page
|
|
306
|
-
.getByText('Liability. Camunda is liable')
|
|
307
|
-
.scrollIntoViewIfNeeded();
|
|
308
|
-
await this.page
|
|
309
|
-
.getByLabel('I understand and agree to the')
|
|
310
|
-
.scrollIntoViewIfNeeded();
|
|
285
|
+
await this.page.locator('.ps-contract-scroll').evaluate((el) => {
|
|
286
|
+
el.scrollTop = el.scrollHeight;
|
|
287
|
+
});
|
|
311
288
|
}
|
|
312
289
|
async checkOptInCheckbox() {
|
|
313
290
|
await this.optInCheckbox.check({ timeout: 90000 });
|
|
@@ -335,7 +312,7 @@ class ConsoleOrganizationPage {
|
|
|
335
312
|
}
|
|
336
313
|
//Opt-in The Alpha Feature
|
|
337
314
|
const alphaFeatureOptInButton = alphaFeature.getByRole('button', {
|
|
338
|
-
name: 'Opt
|
|
315
|
+
name: 'Opt in to enable',
|
|
339
316
|
});
|
|
340
317
|
if (await alphaFeatureOptInButton.isVisible({ timeout: 10000 })) {
|
|
341
318
|
await alphaFeatureOptInButton.click({ timeout: 60000 });
|
|
@@ -395,6 +372,13 @@ class ConsoleOrganizationPage {
|
|
|
395
372
|
}
|
|
396
373
|
}
|
|
397
374
|
async optInToAlphaFeatures() {
|
|
375
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rows.first(), {
|
|
376
|
+
visibilityTimeout: 60000,
|
|
377
|
+
totalTimeout: 140000,
|
|
378
|
+
postAction: async () => {
|
|
379
|
+
await this.page.reload();
|
|
380
|
+
},
|
|
381
|
+
});
|
|
398
382
|
try {
|
|
399
383
|
await (0, test_1.expect)(this.optInButton).toBeVisible({ timeout: 30000 });
|
|
400
384
|
await this.clickOptInButton();
|
|
@@ -137,7 +137,7 @@ class ModelerCreatePage {
|
|
|
137
137
|
this.diagramBreadcrumb = page.locator('[data-test="breadcrumb-diagram"]');
|
|
138
138
|
this.renameDiagramNameButton = page.getByText('Rename');
|
|
139
139
|
this.diagramNameInput = page.locator('[data-test="editable-input"]');
|
|
140
|
-
this.variableInput = page.
|
|
140
|
+
this.variableInput = page.locator('textarea#variables-json');
|
|
141
141
|
this.embedFormButton = page.getByRole('button', { name: 'Link form' });
|
|
142
142
|
this.embedButton = page.locator('[data-test="confirm-move"]');
|
|
143
143
|
this.newForm = page
|
|
@@ -55,10 +55,22 @@ class ClusterDetailsPage {
|
|
|
55
55
|
name: 'Create your first Client',
|
|
56
56
|
});
|
|
57
57
|
this.clientNameTextbox = page.getByRole('textbox', { name: 'Client Name' });
|
|
58
|
-
this.tasklistCheckbox = page
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
this.tasklistCheckbox = page
|
|
59
|
+
.getByRole('dialog')
|
|
60
|
+
.locator('label')
|
|
61
|
+
.filter({ hasText: 'Tasklist' });
|
|
62
|
+
this.optimizeCheckbox = page
|
|
63
|
+
.getByRole('dialog')
|
|
64
|
+
.locator('label')
|
|
65
|
+
.filter({ hasText: 'Optimize' });
|
|
66
|
+
this.operateCheckbox = page
|
|
67
|
+
.getByRole('dialog')
|
|
68
|
+
.locator('label')
|
|
69
|
+
.filter({ hasText: 'Operate' });
|
|
70
|
+
this.secretsCheckbox = page
|
|
71
|
+
.getByRole('dialog')
|
|
72
|
+
.locator('label')
|
|
73
|
+
.filter({ hasText: /^Secrets$/ });
|
|
62
74
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
63
75
|
this.closeModalButton = page
|
|
64
76
|
.getByRole('dialog', { name: 'Client credentials', exact: true })
|
|
@@ -125,7 +137,10 @@ class ClusterDetailsPage {
|
|
|
125
137
|
this.envVarsTab = this.clientCredentialsDialog.getByRole('tab', {
|
|
126
138
|
name: 'Env Vars',
|
|
127
139
|
});
|
|
128
|
-
this.zeebeCheckbox = page
|
|
140
|
+
this.zeebeCheckbox = page
|
|
141
|
+
.getByRole('dialog')
|
|
142
|
+
.locator('label')
|
|
143
|
+
.filter({ hasText: /^Zeebe$/ });
|
|
129
144
|
this.apiClientNameTextbox = page.getByRole('textbox', {
|
|
130
145
|
name: 'Client Name',
|
|
131
146
|
});
|
|
@@ -30,6 +30,7 @@ declare class ClusterPage {
|
|
|
30
30
|
readonly cluster: (clusterName: string) => Locator;
|
|
31
31
|
readonly clusterHealthiness: (clusterName: string) => Locator;
|
|
32
32
|
readonly clusterLink: (clusterName: string) => Locator;
|
|
33
|
+
readonly dialog: Locator;
|
|
33
34
|
constructor(page: Page);
|
|
34
35
|
clickClusterBanner(): Promise<void>;
|
|
35
36
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -37,11 +37,17 @@ class ClusterPage {
|
|
|
37
37
|
cluster;
|
|
38
38
|
clusterHealthiness;
|
|
39
39
|
clusterLink;
|
|
40
|
+
dialog;
|
|
40
41
|
constructor(page) {
|
|
41
42
|
this.page = page;
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
this.dialog = page.getByRole('dialog');
|
|
44
|
+
this.createNewClusterButton = this.createNewClusterButton = page
|
|
45
|
+
.getByRole('button', {
|
|
46
|
+
name: 'Create new cluster',
|
|
47
|
+
})
|
|
48
|
+
.or(this.page.getByRole('button', {
|
|
49
|
+
name: 'Create cluster',
|
|
50
|
+
}));
|
|
45
51
|
this.clusterNameInput = page.getByPlaceholder('Enter a name for the cluster');
|
|
46
52
|
this.createClusterButton = page.getByRole('button', {
|
|
47
53
|
name: 'Create cluster',
|
|
@@ -125,6 +131,8 @@ class ClusterPage {
|
|
|
125
131
|
await (0, test_1.expect)(deleteButton).toBeVisible({ timeout: 60000 });
|
|
126
132
|
await deleteButton.click({ force: true, timeout: 60000 });
|
|
127
133
|
}
|
|
134
|
+
await (0, test_1.expect)(this.dialog).toBeVisible({ timeout: 60000 });
|
|
135
|
+
await (0, test_1.expect)(this.confirmDeleteInput).toBeVisible({ timeout: 60000 });
|
|
128
136
|
await this.confirmDeleteInput.click({ force: true, timeout: 60000 });
|
|
129
137
|
await this.confirmDeleteInput.fill('DELETE', { timeout: 60000 });
|
|
130
138
|
const dangerDeleteButtons = await this.dangerDeleteButton.all();
|
|
@@ -133,6 +141,7 @@ class ClusterPage {
|
|
|
133
141
|
await (0, test_1.expect)(this.page.getByText('Deleting...')).not.toBeVisible({
|
|
134
142
|
timeout: 60000,
|
|
135
143
|
});
|
|
144
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({ timeout: 60000 });
|
|
136
145
|
// Refresh the list of delete buttons
|
|
137
146
|
deleteButtons = this.cluster(name).getByRole('button', {
|
|
138
147
|
name: 'Delete',
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConsoleOrganizationPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
7
|
class ConsoleOrganizationPage {
|
|
7
8
|
page;
|
|
8
9
|
usersTab;
|
|
@@ -67,7 +68,7 @@ class ConsoleOrganizationPage {
|
|
|
67
68
|
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
|
|
68
69
|
this.settingsTab = page.getByRole('tab', { name: 'Settings' });
|
|
69
70
|
this.optInButton = page.getByRole('button', { name: 'Opt-in', exact: true });
|
|
70
|
-
this.optInCheckbox = page.getByLabel('I understand and agree to
|
|
71
|
+
this.optInCheckbox = page.getByLabel('I understand and agree to');
|
|
71
72
|
this.newContextPadButton = page.getByRole('switch').last();
|
|
72
73
|
this.newContextPadButtonText = page
|
|
73
74
|
.locator('[class= "cds--toggle__text"]')
|
|
@@ -250,7 +251,7 @@ class ConsoleOrganizationPage {
|
|
|
250
251
|
}
|
|
251
252
|
//Opt-in The Alpha Feature
|
|
252
253
|
const alphaFeatureOptInButton = alphaFeature.getByRole('button', {
|
|
253
|
-
name: 'Opt
|
|
254
|
+
name: 'Opt in to enable',
|
|
254
255
|
});
|
|
255
256
|
if (await alphaFeatureOptInButton.isVisible({ timeout: 10000 })) {
|
|
256
257
|
await alphaFeatureOptInButton.click();
|
|
@@ -277,33 +278,9 @@ class ConsoleOrganizationPage {
|
|
|
277
278
|
await (0, test_1.expect)(alphaFeature.locator('[class= "cds--toggle__text"]')).toHaveText('Enabled');
|
|
278
279
|
}
|
|
279
280
|
async scrollToOptInCheckbox() {
|
|
280
|
-
await this.page
|
|
281
|
-
.
|
|
282
|
-
|
|
283
|
-
await this.page
|
|
284
|
-
.getByText('Pre-release. The Customer')
|
|
285
|
-
.scrollIntoViewIfNeeded();
|
|
286
|
-
await this.page
|
|
287
|
-
.getByText('Confidential Information. The')
|
|
288
|
-
.scrollIntoViewIfNeeded();
|
|
289
|
-
await this.page
|
|
290
|
-
.getByText('THESE TERMS DO NOT ENTITLE')
|
|
291
|
-
.scrollIntoViewIfNeeded();
|
|
292
|
-
await this.page
|
|
293
|
-
.getByText('Rights and Obligations Upon')
|
|
294
|
-
.scrollIntoViewIfNeeded();
|
|
295
|
-
await this.page
|
|
296
|
-
.getByText('NOTWITHSTANDING ANYTHING TO')
|
|
297
|
-
.scrollIntoViewIfNeeded();
|
|
298
|
-
await this.page
|
|
299
|
-
.getByRole('heading', { name: 'General' })
|
|
300
|
-
.scrollIntoViewIfNeeded();
|
|
301
|
-
await this.page
|
|
302
|
-
.getByText('Liability. Camunda is liable')
|
|
303
|
-
.scrollIntoViewIfNeeded();
|
|
304
|
-
await this.page
|
|
305
|
-
.getByLabel('I understand and agree to the')
|
|
306
|
-
.scrollIntoViewIfNeeded();
|
|
281
|
+
await this.page.locator('.ps-contract-scroll').evaluate((el) => {
|
|
282
|
+
el.scrollTop = el.scrollHeight;
|
|
283
|
+
});
|
|
307
284
|
}
|
|
308
285
|
async checkOptInCheckbox() {
|
|
309
286
|
await this.optInCheckbox.check({ timeout: 90000 });
|
|
@@ -351,6 +328,13 @@ class ConsoleOrganizationPage {
|
|
|
351
328
|
}
|
|
352
329
|
}
|
|
353
330
|
async optInToAlphaFeatures() {
|
|
331
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rows.first(), {
|
|
332
|
+
visibilityTimeout: 60000,
|
|
333
|
+
totalTimeout: 140000,
|
|
334
|
+
postAction: async () => {
|
|
335
|
+
await this.page.reload();
|
|
336
|
+
},
|
|
337
|
+
});
|
|
354
338
|
try {
|
|
355
339
|
await (0, test_1.expect)(this.optInButton).toBeVisible({ timeout: 30000 });
|
|
356
340
|
await this.clickOptInButton();
|
|
@@ -139,7 +139,7 @@ class ModelerCreatePage {
|
|
|
139
139
|
this.diagramBreadcrumb = page.locator('[data-test="breadcrumb-diagram"]');
|
|
140
140
|
this.renameDiagramNameButton = page.getByText('Rename');
|
|
141
141
|
this.diagramNameInput = page.locator('[data-test="editable-input"]');
|
|
142
|
-
this.variableInput = page.
|
|
142
|
+
this.variableInput = page.locator('textarea#variables-json');
|
|
143
143
|
this.embedFormButton = page.getByRole('button', { name: 'Link form' });
|
|
144
144
|
this.embedButton = page.locator('[data-test="confirm-move"]');
|
|
145
145
|
this.deployMainButton = page.locator('[data-test="deploy-button"]');
|
|
@@ -113,7 +113,10 @@ class ClusterDetailsPage {
|
|
|
113
113
|
this.envVarsTab = this.clientCredentialsDialog.getByRole('tab', {
|
|
114
114
|
name: 'Env Vars',
|
|
115
115
|
});
|
|
116
|
-
this.zeebeCheckbox = page
|
|
116
|
+
this.zeebeCheckbox = page
|
|
117
|
+
.getByRole('dialog')
|
|
118
|
+
.locator('label')
|
|
119
|
+
.filter({ hasText: /^Zeebe$/ });
|
|
117
120
|
this.apiClientNameTextbox = page.getByRole('textbox', {
|
|
118
121
|
name: 'Client Name',
|
|
119
122
|
});
|
|
@@ -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 dialog: Locator;
|
|
36
37
|
constructor(page: Page, testInfo?: TestInfo);
|
|
37
38
|
clickClusterBanner(): Promise<void>;
|
|
38
39
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -40,12 +40,18 @@ class ClusterPage {
|
|
|
40
40
|
cluster;
|
|
41
41
|
clusterHealthiness;
|
|
42
42
|
clusterLink;
|
|
43
|
+
dialog;
|
|
43
44
|
constructor(page, testInfo) {
|
|
44
45
|
this.page = page;
|
|
45
46
|
this.testInfo = testInfo;
|
|
46
|
-
this.
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
this.dialog = page.getByRole('dialog');
|
|
48
|
+
this.createNewClusterButton = this.createNewClusterButton = page
|
|
49
|
+
.getByRole('button', {
|
|
50
|
+
name: 'Create new cluster',
|
|
51
|
+
})
|
|
52
|
+
.or(this.page.getByRole('button', {
|
|
53
|
+
name: 'Create cluster',
|
|
54
|
+
}));
|
|
49
55
|
this.clusterNameInput = page.getByPlaceholder('Enter a name for the cluster');
|
|
50
56
|
this.createClusterButton = page.getByRole('button', {
|
|
51
57
|
name: 'Create cluster',
|
|
@@ -130,6 +136,8 @@ class ClusterPage {
|
|
|
130
136
|
await (0, test_1.expect)(deleteButton).toBeVisible({ timeout: 60000 });
|
|
131
137
|
await deleteButton.click({ force: true, timeout: 60000 });
|
|
132
138
|
}
|
|
139
|
+
await (0, test_1.expect)(this.dialog).toBeVisible({ timeout: 60000 });
|
|
140
|
+
await (0, test_1.expect)(this.confirmDeleteInput).toBeVisible({ timeout: 60000 });
|
|
133
141
|
await this.confirmDeleteInput.click({ force: true, timeout: 60000 });
|
|
134
142
|
await this.confirmDeleteInput.fill('DELETE', { timeout: 60000 });
|
|
135
143
|
const dangerDeleteButtons = await this.dangerDeleteButton.all();
|
|
@@ -138,6 +146,7 @@ class ClusterPage {
|
|
|
138
146
|
await (0, test_1.expect)(this.page.getByText('Deleting...')).not.toBeVisible({
|
|
139
147
|
timeout: 60000,
|
|
140
148
|
});
|
|
149
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({ timeout: 60000 });
|
|
141
150
|
// Refresh the list of delete buttons
|
|
142
151
|
deleteButtons = this.cluster(name).getByRole('button', {
|
|
143
152
|
name: 'Delete',
|
|
@@ -28,8 +28,10 @@ class ClusterSecretsPage {
|
|
|
28
28
|
this.createNewSecretButton = page.getByRole('button', {
|
|
29
29
|
name: 'Create new secret',
|
|
30
30
|
});
|
|
31
|
-
this.keyInput = page.getByLabel('Key');
|
|
32
|
-
this.valueInput = page
|
|
31
|
+
this.keyInput = page.getByRole('dialog').getByLabel('Key');
|
|
32
|
+
this.valueInput = page
|
|
33
|
+
.getByRole('dialog')
|
|
34
|
+
.getByLabel('Value', { exact: true });
|
|
33
35
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
34
36
|
this.optionsButton = page
|
|
35
37
|
.getByRole('cell', { name: 'Options' })
|
|
@@ -44,7 +46,7 @@ class ClusterSecretsPage {
|
|
|
44
46
|
this.dialog = page.getByRole('dialog');
|
|
45
47
|
this.importButton = page.getByRole('button', { name: 'Import', exact: true });
|
|
46
48
|
this.fromFileButton = page.getByText('from File', { exact: true });
|
|
47
|
-
this.bulkImportTextArea = page.locator('[id="
|
|
49
|
+
this.bulkImportTextArea = page.locator('[id="bulk-import-content"]');
|
|
48
50
|
this.dialogImportButton = this.page
|
|
49
51
|
.getByRole('dialog')
|
|
50
52
|
.getByRole('button', { name: 'Import', exact: true });
|
|
@@ -208,7 +210,7 @@ class ClusterSecretsPage {
|
|
|
208
210
|
await this.bulkImportTextArea.click();
|
|
209
211
|
await this.bulkImportTextArea.fill(mapped);
|
|
210
212
|
await this.dialogImportButton.click();
|
|
211
|
-
await (0, test_1.expect)(this.
|
|
213
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({
|
|
212
214
|
timeout: 60000,
|
|
213
215
|
});
|
|
214
216
|
await (0, test_1.expect)(this.createNewSecretButton).toBeVisible({
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConsoleOrganizationPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
7
|
class ConsoleOrganizationPage {
|
|
7
8
|
page;
|
|
8
9
|
usersTab;
|
|
@@ -59,7 +60,7 @@ class ConsoleOrganizationPage {
|
|
|
59
60
|
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
|
|
60
61
|
this.settingsTab = page.getByRole('tab', { name: 'Settings' });
|
|
61
62
|
this.optInButton = page.getByRole('button', { name: 'Opt-in', exact: true });
|
|
62
|
-
this.optInCheckbox = page.getByLabel('I understand and agree to
|
|
63
|
+
this.optInCheckbox = page.getByLabel('I understand and agree to');
|
|
63
64
|
this.newContextPadButton = page.getByRole('switch').last();
|
|
64
65
|
this.newContextPadButtonText = page
|
|
65
66
|
.locator('[class= "cds--toggle__text"]')
|
|
@@ -246,7 +247,7 @@ class ConsoleOrganizationPage {
|
|
|
246
247
|
}
|
|
247
248
|
//Opt-in The Alpha Feature
|
|
248
249
|
const alphaFeatureOptInButton = alphaFeature.getByRole('button', {
|
|
249
|
-
name: 'Opt
|
|
250
|
+
name: 'Opt in to enable',
|
|
250
251
|
});
|
|
251
252
|
if (await alphaFeatureOptInButton.isVisible({ timeout: 10000 })) {
|
|
252
253
|
await alphaFeatureOptInButton.click({ timeout: 90000 });
|
|
@@ -273,33 +274,9 @@ class ConsoleOrganizationPage {
|
|
|
273
274
|
await (0, test_1.expect)(alphaFeature.locator('[class= "cds--toggle__text"]')).toHaveText('Enabled');
|
|
274
275
|
}
|
|
275
276
|
async scrollToOptInCheckbox() {
|
|
276
|
-
await this.page
|
|
277
|
-
.
|
|
278
|
-
|
|
279
|
-
await this.page
|
|
280
|
-
.getByText('Pre-release. The Customer')
|
|
281
|
-
.scrollIntoViewIfNeeded();
|
|
282
|
-
await this.page
|
|
283
|
-
.getByText('Confidential Information. The')
|
|
284
|
-
.scrollIntoViewIfNeeded();
|
|
285
|
-
await this.page
|
|
286
|
-
.getByText('THESE TERMS DO NOT ENTITLE')
|
|
287
|
-
.scrollIntoViewIfNeeded();
|
|
288
|
-
await this.page
|
|
289
|
-
.getByText('Rights and Obligations Upon')
|
|
290
|
-
.scrollIntoViewIfNeeded();
|
|
291
|
-
await this.page
|
|
292
|
-
.getByText('NOTWITHSTANDING ANYTHING TO')
|
|
293
|
-
.scrollIntoViewIfNeeded();
|
|
294
|
-
await this.page
|
|
295
|
-
.getByRole('heading', { name: 'General' })
|
|
296
|
-
.scrollIntoViewIfNeeded();
|
|
297
|
-
await this.page
|
|
298
|
-
.getByText('Liability. Camunda is liable')
|
|
299
|
-
.scrollIntoViewIfNeeded();
|
|
300
|
-
await this.page
|
|
301
|
-
.getByLabel('I understand and agree to the')
|
|
302
|
-
.scrollIntoViewIfNeeded();
|
|
277
|
+
await this.page.locator('.ps-contract-scroll').evaluate((el) => {
|
|
278
|
+
el.scrollTop = el.scrollHeight;
|
|
279
|
+
});
|
|
303
280
|
}
|
|
304
281
|
async checkOptInCheckbox() {
|
|
305
282
|
await this.optInCheckbox.check({ timeout: 90000 });
|
|
@@ -323,6 +300,13 @@ class ConsoleOrganizationPage {
|
|
|
323
300
|
}
|
|
324
301
|
}
|
|
325
302
|
async optInToAlphaFeatures() {
|
|
303
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rows.first(), {
|
|
304
|
+
visibilityTimeout: 60000,
|
|
305
|
+
totalTimeout: 140000,
|
|
306
|
+
postAction: async () => {
|
|
307
|
+
await this.page.reload();
|
|
308
|
+
},
|
|
309
|
+
});
|
|
326
310
|
try {
|
|
327
311
|
await (0, test_1.expect)(this.optInButton).toBeVisible({ timeout: 30000 });
|
|
328
312
|
await this.clickOptInButton();
|
|
@@ -56,11 +56,18 @@ class ClusterDetailsPage {
|
|
|
56
56
|
name: 'Create your first Client',
|
|
57
57
|
});
|
|
58
58
|
this.clientNameTextbox = page.getByRole('textbox', { name: 'Client Name' });
|
|
59
|
-
this.tasklistCheckbox = page
|
|
59
|
+
this.tasklistCheckbox = page
|
|
60
|
+
.getByRole('dialog')
|
|
61
|
+
.locator('label')
|
|
62
|
+
.filter({ hasText: 'Tasklist' });
|
|
60
63
|
this.optimizeCheckbox = page
|
|
64
|
+
.getByRole('dialog')
|
|
61
65
|
.locator('label')
|
|
62
66
|
.filter({ hasText: /^Optimize API$/ });
|
|
63
|
-
this.operateCheckbox = page
|
|
67
|
+
this.operateCheckbox = page
|
|
68
|
+
.getByRole('dialog')
|
|
69
|
+
.locator('label')
|
|
70
|
+
.filter({ hasText: 'Operate' });
|
|
64
71
|
this.secretsCheckbox = page
|
|
65
72
|
.locator('label')
|
|
66
73
|
.filter({ hasText: /^Administration API - Resource: Secrets$/ });
|
|
@@ -116,7 +123,10 @@ class ClusterDetailsPage {
|
|
|
116
123
|
this.envVarsTab = this.clientCredentialsDialog.getByRole('tab', {
|
|
117
124
|
name: 'Env Vars',
|
|
118
125
|
});
|
|
119
|
-
this.zeebeCheckbox = page
|
|
126
|
+
this.zeebeCheckbox = page
|
|
127
|
+
.getByRole('dialog')
|
|
128
|
+
.locator('label')
|
|
129
|
+
.filter({ hasText: /^Zeebe$/ });
|
|
120
130
|
this.apiClientNameTextbox = page.getByRole('textbox', {
|
|
121
131
|
name: 'Client Name',
|
|
122
132
|
});
|
|
@@ -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 dialog: Locator;
|
|
36
37
|
constructor(page: Page, testInfo?: TestInfo);
|
|
37
38
|
clickClusterBanner(): Promise<void>;
|
|
38
39
|
deleteCluster(name: string): Promise<void>;
|
|
@@ -39,12 +39,18 @@ class ClusterPage {
|
|
|
39
39
|
cluster;
|
|
40
40
|
clusterHealthiness;
|
|
41
41
|
clusterLink;
|
|
42
|
+
dialog;
|
|
42
43
|
constructor(page, testInfo) {
|
|
43
44
|
this.page = page;
|
|
44
45
|
this.testInfo = testInfo;
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
this.dialog = page.getByRole('dialog');
|
|
47
|
+
this.createNewClusterButton = this.createNewClusterButton = page
|
|
48
|
+
.getByRole('button', {
|
|
49
|
+
name: 'Create new cluster',
|
|
50
|
+
})
|
|
51
|
+
.or(this.page.getByRole('button', {
|
|
52
|
+
name: 'Create cluster',
|
|
53
|
+
}));
|
|
48
54
|
this.clusterNameInput = page.getByPlaceholder('Enter a name for the cluster');
|
|
49
55
|
this.createClusterButton = page.getByRole('button', {
|
|
50
56
|
name: 'Create cluster',
|
|
@@ -129,6 +135,8 @@ class ClusterPage {
|
|
|
129
135
|
await (0, test_1.expect)(deleteButton).toBeVisible({ timeout: 60000 });
|
|
130
136
|
await deleteButton.click({ force: true, timeout: 60000 });
|
|
131
137
|
}
|
|
138
|
+
await (0, test_1.expect)(this.dialog).toBeVisible({ timeout: 60000 });
|
|
139
|
+
await (0, test_1.expect)(this.confirmDeleteInput).toBeVisible({ timeout: 60000 });
|
|
132
140
|
await this.confirmDeleteInput.click({ force: true, timeout: 60000 });
|
|
133
141
|
await this.confirmDeleteInput.fill('DELETE', { timeout: 60000 });
|
|
134
142
|
const dangerDeleteButtons = await this.dangerDeleteButton.all();
|
|
@@ -137,6 +145,7 @@ class ClusterPage {
|
|
|
137
145
|
await (0, test_1.expect)(this.page.getByText('Deleting...')).not.toBeVisible({
|
|
138
146
|
timeout: 60000,
|
|
139
147
|
});
|
|
148
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({ timeout: 60000 });
|
|
140
149
|
// Refresh the list of delete buttons
|
|
141
150
|
deleteButtons = this.cluster(name).getByRole('button', {
|
|
142
151
|
name: 'Delete',
|
|
@@ -28,8 +28,10 @@ class ClusterSecretsPage {
|
|
|
28
28
|
this.createNewSecretButton = page.getByRole('button', {
|
|
29
29
|
name: 'Create new secret',
|
|
30
30
|
});
|
|
31
|
-
this.keyInput = page.getByLabel('Key');
|
|
32
|
-
this.valueInput = page
|
|
31
|
+
this.keyInput = page.getByRole('dialog').getByLabel('Key');
|
|
32
|
+
this.valueInput = page
|
|
33
|
+
.getByRole('dialog')
|
|
34
|
+
.getByLabel('Value', { exact: true });
|
|
33
35
|
this.createButton = page.getByRole('button', { name: 'Create', exact: true });
|
|
34
36
|
this.optionsButton = page
|
|
35
37
|
.getByRole('cell', { name: 'Options' })
|
|
@@ -44,7 +46,7 @@ class ClusterSecretsPage {
|
|
|
44
46
|
this.dialog = page.getByRole('dialog');
|
|
45
47
|
this.importButton = page.getByRole('button', { name: 'Import', exact: true });
|
|
46
48
|
this.fromFileButton = page.getByText('from File', { exact: true });
|
|
47
|
-
this.bulkImportTextArea = page.locator('[id="
|
|
49
|
+
this.bulkImportTextArea = page.locator('[id="bulk-import-content"]');
|
|
48
50
|
this.dialogImportButton = this.page
|
|
49
51
|
.getByRole('dialog')
|
|
50
52
|
.getByRole('button', { name: 'Import', exact: true });
|
|
@@ -208,7 +210,7 @@ class ClusterSecretsPage {
|
|
|
208
210
|
await this.bulkImportTextArea.click();
|
|
209
211
|
await this.bulkImportTextArea.fill(mapped);
|
|
210
212
|
await this.dialogImportButton.click();
|
|
211
|
-
await (0, test_1.expect)(this.
|
|
213
|
+
await (0, test_1.expect)(this.dialog).not.toBeVisible({
|
|
212
214
|
timeout: 60000,
|
|
213
215
|
});
|
|
214
216
|
await (0, test_1.expect)(this.createNewSecretButton).toBeVisible({
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConsoleOrganizationPage = void 0;
|
|
4
4
|
const test_1 = require("@playwright/test");
|
|
5
5
|
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
7
|
class ConsoleOrganizationPage {
|
|
7
8
|
page;
|
|
8
9
|
usersTab;
|
|
@@ -59,7 +60,7 @@ class ConsoleOrganizationPage {
|
|
|
59
60
|
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
|
|
60
61
|
this.settingsTab = page.getByRole('tab', { name: 'Settings' });
|
|
61
62
|
this.optInButton = page.getByRole('button', { name: 'Opt-in', exact: true });
|
|
62
|
-
this.optInCheckbox = page.getByLabel('I understand and agree to
|
|
63
|
+
this.optInCheckbox = page.getByLabel('I understand and agree to');
|
|
63
64
|
this.newContextPadButton = page.getByRole('switch').last();
|
|
64
65
|
this.newContextPadButtonText = page
|
|
65
66
|
.locator('[class= "cds--toggle__text"]')
|
|
@@ -246,7 +247,7 @@ class ConsoleOrganizationPage {
|
|
|
246
247
|
}
|
|
247
248
|
//Opt-in The Alpha Feature
|
|
248
249
|
const alphaFeatureOptInButton = alphaFeature.getByRole('button', {
|
|
249
|
-
name: 'Opt
|
|
250
|
+
name: 'Opt in to enable',
|
|
250
251
|
});
|
|
251
252
|
if (await alphaFeatureOptInButton.isVisible({ timeout: 10000 })) {
|
|
252
253
|
await alphaFeatureOptInButton.click({ timeout: 90000 });
|
|
@@ -273,33 +274,9 @@ class ConsoleOrganizationPage {
|
|
|
273
274
|
await (0, test_1.expect)(alphaFeature.locator('[class= "cds--toggle__text"]')).toHaveText('Enabled');
|
|
274
275
|
}
|
|
275
276
|
async scrollToOptInCheckbox() {
|
|
276
|
-
await this.page
|
|
277
|
-
.
|
|
278
|
-
|
|
279
|
-
await this.page
|
|
280
|
-
.getByText('Pre-release. The Customer')
|
|
281
|
-
.scrollIntoViewIfNeeded();
|
|
282
|
-
await this.page
|
|
283
|
-
.getByText('Confidential Information. The')
|
|
284
|
-
.scrollIntoViewIfNeeded();
|
|
285
|
-
await this.page
|
|
286
|
-
.getByText('THESE TERMS DO NOT ENTITLE')
|
|
287
|
-
.scrollIntoViewIfNeeded();
|
|
288
|
-
await this.page
|
|
289
|
-
.getByText('Rights and Obligations Upon')
|
|
290
|
-
.scrollIntoViewIfNeeded();
|
|
291
|
-
await this.page
|
|
292
|
-
.getByText('NOTWITHSTANDING ANYTHING TO')
|
|
293
|
-
.scrollIntoViewIfNeeded();
|
|
294
|
-
await this.page
|
|
295
|
-
.getByRole('heading', { name: 'General' })
|
|
296
|
-
.scrollIntoViewIfNeeded();
|
|
297
|
-
await this.page
|
|
298
|
-
.getByText('Liability. Camunda is liable')
|
|
299
|
-
.scrollIntoViewIfNeeded();
|
|
300
|
-
await this.page
|
|
301
|
-
.getByLabel('I understand and agree to the')
|
|
302
|
-
.scrollIntoViewIfNeeded();
|
|
277
|
+
await this.page.locator('.ps-contract-scroll').evaluate((el) => {
|
|
278
|
+
el.scrollTop = el.scrollHeight;
|
|
279
|
+
});
|
|
303
280
|
}
|
|
304
281
|
async checkOptInCheckbox() {
|
|
305
282
|
await this.optInCheckbox.check({ timeout: 90000 });
|
|
@@ -323,6 +300,13 @@ class ConsoleOrganizationPage {
|
|
|
323
300
|
}
|
|
324
301
|
}
|
|
325
302
|
async optInToAlphaFeatures() {
|
|
303
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rows.first(), {
|
|
304
|
+
visibilityTimeout: 60000,
|
|
305
|
+
totalTimeout: 140000,
|
|
306
|
+
postAction: async () => {
|
|
307
|
+
await this.page.reload();
|
|
308
|
+
},
|
|
309
|
+
});
|
|
326
310
|
try {
|
|
327
311
|
await (0, test_1.expect)(this.optInButton).toBeVisible({ timeout: 30000 });
|
|
328
312
|
await this.clickOptInButton();
|
|
@@ -14,15 +14,13 @@ _8_10_1.test.describe('Cluster Setup Tests', () => {
|
|
|
14
14
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
15
15
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
16
16
|
});
|
|
17
|
-
(0, _8_10_1.test)('Enable Alpha Features', async ({ page,
|
|
17
|
+
(0, _8_10_1.test)('Enable Alpha Features', async ({ page, loginPage, consoleOrganizationsPage, homePage, }, testInfo) => {
|
|
18
18
|
if (process.env.IS_PROD === 'true') {
|
|
19
19
|
_8_10_1.test.skip(true, 'Skipping test because not required on PROD test org');
|
|
20
20
|
}
|
|
21
21
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
22
22
|
await homePage.clickOrganization();
|
|
23
|
-
await (0,
|
|
24
|
-
timeout: 60000,
|
|
25
|
-
});
|
|
23
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, consoleOrganizationsPage.settingsTab, 'settings tab', 60000, false, 2);
|
|
26
24
|
await consoleOrganizationsPage.clickSettingsTab();
|
|
27
25
|
await consoleOrganizationsPage.optInToAlphaFeatures();
|
|
28
26
|
await (0, sleep_1.sleep)(30000);
|
|
@@ -13,15 +13,13 @@ _8_6_1.test.describe('Cluster Setup Tests', () => {
|
|
|
13
13
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
14
14
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
15
15
|
});
|
|
16
|
-
(0, _8_6_1.test)('Enable Alpha Features', async ({ page,
|
|
16
|
+
(0, _8_6_1.test)('Enable Alpha Features', async ({ page, loginPage, consoleOrganizationsPage, homePage, }, testInfo) => {
|
|
17
17
|
if (process.env.IS_PROD === 'true') {
|
|
18
18
|
_8_6_1.test.skip(true, 'Skipping test because not required on PROD test org');
|
|
19
19
|
}
|
|
20
20
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
21
21
|
await homePage.clickOrganization();
|
|
22
|
-
await (0,
|
|
23
|
-
timeout: 60000,
|
|
24
|
-
});
|
|
22
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, consoleOrganizationsPage.settingsTab, 'settings tab', 60000, 2);
|
|
25
23
|
await consoleOrganizationsPage.clickSettingsTab();
|
|
26
24
|
await consoleOrganizationsPage.optInToAlphaFeatures();
|
|
27
25
|
await (0, sleep_1.sleep)(30000);
|
|
@@ -179,7 +179,7 @@ _8_7_1.test.describe('Console User Flow Tests', () => {
|
|
|
179
179
|
const operateTabPromise = page.waitForEvent('popup', { timeout: 60000 });
|
|
180
180
|
const operateTab = await operateTabPromise;
|
|
181
181
|
const operateTabProcessInstancePage = new OperateProcessInstancePage_1.OperateProcessInstancePage(operateTab);
|
|
182
|
-
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(operateTabProcessInstancePage, operateTabProcessInstancePage.completedIcon, 'completed icon in Operate', 60000);
|
|
182
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(operateTabProcessInstancePage, operateTabProcessInstancePage.completedIcon, 'completed icon in Operate', 60000, 2);
|
|
183
183
|
});
|
|
184
184
|
});
|
|
185
185
|
});
|
|
@@ -13,15 +13,13 @@ _8_7_1.test.describe('Cluster Setup Tests', () => {
|
|
|
13
13
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
14
14
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
15
15
|
});
|
|
16
|
-
(0, _8_7_1.test)('Enable Alpha Features', async ({ page,
|
|
16
|
+
(0, _8_7_1.test)('Enable Alpha Features', async ({ page, loginPage, consoleOrganizationsPage, homePage, }, testInfo) => {
|
|
17
17
|
if (process.env.IS_PROD === 'true') {
|
|
18
18
|
_8_7_1.test.skip(true, 'Skipping test because not required on PROD test org');
|
|
19
19
|
}
|
|
20
20
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
21
21
|
await homePage.clickOrganization();
|
|
22
|
-
await (0,
|
|
23
|
-
timeout: 60000,
|
|
24
|
-
});
|
|
22
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, consoleOrganizationsPage.settingsTab, 'settings tab', 60000, 2);
|
|
25
23
|
await consoleOrganizationsPage.clickSettingsTab();
|
|
26
24
|
await consoleOrganizationsPage.optInToAlphaFeatures();
|
|
27
25
|
await (0, sleep_1.sleep)(30000);
|
|
@@ -14,15 +14,13 @@ _8_8_1.test.describe('Cluster Setup Tests', () => {
|
|
|
14
14
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
15
15
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
16
16
|
});
|
|
17
|
-
(0, _8_8_1.test)('Enable Alpha Features', async ({ page,
|
|
17
|
+
(0, _8_8_1.test)('Enable Alpha Features', async ({ page, loginPage, consoleOrganizationsPage, homePage, }, testInfo) => {
|
|
18
18
|
if (process.env.IS_PROD === 'true') {
|
|
19
19
|
_8_8_1.test.skip(true, 'Skipping test because not required on PROD test org');
|
|
20
20
|
}
|
|
21
21
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
22
22
|
await homePage.clickOrganization();
|
|
23
|
-
await (0,
|
|
24
|
-
timeout: 60000,
|
|
25
|
-
});
|
|
23
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, consoleOrganizationsPage.settingsTab, 'settings tab', 60000, false, 2);
|
|
26
24
|
await consoleOrganizationsPage.clickSettingsTab();
|
|
27
25
|
await consoleOrganizationsPage.optInToAlphaFeatures();
|
|
28
26
|
await (0, sleep_1.sleep)(30000);
|
|
@@ -15,15 +15,13 @@ _8_9_1.test.describe('Cluster Setup Tests', () => {
|
|
|
15
15
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
16
16
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
17
17
|
});
|
|
18
|
-
(0, _8_9_1.test)('Enable Alpha Features', async ({ page,
|
|
18
|
+
(0, _8_9_1.test)('Enable Alpha Features', async ({ page, loginPage, consoleOrganizationsPage, homePage, }, testInfo) => {
|
|
19
19
|
if (process.env.IS_PROD === 'true') {
|
|
20
20
|
_8_9_1.test.skip(true, 'Skipping test because not required on PROD test org');
|
|
21
21
|
}
|
|
22
22
|
await (0, UtilitiesPage_1.loginWithRetry)(page, loginPage, users_1.testUsers.mainUser, (testInfo.workerIndex + 1) * 1000);
|
|
23
23
|
await homePage.clickOrganization();
|
|
24
|
-
await (0,
|
|
25
|
-
timeout: 60000,
|
|
26
|
-
});
|
|
24
|
+
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, consoleOrganizationsPage.settingsTab, 'settings tab', 60000, false, 2);
|
|
27
25
|
await consoleOrganizationsPage.clickSettingsTab();
|
|
28
26
|
await consoleOrganizationsPage.optInToAlphaFeatures();
|
|
29
27
|
await (0, sleep_1.sleep)(30000);
|