@camunda/e2e-test-suite 0.0.434 → 0.0.436
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/ModelerCreatePage.d.ts +1 -0
- package/dist/pages/8.10/ModelerCreatePage.js +2 -0
- package/dist/pages/8.10/UtilitiesPage.js +0 -3
- package/dist/pages/8.9/ModelerCreatePage.d.ts +1 -0
- package/dist/pages/8.9/ModelerCreatePage.js +2 -0
- package/dist/pages/8.9/UtilitiesPage.js +0 -3
- package/dist/pages/SM-8.10/OperateProcessesPage.js +77 -10
- package/dist/tests/8.10/connectors-user-flows.spec.js +2 -4
- package/dist/tests/8.9/connectors-user-flows.spec.js +2 -4
- package/package.json +1 -1
|
@@ -99,6 +99,7 @@ declare class ModelerCreatePage {
|
|
|
99
99
|
readonly backupDeployButton: Locator;
|
|
100
100
|
readonly globalConnectToolButton: Locator;
|
|
101
101
|
readonly formLinkedSuccessMessage: Locator;
|
|
102
|
+
readonly webhookActiveMessage: Locator;
|
|
102
103
|
readonly diagramNameBreadcrumb: (diagramName: string) => Locator;
|
|
103
104
|
constructor(page: Page);
|
|
104
105
|
clickSecondDeployButton(): Promise<void>;
|
|
@@ -105,6 +105,7 @@ class ModelerCreatePage {
|
|
|
105
105
|
backupDeployButton;
|
|
106
106
|
globalConnectToolButton;
|
|
107
107
|
formLinkedSuccessMessage;
|
|
108
|
+
webhookActiveMessage;
|
|
108
109
|
diagramNameBreadcrumb;
|
|
109
110
|
constructor(page) {
|
|
110
111
|
this.page = page;
|
|
@@ -298,6 +299,7 @@ class ModelerCreatePage {
|
|
|
298
299
|
this.diagramNameBreadcrumb = (diagramName) => page.locator('button[data-test="breadcrumb-diagram"]', {
|
|
299
300
|
hasText: diagramName,
|
|
300
301
|
});
|
|
302
|
+
this.webhookActiveMessage = page.getByText('Webhook is active');
|
|
301
303
|
}
|
|
302
304
|
async clickSecondDeployButton() {
|
|
303
305
|
await this.deployAndRunMainButton
|
|
@@ -266,9 +266,6 @@ async function enableAuthorizations(clusterName, homePage, clusterPage, clusterD
|
|
|
266
266
|
await homePage.clickClusters();
|
|
267
267
|
await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
|
|
268
268
|
await clusterPage.clickClusterLink(clusterName);
|
|
269
|
-
await (0, test_1.expect)(clusterDetailsPage.rbaEnabledMessage.first()).toBeVisible({
|
|
270
|
-
timeout: 30000,
|
|
271
|
-
});
|
|
272
269
|
await clusterDetailsPage.assertComponentsHealth();
|
|
273
270
|
}
|
|
274
271
|
exports.enableAuthorizations = enableAuthorizations;
|
|
@@ -99,6 +99,7 @@ declare class ModelerCreatePage {
|
|
|
99
99
|
readonly backupDeployButton: Locator;
|
|
100
100
|
readonly globalConnectToolButton: Locator;
|
|
101
101
|
readonly formLinkedSuccessMessage: Locator;
|
|
102
|
+
readonly webhookActiveMessage: Locator;
|
|
102
103
|
readonly diagramNameBreadcrumb: (diagramName: string) => Locator;
|
|
103
104
|
constructor(page: Page);
|
|
104
105
|
clickSecondDeployButton(): Promise<void>;
|
|
@@ -105,6 +105,7 @@ class ModelerCreatePage {
|
|
|
105
105
|
backupDeployButton;
|
|
106
106
|
globalConnectToolButton;
|
|
107
107
|
formLinkedSuccessMessage;
|
|
108
|
+
webhookActiveMessage;
|
|
108
109
|
diagramNameBreadcrumb;
|
|
109
110
|
constructor(page) {
|
|
110
111
|
this.page = page;
|
|
@@ -298,6 +299,7 @@ class ModelerCreatePage {
|
|
|
298
299
|
this.diagramNameBreadcrumb = (diagramName) => page.locator('button[data-test="breadcrumb-diagram"]', {
|
|
299
300
|
hasText: diagramName,
|
|
300
301
|
});
|
|
302
|
+
this.webhookActiveMessage = page.getByText('Webhook is active');
|
|
301
303
|
}
|
|
302
304
|
async clickSecondDeployButton() {
|
|
303
305
|
await this.deployAndRunMainButton
|
|
@@ -271,9 +271,6 @@ async function enableAuthorizations(clusterName, homePage, clusterPage, clusterD
|
|
|
271
271
|
await homePage.clickClusters();
|
|
272
272
|
await clusterPage.assertClusterHealthyStatusWithRetry(clusterName);
|
|
273
273
|
await clusterPage.clickClusterLink(clusterName);
|
|
274
|
-
await (0, test_1.expect)(clusterDetailsPage.rbaEnabledMessage.first()).toBeVisible({
|
|
275
|
-
timeout: 30000,
|
|
276
|
-
});
|
|
277
274
|
await clusterDetailsPage.assertComponentsHealth();
|
|
278
275
|
}
|
|
279
276
|
exports.enableAuthorizations = enableAuthorizations;
|
|
@@ -51,6 +51,7 @@ class OperateProcessesPage {
|
|
|
51
51
|
this.gotItButton = page.getByRole('button', { name: 'Got it' });
|
|
52
52
|
}
|
|
53
53
|
async checkCheckbox(checkbox) {
|
|
54
|
+
await checkbox.waitFor({ state: 'visible', timeout: constants_1._1_SECOND_IN_MS * 10 });
|
|
54
55
|
if (!(await checkbox.isChecked())) {
|
|
55
56
|
await checkbox.click();
|
|
56
57
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
@@ -60,6 +61,7 @@ class OperateProcessesPage {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
async uncheckCheckbox(checkbox) {
|
|
64
|
+
await checkbox.waitFor({ state: 'visible', timeout: constants_1._1_SECOND_IN_MS * 10 });
|
|
63
65
|
if (await checkbox.isChecked()) {
|
|
64
66
|
await checkbox.click();
|
|
65
67
|
await (0, test_1.expect)(checkbox).toBeChecked({
|
|
@@ -77,6 +79,10 @@ class OperateProcessesPage {
|
|
|
77
79
|
async toggleActiveCheckboxOn() {
|
|
78
80
|
await this.uncheckCompletedCheckbox();
|
|
79
81
|
await this.clickProcessIncidentsCheckbox();
|
|
82
|
+
await this.processActiveCheckbox.waitFor({
|
|
83
|
+
state: 'visible',
|
|
84
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
85
|
+
});
|
|
80
86
|
if (await this.processActiveCheckbox.isChecked({ timeout: constants_1._1_SECOND_IN_MS })) {
|
|
81
87
|
await this.uncheckCheckbox(this.processActiveCheckbox);
|
|
82
88
|
await (0, sleep_1.sleep)(200); // Required to skip the debounce protection on the frontend
|
|
@@ -89,6 +95,10 @@ class OperateProcessesPage {
|
|
|
89
95
|
async toggleCompletedCheckbox() {
|
|
90
96
|
await this.uncheckActiveCheckbox();
|
|
91
97
|
await this.clickProcessIncidentsCheckbox();
|
|
98
|
+
await this.processCompletedCheckbox.waitFor({
|
|
99
|
+
state: 'visible',
|
|
100
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
101
|
+
});
|
|
92
102
|
if (await this.processCompletedCheckbox.isChecked({ timeout: constants_1._1_SECOND_IN_MS })) {
|
|
93
103
|
await this.uncheckCheckbox(this.processCompletedCheckbox);
|
|
94
104
|
await (0, sleep_1.sleep)(200); // Required to skip the debounce protection on the frontend
|
|
@@ -121,23 +131,66 @@ class OperateProcessesPage {
|
|
|
121
131
|
}
|
|
122
132
|
}
|
|
123
133
|
async clickProcessActiveCheckbox() {
|
|
134
|
+
await this.processActiveCheckbox.waitFor({
|
|
135
|
+
state: 'visible',
|
|
136
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
137
|
+
});
|
|
124
138
|
if (!(await this.processActiveCheckbox.isChecked({ timeout: 60000 }))) {
|
|
125
139
|
await this.processActiveCheckbox.click({ timeout: 120000 });
|
|
140
|
+
await (0, test_1.expect)(this.processActiveCheckbox).toBeChecked({
|
|
141
|
+
checked: true,
|
|
142
|
+
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
143
|
+
});
|
|
126
144
|
}
|
|
127
145
|
}
|
|
128
146
|
async clickProcessCompletedCheckbox() {
|
|
147
|
+
await this.processCompletedCheckbox.waitFor({
|
|
148
|
+
state: 'visible',
|
|
149
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
150
|
+
});
|
|
129
151
|
if (!(await this.processCompletedCheckbox.isChecked({ timeout: 60000 }))) {
|
|
130
152
|
await this.processCompletedCheckbox.click({ timeout: 120000 });
|
|
153
|
+
await (0, test_1.expect)(this.processCompletedCheckbox).toBeChecked({
|
|
154
|
+
checked: true,
|
|
155
|
+
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
156
|
+
});
|
|
131
157
|
}
|
|
132
158
|
}
|
|
133
159
|
async clickProcessIncidentsCheckbox() {
|
|
160
|
+
await this.processIncidentsCheckbox.waitFor({
|
|
161
|
+
state: 'visible',
|
|
162
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
163
|
+
});
|
|
164
|
+
const wasChecked = await this.processIncidentsCheckbox.isChecked();
|
|
134
165
|
await this.processIncidentsCheckbox.click({ timeout: 90000 });
|
|
166
|
+
await (0, test_1.expect)(this.processIncidentsCheckbox).toBeChecked({
|
|
167
|
+
checked: !wasChecked,
|
|
168
|
+
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
169
|
+
});
|
|
135
170
|
}
|
|
136
171
|
async clickRunningProcessInstancesCheckbox() {
|
|
172
|
+
await this.processRunningInstancesCheckbox.waitFor({
|
|
173
|
+
state: 'visible',
|
|
174
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
175
|
+
});
|
|
176
|
+
const wasChecked = await this.processRunningInstancesCheckbox.isChecked();
|
|
137
177
|
await this.processRunningInstancesCheckbox.click({ timeout: 90000 });
|
|
178
|
+
await (0, test_1.expect)(this.processRunningInstancesCheckbox).toBeChecked({
|
|
179
|
+
checked: !wasChecked,
|
|
180
|
+
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
181
|
+
});
|
|
138
182
|
}
|
|
139
183
|
async clickFinishedProcessInstancesCheckbox() {
|
|
184
|
+
await this.processFinishedInstancesCheckbox.waitFor({
|
|
185
|
+
state: 'visible',
|
|
186
|
+
timeout: constants_1._1_SECOND_IN_MS * 10,
|
|
187
|
+
});
|
|
188
|
+
const wasChecked = await this.processFinishedInstancesCheckbox.isChecked();
|
|
140
189
|
await this.processFinishedInstancesCheckbox.click({ timeout: 90000 });
|
|
190
|
+
await (0, test_1.expect)(this.processFinishedInstancesCheckbox).toBeChecked({
|
|
191
|
+
checked: !wasChecked,
|
|
192
|
+
timeout: constants_1._1_SECOND_IN_MS * 5,
|
|
193
|
+
});
|
|
141
194
|
}
|
|
142
195
|
async clickProcessInstanceLink(processName, type = 'active') {
|
|
143
196
|
if (await this.checkTableForProcess(processName)) {
|
|
@@ -164,25 +217,39 @@ class OperateProcessesPage {
|
|
|
164
217
|
if (await this.checkTableForProcess(processName)) {
|
|
165
218
|
return;
|
|
166
219
|
}
|
|
167
|
-
throw new Error(`
|
|
220
|
+
throw new Error(`Instance "${processName}" not found in table (attempt ${attempt}).`);
|
|
168
221
|
}
|
|
169
222
|
catch (err) {
|
|
170
223
|
lastError = err instanceof Error ? err.message : err;
|
|
171
|
-
|
|
172
|
-
await this.page
|
|
224
|
+
console.log(`clickProcessInstanceLink attempt ${attempt}: ${String(lastError)}`);
|
|
225
|
+
await this.page
|
|
226
|
+
.reload({ timeout: 30000 })
|
|
227
|
+
.catch(() => console.log('Page reload timed out, continuing...'));
|
|
228
|
+
await this.page
|
|
229
|
+
.waitForLoadState('networkidle', { timeout: 30000 })
|
|
230
|
+
.catch(() => console.log('waitForLoadState networkidle timed out, continuing...'));
|
|
173
231
|
// After reload, the page may redirect away from Operate (e.g. to
|
|
174
232
|
// Tasklist). Navigate back to the original Operate URL if that
|
|
175
233
|
// happens.
|
|
176
234
|
if (!this.page.url().includes('/operate')) {
|
|
177
|
-
await this.page
|
|
178
|
-
|
|
235
|
+
await this.page
|
|
236
|
+
.goto(operateUrl, { timeout: 30000 })
|
|
237
|
+
.catch(() => console.log('Navigation to Operate timed out, continuing...'));
|
|
238
|
+
await this.page
|
|
239
|
+
.waitForLoadState('networkidle', { timeout: 30000 })
|
|
240
|
+
.catch(() => console.log('waitForLoadState after Operate navigation timed out, continuing...'));
|
|
179
241
|
}
|
|
180
242
|
// Re-apply checkbox filter lost after reload
|
|
181
|
-
|
|
182
|
-
|
|
243
|
+
try {
|
|
244
|
+
if (type === 'active') {
|
|
245
|
+
await this.toggleActiveCheckboxOn();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
await this.toggleCompletedCheckbox();
|
|
249
|
+
}
|
|
183
250
|
}
|
|
184
|
-
|
|
185
|
-
|
|
251
|
+
catch (toggleErr) {
|
|
252
|
+
console.log(`Checkbox toggle failed after reload: ${String(toggleErr)}`);
|
|
186
253
|
}
|
|
187
254
|
// Re-fill Process Instance Key filter if it was previously applied
|
|
188
255
|
// but its value was cleared by the reload.
|
|
@@ -201,7 +268,7 @@ class OperateProcessesPage {
|
|
|
201
268
|
await (0, sleep_1.sleep)(2000);
|
|
202
269
|
}
|
|
203
270
|
}
|
|
204
|
-
throw new Error(`Failed to open instance "${processName}" after ${
|
|
271
|
+
throw new Error(`Failed to open instance "${processName}" after ${attempt} attempts (${Math.round((Date.now() - startTime) / 1000)}s elapsed). Last error: ${String(lastError)}`);
|
|
205
272
|
}
|
|
206
273
|
async clickProcessInstanceLinkWithPartialNameMatch(processName) {
|
|
207
274
|
let retryCount = 0;
|
|
@@ -145,10 +145,9 @@ _8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
145
145
|
await _8_10_1.test.step('Assert Webhook Is Active In Cluster And Make Authorization Request', async () => {
|
|
146
146
|
await modelerCreatePage.clickStartEventElement();
|
|
147
147
|
await modelerCreatePage.clickWebhookTab();
|
|
148
|
-
await (0, test_1.expect)(modelerCreatePage.
|
|
148
|
+
await (0, test_1.expect)(modelerCreatePage.webhookActiveMessage).toBeVisible({
|
|
149
149
|
timeout: 60000,
|
|
150
150
|
});
|
|
151
|
-
await modelerCreatePage.clickWebhookIsActiveButton();
|
|
152
151
|
const url = await modelerCreatePage.copyWebhookUrlToClipboardButton.innerText({
|
|
153
152
|
timeout: 60000,
|
|
154
153
|
});
|
|
@@ -373,10 +372,9 @@ _8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
373
372
|
await _8_10_1.test.step('Assert Webhook Is Active In Cluster And Make Authorization Request', async () => {
|
|
374
373
|
await modelerCreatePage.clickSecondElement();
|
|
375
374
|
await modelerCreatePage.clickWebhookTab();
|
|
376
|
-
await (0, test_1.expect)(modelerCreatePage.
|
|
375
|
+
await (0, test_1.expect)(modelerCreatePage.webhookActiveMessage).toBeVisible({
|
|
377
376
|
timeout: 120000,
|
|
378
377
|
});
|
|
379
|
-
await modelerCreatePage.clickWebhookIsActiveButton();
|
|
380
378
|
const url = await modelerCreatePage.copyWebhookUrlToClipboardButton.innerText();
|
|
381
379
|
const response = await request.post(url, {
|
|
382
380
|
data: {
|
|
@@ -145,10 +145,9 @@ _8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
145
145
|
await _8_9_1.test.step('Assert Webhook Is Active In Cluster And Make Authorization Request', async () => {
|
|
146
146
|
await modelerCreatePage.clickStartEventElement();
|
|
147
147
|
await modelerCreatePage.clickWebhookTab();
|
|
148
|
-
await (0, test_1.expect)(modelerCreatePage.
|
|
148
|
+
await (0, test_1.expect)(modelerCreatePage.webhookActiveMessage).toBeVisible({
|
|
149
149
|
timeout: 60000,
|
|
150
150
|
});
|
|
151
|
-
await modelerCreatePage.clickWebhookIsActiveButton();
|
|
152
151
|
const url = await modelerCreatePage.copyWebhookUrlToClipboardButton.innerText({
|
|
153
152
|
timeout: 60000,
|
|
154
153
|
});
|
|
@@ -373,10 +372,9 @@ _8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
373
372
|
await _8_9_1.test.step('Assert Webhook Is Active In Cluster And Make Authorization Request', async () => {
|
|
374
373
|
await modelerCreatePage.clickSecondElement();
|
|
375
374
|
await modelerCreatePage.clickWebhookTab();
|
|
376
|
-
await (0, test_1.expect)(modelerCreatePage.
|
|
375
|
+
await (0, test_1.expect)(modelerCreatePage.webhookActiveMessage).toBeVisible({
|
|
377
376
|
timeout: 120000,
|
|
378
377
|
});
|
|
379
|
-
await modelerCreatePage.clickWebhookIsActiveButton();
|
|
380
378
|
const url = await modelerCreatePage.copyWebhookUrlToClipboardButton.innerText();
|
|
381
379
|
const response = await request.post(url, {
|
|
382
380
|
data: {
|