@camunda/e2e-test-suite 0.0.959 → 0.0.960
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/SM-8.10/ModelerCreatePage.js +4 -1
- package/dist/pages/SM-8.10/ModelerHomePage.js +5 -2
- package/dist/pages/SM-8.10/OperateHomePage.js +15 -3
- package/dist/pages/SM-8.10/PlayPage.js +25 -0
- package/dist/pages/SM-8.10/UtilitiesPage.js +3 -3
- package/dist/tests/SM-8.10/connectors-user-flows.spec.js +1 -2
- package/dist/tests/SM-8.10/document-handling-user-flows.spec.js +1 -2
- package/dist/tests/SM-8.10/mt-enabled-user-flows.spec.js +3 -6
- package/package.json +1 -1
|
@@ -806,7 +806,10 @@ class ModelerCreatePage {
|
|
|
806
806
|
await (0, test_1.expect)(this.changeElementSearchInput).toBeVisible({ timeout: 30000 });
|
|
807
807
|
await this.changeElementSearchInput.click();
|
|
808
808
|
await this.changeElementSearchInput.fill('');
|
|
809
|
-
|
|
809
|
+
// 'Send REST Request' is the template's current name -- connectors #7917
|
|
810
|
+
// renamed it from 'REST Outbound Connector' on 2026-07-15, and "Outbound"
|
|
811
|
+
// now appears in no searchable field, so the old filter matched nothing.
|
|
812
|
+
await this.changeElementSearchInput.pressSequentially('Send REST Request', {
|
|
810
813
|
delay: 50,
|
|
811
814
|
});
|
|
812
815
|
await (0, test_1.expect)(this.restConnectorOption).toBeVisible({ timeout: 90000 });
|
|
@@ -215,10 +215,13 @@ class ModelerHomePage {
|
|
|
215
215
|
}
|
|
216
216
|
async clickHomeBreadcrumb() {
|
|
217
217
|
try {
|
|
218
|
-
await this.homeBreadcrumb.click();
|
|
218
|
+
await this.homeBreadcrumb.click({ timeout: 60000 });
|
|
219
219
|
}
|
|
220
220
|
catch (error) {
|
|
221
|
-
await this.page
|
|
221
|
+
await this.page
|
|
222
|
+
.getByText('Home', { exact: true })
|
|
223
|
+
.first()
|
|
224
|
+
.click({ timeout: 60000 });
|
|
222
225
|
}
|
|
223
226
|
}
|
|
224
227
|
async clickChooseBpmnTemplateButton() {
|
|
@@ -100,9 +100,21 @@ class OperateHomePage {
|
|
|
100
100
|
await this.page
|
|
101
101
|
.getByLabel('Edit Variable "testVariable"')
|
|
102
102
|
.getByText('"testValue"')
|
|
103
|
-
.
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
.click();
|
|
104
|
+
// Replace the whole JSON document in one shot. Typing it per-character
|
|
105
|
+
// raced the editor's re-render: after a couple of keystrokes the caret
|
|
106
|
+
// jumped outside the closing quote, leaving invalid JSON such as
|
|
107
|
+
// `"up"datedValue`. Apply then rejects it silently, the modal stays open
|
|
108
|
+
// and the old value is still on screen, so the caller's
|
|
109
|
+
// `not.toBeVisible('"testValue"')` assertion times out. insertText emits a
|
|
110
|
+
// single input event, so there is no intermediate state to race.
|
|
111
|
+
//
|
|
112
|
+
// Pass only the OPENING quote: Monaco auto-closes it. Supplying both ends
|
|
113
|
+
// yields `"updatedValue""` -- invalid JSON, and Apply rejects it exactly
|
|
114
|
+
// like the per-character version did. Same recipe as
|
|
115
|
+
// pages/c8Run-8.10/OperateHomePage.ts.
|
|
116
|
+
await this.page.keyboard.press('ControlOrMeta+A');
|
|
117
|
+
await this.page.keyboard.insertText(`"${newValue}`);
|
|
106
118
|
}
|
|
107
119
|
async clickSaveVariableButton() {
|
|
108
120
|
await this.applyButton.click();
|
|
@@ -223,6 +223,17 @@ class PlayPage {
|
|
|
223
223
|
await this.scenarioDetailNameInput.press('Tab');
|
|
224
224
|
}
|
|
225
225
|
async clickViewAllScenariosButton() {
|
|
226
|
+
// This method's job is to reach the scenario LIST. Saving can already leave
|
|
227
|
+
// Play there (see assertSavedScenarioNameInPanel), and the "Back to test
|
|
228
|
+
// cases" control exists only inside a scenario's detail view -- so on the
|
|
229
|
+
// list it never renders and waiting for it just burns the retry budget.
|
|
230
|
+
// "Run all test cases" lives on the list and is what the caller needs next,
|
|
231
|
+
// so treat it as proof the destination is already reached.
|
|
232
|
+
if (await this.runAllScenariosButton
|
|
233
|
+
.isVisible({ timeout: 3000 })
|
|
234
|
+
.catch(() => false)) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
226
237
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.viewAllScenariosButton);
|
|
227
238
|
await this.viewAllScenariosButton.click();
|
|
228
239
|
}
|
|
@@ -252,6 +263,20 @@ class PlayPage {
|
|
|
252
263
|
if (await heading.isVisible({ timeout: 3000 }).catch(() => false)) {
|
|
253
264
|
return;
|
|
254
265
|
}
|
|
266
|
+
// Updating an existing test case does NOT always leave the detail view
|
|
267
|
+
// open: Play can close it and fall back to the "Test cases" list, which is
|
|
268
|
+
// what it did in run 32105225796 -- the screenshot shows the list with the
|
|
269
|
+
// updated name present while neither the heading nor the Name field
|
|
270
|
+
// existed, so the old two-surface check failed on a save that had actually
|
|
271
|
+
// succeeded (the "Scenario saved" toast had already been asserted). The row
|
|
272
|
+
// carrying the exact name is the same proof, on the surface Play chose.
|
|
273
|
+
const listRow = this.page
|
|
274
|
+
.locator('tr')
|
|
275
|
+
.filter({ has: this.page.getByText(scenarioName, { exact: true }) })
|
|
276
|
+
.first();
|
|
277
|
+
if (await listRow.isVisible({ timeout: 3000 }).catch(() => false)) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
255
280
|
await (0, test_1.expect)(this.scenarioDetailNameInput).toHaveValue(scenarioName, {
|
|
256
281
|
timeout: 30000,
|
|
257
282
|
});
|
|
@@ -198,8 +198,8 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
|
|
|
198
198
|
try {
|
|
199
199
|
// The change-element popup virtualizes its list: connector templates render
|
|
200
200
|
// below the built-in BPMN tasks and are not in the queryable DOM slice until
|
|
201
|
-
// the list is filtered. Type
|
|
202
|
-
// bundled REST
|
|
201
|
+
// the list is filtered. Type the template name into the popup search box so
|
|
202
|
+
// the bundled REST template (compatible with the 8.10 engine set above)
|
|
203
203
|
// renders and is selected directly. Without this filter the off-screen entry
|
|
204
204
|
// is missed and the flow falls back to the marketplace unnecessarily,
|
|
205
205
|
// exposing it to transient marketplace-API errors even though the connector
|
|
@@ -209,7 +209,7 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
|
|
|
209
209
|
});
|
|
210
210
|
await modelerCreatePage.changeElementSearchInput.click();
|
|
211
211
|
await modelerCreatePage.changeElementSearchInput.fill('');
|
|
212
|
-
await modelerCreatePage.changeElementSearchInput.pressSequentially('REST
|
|
212
|
+
await modelerCreatePage.changeElementSearchInput.pressSequentially('Send REST Request', { delay: 50 });
|
|
213
213
|
await (0, test_1.expect)(modelerCreatePage.restConnectorOption).toBeVisible({
|
|
214
214
|
timeout: 15000,
|
|
215
215
|
});
|
|
@@ -44,8 +44,7 @@ SM_8_10_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
44
44
|
});
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
|
-
|
|
48
|
-
SM_8_10_1.test.skip('REST Connector Bearer Token Auth User Flow', async ({ page, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
|
|
47
|
+
(0, SM_8_10_1.test)('REST Connector Bearer Token Auth User Flow', async ({ page, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, }) => {
|
|
49
48
|
SM_8_10_1.test.slow();
|
|
50
49
|
const processName = 'REST_Connector_Bearer_Auth_Process' +
|
|
51
50
|
(await (0, _setup_1.generateRandomStringAsync)(3));
|
|
@@ -116,8 +116,7 @@ if (process.env.IS_DS === 'true') {
|
|
|
116
116
|
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'aws');
|
|
117
117
|
});
|
|
118
118
|
});
|
|
119
|
-
|
|
120
|
-
SM_8_10_1.test.skip('Document Handling Connectors User Flow - AWS @tasklistV2', async ({ page, navigationPage, modelerHomePage, modelerCreatePage, operateHomePage, operateProcessesPage, connectorMarketplacePage, operateProcessInstancePage, ocIdentityHomePage, ocIdentityRolesPage, }) => {
|
|
119
|
+
(0, SM_8_10_1.test)('Document Handling Connectors User Flow - AWS @tasklistV2', async ({ page, navigationPage, modelerHomePage, modelerCreatePage, operateHomePage, operateProcessesPage, connectorMarketplacePage, operateProcessInstancePage, ocIdentityHomePage, ocIdentityRolesPage, }) => {
|
|
121
120
|
const processName = 'Document_Handling_Connectors_User_Flow_AWS_Process' +
|
|
122
121
|
(await (0, _setup_1.generateRandomStringAsync)(3));
|
|
123
122
|
const baseURL = process.env.PLAYWRIGHT_BASE_URL ||
|
|
@@ -127,8 +127,7 @@ if (process.env.IS_MT === 'true') {
|
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
});
|
|
130
|
-
|
|
131
|
-
SM_8_10_1.test.skip('Main User Can Create & Access Tenant - Connectors Flow @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, optimizeHomePage, optimizeDashboardPage, ocIdentityHomePage, ocTenantPage, }) => {
|
|
130
|
+
(0, SM_8_10_1.test)('Main User Can Create & Access Tenant - Connectors Flow @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, optimizeHomePage, optimizeDashboardPage, ocIdentityHomePage, ocTenantPage, }) => {
|
|
132
131
|
SM_8_10_1.test.slow();
|
|
133
132
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
134
133
|
const processName = 'Main_User_Connectors_Flow_' + randomString;
|
|
@@ -260,8 +259,7 @@ if (process.env.IS_MT === 'true') {
|
|
|
260
259
|
});
|
|
261
260
|
}
|
|
262
261
|
});
|
|
263
|
-
|
|
264
|
-
SM_8_10_1.test.skip('Second User Can Access Tenant Created By Main User - Connectors Flow @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, optimizeHomePage, optimizeDashboardPage, ocIdentityHomePage, ocTenantPage, managementIdentityPage, keycloakAdminPage, keycloakLoginPage, ocIdentityRolesPage, ocIdentityMappingRulesPage, browser, }) => {
|
|
262
|
+
(0, SM_8_10_1.test)('Second User Can Access Tenant Created By Main User - Connectors Flow @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, optimizeHomePage, optimizeDashboardPage, ocIdentityHomePage, ocTenantPage, managementIdentityPage, keycloakAdminPage, keycloakLoginPage, ocIdentityRolesPage, ocIdentityMappingRulesPage, browser, }) => {
|
|
265
263
|
SM_8_10_1.test.slow();
|
|
266
264
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
267
265
|
const processName = 'Second_User_Connectors_Flow_' + randomString;
|
|
@@ -390,8 +388,7 @@ if (process.env.IS_MT === 'true') {
|
|
|
390
388
|
});
|
|
391
389
|
}
|
|
392
390
|
});
|
|
393
|
-
|
|
394
|
-
SM_8_10_1.test.skip('User Can Be Assigned To Multiple Tenants @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, ocIdentityHomePage, ocTenantPage, managementIdentityPage, }) => {
|
|
391
|
+
(0, SM_8_10_1.test)('User Can Be Assigned To Multiple Tenants @tasklistV2', async ({ page, modelerHomePage, modelerCreatePage, operateProcessInstancePage, operateProcessesPage, operateHomePage, navigationPage, managementIdentityTenantPage, connectorSettingsPage, connectorMarketplacePage, ocIdentityHomePage, ocTenantPage, managementIdentityPage, }) => {
|
|
395
392
|
SM_8_10_1.test.slow();
|
|
396
393
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
397
394
|
const processName1 = 'Multiple_Tenant_Flow_1' + randomString;
|