@camunda/e2e-test-suite 0.0.1443 → 0.0.1445
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/.github/c8_versions.json +1 -0
- package/README.md +2 -0
- package/dist/fixtures/SM-8.11.d.ts +77 -0
- package/dist/fixtures/SM-8.11.js +176 -0
- package/dist/pages/SM-8.11/Authorization.d.ts +39 -0
- package/dist/pages/SM-8.11/Authorization.js +349 -0
- package/dist/pages/SM-8.11/ClusterDetailsPage.d.ts +8 -0
- package/dist/pages/SM-8.11/ClusterDetailsPage.js +65 -0
- package/dist/pages/SM-8.11/ClusterPage.d.ts +11 -0
- package/dist/pages/SM-8.11/ClusterPage.js +37 -0
- package/dist/pages/SM-8.11/ConnectorMarketplacePage.d.ts +27 -0
- package/dist/pages/SM-8.11/ConnectorMarketplacePage.js +187 -0
- package/dist/pages/SM-8.11/ConnectorSettingsPage.d.ts +41 -0
- package/dist/pages/SM-8.11/ConnectorSettingsPage.js +153 -0
- package/dist/pages/SM-8.11/ConnectorTemplatePage.d.ts +11 -0
- package/dist/pages/SM-8.11/ConnectorTemplatePage.js +34 -0
- package/dist/pages/SM-8.11/FormJsPage.d.ts +33 -0
- package/dist/pages/SM-8.11/FormJsPage.js +109 -0
- package/dist/pages/SM-8.11/HomePage.d.ts +20 -0
- package/dist/pages/SM-8.11/HomePage.js +49 -0
- package/dist/pages/SM-8.11/IdentityTenantPage.d.ts +53 -0
- package/dist/pages/SM-8.11/IdentityTenantPage.js +264 -0
- package/dist/pages/SM-8.11/IdentityUsersPage.d.ts +92 -0
- package/dist/pages/SM-8.11/IdentityUsersPage.js +485 -0
- package/dist/pages/SM-8.11/KeycloakAdminPage.d.ts +17 -0
- package/dist/pages/SM-8.11/KeycloakAdminPage.js +78 -0
- package/dist/pages/SM-8.11/KeycloakLoginPage.d.ts +12 -0
- package/dist/pages/SM-8.11/KeycloakLoginPage.js +32 -0
- package/dist/pages/SM-8.11/KeycloakUtils.d.ts +17 -0
- package/dist/pages/SM-8.11/KeycloakUtils.js +94 -0
- package/dist/pages/SM-8.11/LoginPage.d.ts +21 -0
- package/dist/pages/SM-8.11/LoginPage.js +112 -0
- package/dist/pages/SM-8.11/ManagementIdentityPage.d.ts +44 -0
- package/dist/pages/SM-8.11/ManagementIdentityPage.js +176 -0
- package/dist/pages/SM-8.11/ModelerCreatePage.d.ts +238 -0
- package/dist/pages/SM-8.11/ModelerCreatePage.js +1950 -0
- package/dist/pages/SM-8.11/ModelerHomePage.d.ts +97 -0
- package/dist/pages/SM-8.11/ModelerHomePage.js +956 -0
- package/dist/pages/SM-8.11/NavigationPage.d.ts +58 -0
- package/dist/pages/SM-8.11/NavigationPage.js +389 -0
- package/dist/pages/SM-8.11/OCIdentityAuthorizationsPage.d.ts +10 -0
- package/dist/pages/SM-8.11/OCIdentityAuthorizationsPage.js +22 -0
- package/dist/pages/SM-8.11/OCIdentityClusterVariablesPage.d.ts +22 -0
- package/dist/pages/SM-8.11/OCIdentityClusterVariablesPage.js +120 -0
- package/dist/pages/SM-8.11/OCIdentityGroupsPage.d.ts +39 -0
- package/dist/pages/SM-8.11/OCIdentityGroupsPage.js +154 -0
- package/dist/pages/SM-8.11/OCIdentityHomePage.d.ts +23 -0
- package/dist/pages/SM-8.11/OCIdentityHomePage.js +115 -0
- package/dist/pages/SM-8.11/OCIdentityMappingRulesPage.d.ts +23 -0
- package/dist/pages/SM-8.11/OCIdentityMappingRulesPage.js +116 -0
- package/dist/pages/SM-8.11/OCIdentityRolesPage.d.ts +61 -0
- package/dist/pages/SM-8.11/OCIdentityRolesPage.js +433 -0
- package/dist/pages/SM-8.11/OCTenantPage.d.ts +73 -0
- package/dist/pages/SM-8.11/OCTenantPage.js +399 -0
- package/dist/pages/SM-8.11/OperateHomePage.d.ts +26 -0
- package/dist/pages/SM-8.11/OperateHomePage.js +139 -0
- package/dist/pages/SM-8.11/OperateProcessInstancePage.d.ts +30 -0
- package/dist/pages/SM-8.11/OperateProcessInstancePage.js +276 -0
- package/dist/pages/SM-8.11/OperateProcessesPage.d.ts +38 -0
- package/dist/pages/SM-8.11/OperateProcessesPage.js +383 -0
- package/dist/pages/SM-8.11/OptimizeCollectionsPage.d.ts +17 -0
- package/dist/pages/SM-8.11/OptimizeCollectionsPage.js +62 -0
- package/dist/pages/SM-8.11/OptimizeDashboardPage.d.ts +14 -0
- package/dist/pages/SM-8.11/OptimizeDashboardPage.js +63 -0
- package/dist/pages/SM-8.11/OptimizeHomePage.d.ts +19 -0
- package/dist/pages/SM-8.11/OptimizeHomePage.js +76 -0
- package/dist/pages/SM-8.11/OptimizeReportPage.d.ts +50 -0
- package/dist/pages/SM-8.11/OptimizeReportPage.js +209 -0
- package/dist/pages/SM-8.11/PlayPage.d.ts +47 -0
- package/dist/pages/SM-8.11/PlayPage.js +389 -0
- package/dist/pages/SM-8.11/ProcessApplicationPage.d.ts +35 -0
- package/dist/pages/SM-8.11/ProcessApplicationPage.js +340 -0
- package/dist/pages/SM-8.11/SettingsPage.d.ts +12 -0
- package/dist/pages/SM-8.11/SettingsPage.js +34 -0
- package/dist/pages/SM-8.11/TaskDetailsPage.d.ts +70 -0
- package/dist/pages/SM-8.11/TaskDetailsPage.js +273 -0
- package/dist/pages/SM-8.11/TaskPanelPage.d.ts +29 -0
- package/dist/pages/SM-8.11/TaskPanelPage.js +320 -0
- package/dist/pages/SM-8.11/TaskProcessesPage.d.ts +15 -0
- package/dist/pages/SM-8.11/TaskProcessesPage.js +77 -0
- package/dist/pages/SM-8.11/UtilitiesPage.d.ts +38 -0
- package/dist/pages/SM-8.11/UtilitiesPage.js +573 -0
- package/dist/pages/SM-8.11/optimizeReportUtils.d.ts +6 -0
- package/dist/pages/SM-8.11/optimizeReportUtils.js +77 -0
- package/dist/tests/SM-8.11/cluster-management-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/cluster-management-user-flows.spec.js +48 -0
- package/dist/tests/SM-8.11/cluster-variables.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/cluster-variables.spec.js +226 -0
- package/dist/tests/SM-8.11/connectors-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/connectors-user-flows.spec.js +307 -0
- package/dist/tests/SM-8.11/document-handling-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/document-handling-user-flows.spec.js +174 -0
- package/dist/tests/SM-8.11/hto-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/hto-user-flows.spec.js +410 -0
- package/dist/tests/SM-8.11/hub-web-modeler-smoke.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/hub-web-modeler-smoke.spec.js +24 -0
- package/dist/tests/SM-8.11/identity-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/identity-user-flows.spec.js +220 -0
- package/dist/tests/SM-8.11/license-key-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/license-key-user-flows.spec.js +461 -0
- package/dist/tests/SM-8.11/login.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/login.spec.js +24 -0
- package/dist/tests/SM-8.11/migration-path-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/migration-path-user-flows.spec.js +263 -0
- package/dist/tests/SM-8.11/mt-enabled-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/mt-enabled-user-flows.spec.js +607 -0
- package/dist/tests/SM-8.11/optimize-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/optimize-user-flows.spec.js +505 -0
- package/dist/tests/SM-8.11/play.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/play.spec.js +144 -0
- package/dist/tests/SM-8.11/rba-enabled-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/rba-enabled-user-flows.spec.js +712 -0
- package/dist/tests/SM-8.11/smoke-tests.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/smoke-tests.spec.js +167 -0
- package/dist/tests/SM-8.11/test-setup.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/test-setup.spec.js +24 -0
- package/dist/tests/SM-8.11/topology-orchestration-smoke.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/topology-orchestration-smoke.spec.js +58 -0
- package/dist/tests/SM-8.11/web-modeler-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/web-modeler-user-flows.spec.js +223 -0
- package/package.json +1 -1
- package/playwright.config.ts +21 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const test_1 = require("@playwright/test");
|
|
4
|
+
const SM_8_11_1 = require("../../fixtures/SM-8.11");
|
|
5
|
+
const _setup_1 = require("../../test-setup.js");
|
|
6
|
+
const sleep_1 = require("../../utils/sleep");
|
|
7
|
+
const fileUpload_1 = require("../../utils/fileUpload");
|
|
8
|
+
const UtilitiesPage_1 = require("../../pages/SM-8.11/UtilitiesPage");
|
|
9
|
+
if (process.env.IS_DS === 'true') {
|
|
10
|
+
SM_8_11_1.test.describe.configure({ mode: 'parallel' });
|
|
11
|
+
SM_8_11_1.test.describe('AWS Document Handling User Flows Test', () => {
|
|
12
|
+
SM_8_11_1.test.beforeEach(async ({ navigationPage }, testInfo) => {
|
|
13
|
+
await navigationPage.goToModeler((testInfo.workerIndex + 1) * 1000);
|
|
14
|
+
});
|
|
15
|
+
SM_8_11_1.test.afterEach(async ({ page }, testInfo) => {
|
|
16
|
+
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
17
|
+
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
18
|
+
});
|
|
19
|
+
(0, SM_8_11_1.test)('Document Handling HTO User Flow - AWS', async ({ modelerHomePage, formJsPage, modelerCreatePage, taskPanelPage, taskDetailsPage, operateHomePage, operateProcessInstancePage, operateProcessesPage, navigationPage, page, }) => {
|
|
20
|
+
SM_8_11_1.test.slow();
|
|
21
|
+
const randomName = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
22
|
+
const processName = 'HTO_Document_Handling_Process' + randomName;
|
|
23
|
+
const formNameFilePicker = 'File Picker Form ' + randomName;
|
|
24
|
+
const formNameDocumentPreview = 'Document Preview Form ' + randomName;
|
|
25
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project', async () => {
|
|
26
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
27
|
+
});
|
|
28
|
+
await SM_8_11_1.test.step('Create a Form with a File Picker Field', async () => {
|
|
29
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
30
|
+
await modelerHomePage.clickFormOption();
|
|
31
|
+
await modelerHomePage.enterFormName(formNameFilePicker);
|
|
32
|
+
await (0, sleep_1.sleep)(10000);
|
|
33
|
+
await formJsPage.dragAndDrop(formJsPage.filePicker, formJsPage.formEditor);
|
|
34
|
+
await formJsPage.clickGeneralPropertiesPanel();
|
|
35
|
+
await formJsPage.fillKeyInput('Upload_Files');
|
|
36
|
+
await formJsPage.enableUploadMultipleFiles();
|
|
37
|
+
await (0, sleep_1.sleep)(10000);
|
|
38
|
+
await formJsPage.deployForm();
|
|
39
|
+
});
|
|
40
|
+
await SM_8_11_1.test.step('Create a Form with a Document Preview Field', async () => {
|
|
41
|
+
await modelerHomePage.clickProjectBreadcrumb();
|
|
42
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
43
|
+
await modelerHomePage.clickFormOption();
|
|
44
|
+
await modelerHomePage.enterFormName(formNameDocumentPreview);
|
|
45
|
+
await (0, sleep_1.sleep)(10000);
|
|
46
|
+
await formJsPage.dragAndDrop(formJsPage.documentPreview, formJsPage.formEditor);
|
|
47
|
+
await formJsPage.clickGeneralPropertiesPanel();
|
|
48
|
+
await formJsPage.filldocumentReferenceInput('Upload_Files');
|
|
49
|
+
await (0, sleep_1.sleep)(10000);
|
|
50
|
+
await formJsPage.deployForm();
|
|
51
|
+
});
|
|
52
|
+
await SM_8_11_1.test.step('Add A BPMN Template To The Project', async () => {
|
|
53
|
+
await modelerHomePage.clickProjectBreadcrumb();
|
|
54
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
55
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
56
|
+
});
|
|
57
|
+
await SM_8_11_1.test.step('Create a BPMN Diagram with Two User Tasks and Linked Forms', async () => {
|
|
58
|
+
await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
|
|
59
|
+
timeout: 120000,
|
|
60
|
+
});
|
|
61
|
+
await modelerCreatePage.enterDiagramName(processName);
|
|
62
|
+
await (0, sleep_1.sleep)(1000);
|
|
63
|
+
await modelerCreatePage.clickCanvas();
|
|
64
|
+
await modelerCreatePage.clickGeneralPropertiesPanel();
|
|
65
|
+
await modelerCreatePage.clickIdInput();
|
|
66
|
+
await modelerCreatePage.fillIdInput(processName);
|
|
67
|
+
await modelerCreatePage.assertNameInput(processName);
|
|
68
|
+
await (0, sleep_1.sleep)(1000);
|
|
69
|
+
await modelerCreatePage.clickStartEventElement();
|
|
70
|
+
await modelerCreatePage.clickAppendElementButton();
|
|
71
|
+
await modelerCreatePage.clickAppendTaskButton();
|
|
72
|
+
await modelerCreatePage.clickChangeTypeButton();
|
|
73
|
+
await modelerCreatePage.clickUserTaskOption();
|
|
74
|
+
await modelerCreatePage.assertImplementationOption('zeebeUserTask');
|
|
75
|
+
await modelerCreatePage.embedForm(formNameFilePicker);
|
|
76
|
+
await modelerCreatePage.clickAppendElementButton();
|
|
77
|
+
await modelerCreatePage.clickAppendTaskButton();
|
|
78
|
+
await modelerCreatePage.clickChangeTypeButton();
|
|
79
|
+
await modelerCreatePage.clickUserTaskOption();
|
|
80
|
+
await modelerCreatePage.assertImplementationOption('zeebeUserTask');
|
|
81
|
+
await modelerCreatePage.embedForm(formNameDocumentPreview);
|
|
82
|
+
await modelerCreatePage.clickAppendElementButton();
|
|
83
|
+
await modelerCreatePage.clickAppendEndEventButton();
|
|
84
|
+
await (0, sleep_1.sleep)(5000);
|
|
85
|
+
await modelerCreatePage.runProcessInstance();
|
|
86
|
+
});
|
|
87
|
+
await SM_8_11_1.test.step('Navigate to Tasklist and Assert Document Upload And Preview', async () => {
|
|
88
|
+
await navigationPage.goToTasklist();
|
|
89
|
+
await taskPanelPage.openTask(processName);
|
|
90
|
+
await taskDetailsPage.clickAssignToMeButton();
|
|
91
|
+
await (0, fileUpload_1.uploadFile)(page, [
|
|
92
|
+
'simple_text.txt',
|
|
93
|
+
'simple_pdf.pdf',
|
|
94
|
+
'camunda.png',
|
|
95
|
+
]);
|
|
96
|
+
await taskDetailsPage.clickCompleteTaskButton();
|
|
97
|
+
await (0, sleep_1.sleep)(10000);
|
|
98
|
+
await page.reload();
|
|
99
|
+
await taskPanelPage.openTask(processName);
|
|
100
|
+
await taskDetailsPage.clickAssignToMeButton();
|
|
101
|
+
await taskDetailsPage.assertLoadedImage('camunda.png');
|
|
102
|
+
await taskDetailsPage.assertDocumentDownloadButton('camunda.png');
|
|
103
|
+
await (0, test_1.expect)(taskDetailsPage.noPreviewContainer).toContainText('simple_text.txt', { timeout: 60000 });
|
|
104
|
+
await taskDetailsPage.assertDocumentDownloadButton('simple_text.txt');
|
|
105
|
+
await (0, test_1.expect)(taskDetailsPage.previewContainer).toHaveCount(2);
|
|
106
|
+
await taskDetailsPage.assertPdfPreviewViewerExists();
|
|
107
|
+
await taskDetailsPage.clickCompleteTaskButton();
|
|
108
|
+
});
|
|
109
|
+
await SM_8_11_1.test.step('Navigate to Operate and Assert Documents And StoreId', async () => {
|
|
110
|
+
await navigationPage.goToOperate();
|
|
111
|
+
await operateHomePage.clickProcessesTab();
|
|
112
|
+
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
113
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'camunda.png');
|
|
114
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'simple_pdf.pdf');
|
|
115
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'simple_text.txt');
|
|
116
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('Upload_Files', 'aws');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
(0, SM_8_11_1.test)('Document Handling Connectors User Flow - AWS @tasklistV2', async ({ page, navigationPage, modelerHomePage, modelerCreatePage, operateHomePage, operateProcessesPage, connectorMarketplacePage, operateProcessInstancePage, ocIdentityHomePage, ocIdentityRolesPage, }) => {
|
|
120
|
+
const processName = 'Document_Handling_Connectors_User_Flow_AWS_Process' +
|
|
121
|
+
(await (0, _setup_1.generateRandomStringAsync)(3));
|
|
122
|
+
const baseURL = process.env.PLAYWRIGHT_BASE_URL ||
|
|
123
|
+
`https://eks-${process.env.BASE_URL}.qa.aws.camunda.cloud`;
|
|
124
|
+
const clientSecret = process.env.DISTRO_QA_E2E_TESTS_KEYCLOAK_CLIENTS_SECRET;
|
|
125
|
+
const endpoint = `${baseURL}/auth/realms/camunda-platform/protocol/openid-connect/token`;
|
|
126
|
+
await SM_8_11_1.test.step('Grant client admin access', async () => {
|
|
127
|
+
// After a minor upgrade, the demo user's authorization for the Admin
|
|
128
|
+
// application can take time to propagate; until it does, /admin
|
|
129
|
+
// redirects to /admin/forbidden and the navigation tabs never render.
|
|
130
|
+
// Re-navigate until the Roles tab is available to ride out that delay.
|
|
131
|
+
//
|
|
132
|
+
// goToOCAdmin's default retry count (5, with growing backoff) assumes
|
|
133
|
+
// a genuine login failure and can alone burn several minutes retrying
|
|
134
|
+
// one navigation attempt -- against a forbidden-redirect that clears
|
|
135
|
+
// the banner too, that single call can exhaust the whole outer
|
|
136
|
+
// toPass budget, leaving it effectively one shot instead of a real
|
|
137
|
+
// retry-until-propagated loop. Pass maxRetries=1 so each outer
|
|
138
|
+
// iteration fails fast and toPass gets many chances over 300s.
|
|
139
|
+
await (0, test_1.expect)(async () => {
|
|
140
|
+
await navigationPage.goToOCAdmin(undefined, undefined, 1);
|
|
141
|
+
await (0, test_1.expect)(ocIdentityHomePage.rolesTab).toBeVisible({
|
|
142
|
+
timeout: 15000,
|
|
143
|
+
});
|
|
144
|
+
}).toPass({ timeout: 300000, intervals: [15000] });
|
|
145
|
+
await ocIdentityHomePage.clickRolesTab();
|
|
146
|
+
await ocIdentityRolesPage.clickRole('admin');
|
|
147
|
+
await ocIdentityRolesPage.addClientToRole('test');
|
|
148
|
+
});
|
|
149
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project and Create a REST Connector Document Handling Flow', async () => {
|
|
150
|
+
await navigationPage.goToModeler();
|
|
151
|
+
await (0, UtilitiesPage_1.modelAndRunConnectorsDocHandlingDiagram)(modelerCreatePage, modelerHomePage, processName, page, connectorMarketplacePage, `"${baseURL}/orchestration"`, `"test"`, `"${clientSecret}"`, endpoint);
|
|
152
|
+
});
|
|
153
|
+
await SM_8_11_1.test.step('View Process Instance in Operate, assert it completes and assert variable values are correct', async () => {
|
|
154
|
+
await navigationPage.goToOperate();
|
|
155
|
+
await operateHomePage.clickProcessesTab();
|
|
156
|
+
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
157
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc', 'aws');
|
|
158
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc', 'b4946b81fed5c91a7de5f77c350241bc5ece49152708c61bd6c2208836d8415e');
|
|
159
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc', '19456');
|
|
160
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc', 'image/jpeg');
|
|
161
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc2', 'aws');
|
|
162
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc2', 'b4946b81fed5c91a7de5f77c350241bc5ece49152708c61bd6c2208836d8415e');
|
|
163
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc2', '19456');
|
|
164
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('doc2', 'image/jpeg');
|
|
165
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('uploadBatch', 'aws');
|
|
166
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('uploadBatch', '201');
|
|
167
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('uploadDoc2', 'aws');
|
|
168
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('uploadDoc2', '201');
|
|
169
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('uploadDoc2', 'aws');
|
|
170
|
+
await operateProcessInstancePage.assertProcessVariableContainsText('GetDocUpload', '200');
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const test_1 = require("@playwright/test");
|
|
4
|
+
const SM_8_11_1 = require("../../fixtures/SM-8.11");
|
|
5
|
+
const _setup_1 = require("../../test-setup.js");
|
|
6
|
+
const sleep_1 = require("../../utils/sleep");
|
|
7
|
+
const UtilitiesPage_1 = require("../../pages/SM-8.11/UtilitiesPage");
|
|
8
|
+
const resetSession_1 = require("../../utils/resetSession");
|
|
9
|
+
SM_8_11_1.test.describe.configure({ mode: 'parallel' });
|
|
10
|
+
SM_8_11_1.test.describe('HTO User Flow Tests', () => {
|
|
11
|
+
const mtTenant = process.env.IS_MT === 'true' ? '<default>' : '';
|
|
12
|
+
SM_8_11_1.test.beforeEach(async ({ navigationPage }, testInfo) => {
|
|
13
|
+
await navigationPage.goToModeler((testInfo.workerIndex + 1) * 1000);
|
|
14
|
+
});
|
|
15
|
+
SM_8_11_1.test.afterEach(async ({ page }, testInfo) => {
|
|
16
|
+
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
17
|
+
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
18
|
+
});
|
|
19
|
+
(0, SM_8_11_1.test)('Job Worker User Task Most Common Flow @tasklistV1', async ({ modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessesPage, taskDetailsPage, taskPanelPage, operateProcessInstancePage, page, }) => {
|
|
20
|
+
SM_8_11_1.test.slow();
|
|
21
|
+
const processName = 'User_Task_Process' + (await (0, _setup_1.generateRandomStringAsync)(3));
|
|
22
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
|
|
23
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
24
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
25
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
26
|
+
});
|
|
27
|
+
await SM_8_11_1.test.step('Create BPMN Diagram with User Task and Start Process Instance', async () => {
|
|
28
|
+
await modelerCreatePage.modelJobWorkerDiagram(processName);
|
|
29
|
+
await modelerCreatePage.runProcessInstance('', mtTenant);
|
|
30
|
+
});
|
|
31
|
+
await SM_8_11_1.test.step('View Process Instance in Operate, complete User Task in Tasklist & assert process complete in Operate', async () => {
|
|
32
|
+
await navigationPage.goToOperate();
|
|
33
|
+
await operateHomePage.clickProcessesTab();
|
|
34
|
+
await operateProcessesPage.clickProcessInstanceLink(processName);
|
|
35
|
+
await operateProcessInstancePage.activeIconAssertion();
|
|
36
|
+
await navigationPage.goToTasklist();
|
|
37
|
+
await taskPanelPage.openTask(processName);
|
|
38
|
+
await taskDetailsPage.clickAssignToMeButton();
|
|
39
|
+
await taskDetailsPage.clickCompleteTaskButton();
|
|
40
|
+
await (0, test_1.expect)(page.getByText('Task completed')).toBeVisible({
|
|
41
|
+
timeout: 200000,
|
|
42
|
+
});
|
|
43
|
+
await navigationPage.goToOperate();
|
|
44
|
+
await operateHomePage.clickProcessesTab();
|
|
45
|
+
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
46
|
+
await operateProcessInstancePage.completedIconAssertion();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, SM_8_11_1.test)('Zeebe User Task With Priority', async ({ page, modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessesPage, operateProcessInstancePage, taskDetailsPage, taskPanelPage, }) => {
|
|
50
|
+
SM_8_11_1.test.slow();
|
|
51
|
+
const randomName = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
52
|
+
const processName = 'Zeebe_User_Task_Process_With_Priority' + randomName;
|
|
53
|
+
const taskName = 'priorityTest' + randomName;
|
|
54
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
|
|
55
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
56
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
57
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
58
|
+
});
|
|
59
|
+
await SM_8_11_1.test.step('Create BPMN Diagram with multiple Zeebe User Tasks with Priority and Start Process Instance', async () => {
|
|
60
|
+
await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
|
|
61
|
+
timeout: 120000,
|
|
62
|
+
});
|
|
63
|
+
await modelerCreatePage.enterDiagramName(processName);
|
|
64
|
+
await (0, sleep_1.sleep)(1000);
|
|
65
|
+
await modelerCreatePage.clickCanvas();
|
|
66
|
+
await modelerCreatePage.clickGeneralPropertiesPanel();
|
|
67
|
+
await modelerCreatePage.clickIdInput();
|
|
68
|
+
await modelerCreatePage.fillIdInput(processName);
|
|
69
|
+
await modelerCreatePage.assertNameInput(processName);
|
|
70
|
+
await (0, sleep_1.sleep)(1000);
|
|
71
|
+
await modelerCreatePage.clickStartEventElement();
|
|
72
|
+
await modelerCreatePage.addParallelUserTasks(4, taskName);
|
|
73
|
+
await modelerCreatePage.clickAppendElementButton();
|
|
74
|
+
await modelerCreatePage.clickAppendEndEventButton('parallelGateway');
|
|
75
|
+
await modelerCreatePage.setPriority(taskName, 1, 4);
|
|
76
|
+
await modelerCreatePage.runProcessInstance('', mtTenant);
|
|
77
|
+
});
|
|
78
|
+
await SM_8_11_1.test.step('Complete User Task in Tasklist & assert process complete in Operate', async () => {
|
|
79
|
+
await navigationPage.goToTasklist();
|
|
80
|
+
await (0, UtilitiesPage_1.assertPageTextWithRetry)(page, processName, false, 60000);
|
|
81
|
+
await (0, UtilitiesPage_1.completeTaskWithRetry)(page, taskPanelPage, taskDetailsPage, `${taskName}4`, 'critical');
|
|
82
|
+
await (0, UtilitiesPage_1.completeTaskWithRetry)(page, taskPanelPage, taskDetailsPage, `${taskName}3`, 'high');
|
|
83
|
+
await (0, UtilitiesPage_1.completeTaskWithRetry)(page, taskPanelPage, taskDetailsPage, `${taskName}2`, 'medium');
|
|
84
|
+
await (0, UtilitiesPage_1.completeTaskWithRetry)(page, taskPanelPage, taskDetailsPage, `${taskName}1`, 'low');
|
|
85
|
+
await taskPanelPage.filterBy('Completed');
|
|
86
|
+
await taskPanelPage.clickCollapseFilter();
|
|
87
|
+
await (0, test_1.expect)(taskPanelPage.activeFilter('Completed')).toBeVisible({
|
|
88
|
+
timeout: 45000,
|
|
89
|
+
});
|
|
90
|
+
await page.reload();
|
|
91
|
+
await page.waitForLoadState('networkidle');
|
|
92
|
+
await taskPanelPage.openTask(`${taskName}4`, false);
|
|
93
|
+
await (0, test_1.expect)(page.getByText(processName).first()).toBeVisible({
|
|
94
|
+
timeout: 60000,
|
|
95
|
+
});
|
|
96
|
+
await taskDetailsPage.taskAssertion(processName);
|
|
97
|
+
await taskDetailsPage.priorityAssertion('critical');
|
|
98
|
+
await (0, sleep_1.sleep)(3000);
|
|
99
|
+
await navigationPage.goToOperate();
|
|
100
|
+
await operateHomePage.clickProcessesTab();
|
|
101
|
+
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
102
|
+
const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
|
|
103
|
+
(0, test_1.expect)(result).toBe('completed');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
(0, SM_8_11_1.test)('User Task Editing Variables Flow', async ({ page, operateHomePage, modelerHomePage, navigationPage, modelerCreatePage, operateProcessesPage, operateProcessInstancePage, taskPanelPage, }) => {
|
|
107
|
+
SM_8_11_1.test.slow();
|
|
108
|
+
const processName = 'User_Task_Editing_Variables' + (await (0, _setup_1.generateRandomStringAsync)(3));
|
|
109
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
|
|
110
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
111
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
112
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
113
|
+
});
|
|
114
|
+
await SM_8_11_1.test.step('Create BPMN Diagram with User Task and Start Process Instance', async () => {
|
|
115
|
+
await modelerCreatePage.modelCamundaUserTaskDiagram(processName);
|
|
116
|
+
await modelerCreatePage.runProcessInstance('{"testVariable":"testValue"}', mtTenant);
|
|
117
|
+
await (0, sleep_1.sleep)(60000);
|
|
118
|
+
});
|
|
119
|
+
await SM_8_11_1.test.step('View Process Instance in Operate, Edit the Variable & Assert the Variable is Updated in Tasklist', async () => {
|
|
120
|
+
await navigationPage.goToOperate();
|
|
121
|
+
await operateHomePage.clickProcessesTab();
|
|
122
|
+
await operateProcessesPage.clickProcessInstanceLink(processName);
|
|
123
|
+
await operateProcessInstancePage.activeIconAssertion();
|
|
124
|
+
await (0, test_1.expect)(page.getByText('"testValue"')).toBeVisible({
|
|
125
|
+
timeout: 120000,
|
|
126
|
+
});
|
|
127
|
+
await (0, test_1.expect)(page.getByText('testVariable', { exact: true })).toBeVisible();
|
|
128
|
+
await operateHomePage.clickEditVariableButton('testVariable');
|
|
129
|
+
await operateHomePage.fillVariableValueInput('updatedValue');
|
|
130
|
+
await operateHomePage.clickSaveVariableButton();
|
|
131
|
+
await (0, test_1.expect)(operateHomePage.editVariableSpinner).not.toBeVisible({
|
|
132
|
+
timeout: 120000,
|
|
133
|
+
});
|
|
134
|
+
await (0, test_1.expect)(page.getByText('"testValue"')).not.toBeVisible({
|
|
135
|
+
timeout: 90000,
|
|
136
|
+
});
|
|
137
|
+
await (0, test_1.expect)(page.getByText('"updatedValue"')).toBeVisible({
|
|
138
|
+
timeout: 30000,
|
|
139
|
+
});
|
|
140
|
+
await (0, sleep_1.sleep)(10000);
|
|
141
|
+
await navigationPage.goToTasklist();
|
|
142
|
+
await taskPanelPage.openTask(processName);
|
|
143
|
+
await (0, test_1.expect)(page.getByText('testVariable')).toBeVisible();
|
|
144
|
+
await (0, test_1.expect)(page.getByText('"updatedValue"')).toBeVisible();
|
|
145
|
+
await (0, test_1.expect)(page.getByText('"testValue"')).not.toBeVisible();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
(0, SM_8_11_1.test)('User Task Restrictions Enabled Flow - Candidate Group @tasklistV1', async ({ page, modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessInstancePage, taskDetailsPage, taskPanelPage, managementIdentityPage, keycloakAdminPage, keycloakLoginPage, ocIdentityHomePage, ocIdentityMappingRulesPage, ocIdentityRolesPage, ocIdentityGroupsPage, browser, }) => {
|
|
149
|
+
SM_8_11_1.test.slow();
|
|
150
|
+
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
151
|
+
const userTaskName = 'candidateGroupTask' + randomString;
|
|
152
|
+
const processName = 'User_Task_Process_Candidate_Group' + randomString;
|
|
153
|
+
const groupNameSingle = await (0, _setup_1.generateRandomStringAsync)(4);
|
|
154
|
+
const groupNameMultiple = await (0, _setup_1.generateRandomStringAsync)(4);
|
|
155
|
+
const testUser1 = (await (0, _setup_1.generateRandomStringAsync)(6)).toLowerCase();
|
|
156
|
+
const testUser2 = (await (0, _setup_1.generateRandomStringAsync)(6)).toLowerCase();
|
|
157
|
+
const password = process.env.DISTRO_QA_E2E_TESTS_IDENTITY_FIRSTUSER_PASSWORD;
|
|
158
|
+
const credentials1 = {
|
|
159
|
+
username: testUser1,
|
|
160
|
+
password: password,
|
|
161
|
+
};
|
|
162
|
+
const credentials2 = {
|
|
163
|
+
username: testUser2,
|
|
164
|
+
password: password,
|
|
165
|
+
};
|
|
166
|
+
await SM_8_11_1.test.step('Create Two New Test Users And Assign to Role', async () => {
|
|
167
|
+
await navigationPage.goToOCAdmin();
|
|
168
|
+
await (0, UtilitiesPage_1.createUserAndAssignToRole)(page, navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityMappingRulesPage, ocIdentityRolesPage, testUser1, password);
|
|
169
|
+
await (0, resetSession_1.resetSession)(browser, page);
|
|
170
|
+
await navigationPage.goToOCAdmin();
|
|
171
|
+
await (0, UtilitiesPage_1.createUserAndAssignToRole)(page, navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityMappingRulesPage, ocIdentityRolesPage, testUser2, password);
|
|
172
|
+
});
|
|
173
|
+
await SM_8_11_1.test.step('Create Two User Groups in Identity', async () => {
|
|
174
|
+
await ocIdentityHomePage.clickGroupsTab();
|
|
175
|
+
await ocIdentityGroupsPage.createGroup(groupNameSingle, groupNameSingle);
|
|
176
|
+
await ocIdentityGroupsPage.createGroup(groupNameMultiple, groupNameMultiple);
|
|
177
|
+
});
|
|
178
|
+
await SM_8_11_1.test.step('Assign Users to the Created Groups in Identity', async () => {
|
|
179
|
+
await ocIdentityGroupsPage.clickGroupId(groupNameSingle);
|
|
180
|
+
await ocIdentityGroupsPage.assignUserToGroup('demo');
|
|
181
|
+
await ocIdentityHomePage.clickGroupsTab();
|
|
182
|
+
await ocIdentityGroupsPage.clickGroupId(groupNameMultiple);
|
|
183
|
+
await ocIdentityGroupsPage.assignUserToGroup(testUser1);
|
|
184
|
+
await ocIdentityHomePage.clickGroupsTab();
|
|
185
|
+
await ocIdentityGroupsPage.clickGroupId(groupNameMultiple);
|
|
186
|
+
await ocIdentityGroupsPage.assignUserToGroup(testUser2);
|
|
187
|
+
});
|
|
188
|
+
await SM_8_11_1.test.step('Create a BPMN Diagram Template', async () => {
|
|
189
|
+
await navigationPage.goToModeler();
|
|
190
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
191
|
+
});
|
|
192
|
+
await SM_8_11_1.test.step('Create BPMN Diagram with Multiple User Tasks', async () => {
|
|
193
|
+
await (0, UtilitiesPage_1.modelDiagramFromFile)(page, modelerHomePage, modelerCreatePage, processName, 'Candidate_User_Process_Three_Tasks', 3, userTaskName);
|
|
194
|
+
});
|
|
195
|
+
await SM_8_11_1.test.step('Assign User tasks to Candidate Groups and Start Process Instance', async () => {
|
|
196
|
+
await modelerCreatePage.selectUserTask(`${userTaskName}1`);
|
|
197
|
+
await modelerCreatePage.expandAssignmentSection();
|
|
198
|
+
await modelerCreatePage.clickCandidateGroupsInput();
|
|
199
|
+
await modelerCreatePage.fillCandidateGroupsInput(groupNameSingle);
|
|
200
|
+
await (0, sleep_1.sleep)(1000);
|
|
201
|
+
await modelerCreatePage.clickAssigneeInput();
|
|
202
|
+
await modelerCreatePage.fillAssigneeInput(testUser1);
|
|
203
|
+
await modelerCreatePage.clickCanvas();
|
|
204
|
+
await modelerCreatePage.selectUserTask(`${userTaskName}2`);
|
|
205
|
+
await modelerCreatePage.expandAssignmentSection();
|
|
206
|
+
await modelerCreatePage.clickCandidateGroupsInput();
|
|
207
|
+
await modelerCreatePage.fillCandidateGroupsInput(groupNameMultiple);
|
|
208
|
+
await modelerCreatePage.clickCanvas(); // blur to commit candidate group to BPMN model
|
|
209
|
+
await modelerCreatePage.runProcessInstance('', mtTenant);
|
|
210
|
+
});
|
|
211
|
+
await SM_8_11_1.test.step('View User Tasks in Tasklist', async () => {
|
|
212
|
+
await navigationPage.goToTasklist();
|
|
213
|
+
await page.waitForLoadState('networkidle');
|
|
214
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}1`)).toBeVisible({
|
|
215
|
+
timeout: 120000,
|
|
216
|
+
});
|
|
217
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}2`)).not.toBeVisible({
|
|
218
|
+
timeout: 120000,
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
await SM_8_11_1.test.step('Clear cookies and reset session', async () => {
|
|
222
|
+
await (0, resetSession_1.resetSession)(browser, page); //a workaround for https://github.com/camunda/camunda/issues/34513
|
|
223
|
+
});
|
|
224
|
+
await SM_8_11_1.test.step('Navigate to Tasklist and Assert User Tasks ', async () => {
|
|
225
|
+
await navigationPage.goToTasklist(undefined, credentials1);
|
|
226
|
+
await page.waitForLoadState('networkidle');
|
|
227
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}1`)).toBeVisible({
|
|
228
|
+
timeout: 120000,
|
|
229
|
+
});
|
|
230
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}2`)).toBeVisible({
|
|
231
|
+
timeout: 120000,
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
await SM_8_11_1.test.step('Clear cookies and reset session', async () => {
|
|
235
|
+
await (0, resetSession_1.resetSession)(browser, page); //a workaround for https://github.com/camunda/camunda/issues/34513
|
|
236
|
+
});
|
|
237
|
+
await SM_8_11_1.test.step('Navigate to Tasklist and Assert User Tasks ', async () => {
|
|
238
|
+
await navigationPage.goToTasklist(undefined, credentials2);
|
|
239
|
+
await page.waitForLoadState('networkidle');
|
|
240
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}1`)).not.toBeVisible({
|
|
241
|
+
timeout: 120000,
|
|
242
|
+
});
|
|
243
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}2`)).toBeVisible({
|
|
244
|
+
timeout: 120000,
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
await SM_8_11_1.test.step('Complete a User Task', async () => {
|
|
248
|
+
await taskPanelPage.openTask(`${userTaskName}2`);
|
|
249
|
+
await taskDetailsPage.clickAssignToMeButton();
|
|
250
|
+
await taskDetailsPage.clickCompleteTaskButton();
|
|
251
|
+
await (0, test_1.expect)(page.getByText('Task completed')).toBeVisible({
|
|
252
|
+
timeout: 200000,
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
await SM_8_11_1.test.step('Navigate to Operate and Assert Process Instance', async () => {
|
|
256
|
+
await navigationPage.goToOperate(undefined, credentials2);
|
|
257
|
+
await operateHomePage.openProcess(processName);
|
|
258
|
+
await operateProcessInstancePage.activeUserTaskIconVisibleAssertion(`state-overlay-${userTaskName}1-active`);
|
|
259
|
+
await operateProcessInstancePage.activeUserTaskIconNotVisibleAssertion(`state-overlay-${userTaskName}2-active`);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
(0, SM_8_11_1.test)('User Task Restrictions Enabled Flow - Candidate User @tasklistV1', async ({ page, modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessInstancePage, taskDetailsPage, taskPanelPage, managementIdentityPage, keycloakAdminPage, keycloakLoginPage, ocIdentityMappingRulesPage, ocIdentityHomePage, ocIdentityRolesPage, browser, }) => {
|
|
263
|
+
SM_8_11_1.test.slow();
|
|
264
|
+
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
265
|
+
const userTaskName = 'candidateUserTask' + randomString;
|
|
266
|
+
const processName = 'User_Task_Process_Candidate_User' + randomString;
|
|
267
|
+
const testUser = (await (0, _setup_1.generateRandomStringAsync)(6)).toLowerCase();
|
|
268
|
+
const password = process.env.DISTRO_QA_E2E_TESTS_IDENTITY_FIRSTUSER_PASSWORD;
|
|
269
|
+
const credentials = {
|
|
270
|
+
username: testUser,
|
|
271
|
+
password: password,
|
|
272
|
+
};
|
|
273
|
+
await SM_8_11_1.test.step('Create new Test User And Assign to Role', async () => {
|
|
274
|
+
await navigationPage.goToOCAdmin();
|
|
275
|
+
await (0, UtilitiesPage_1.createUserAndAssignToRole)(page, navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, ocIdentityMappingRulesPage, ocIdentityRolesPage, testUser, password);
|
|
276
|
+
});
|
|
277
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project and Create a BPMN Diagram Template', async () => {
|
|
278
|
+
await navigationPage.goToModeler();
|
|
279
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
280
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
281
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
282
|
+
});
|
|
283
|
+
await SM_8_11_1.test.step('Create BPMN Diagram with Multiple User Tasks', async () => {
|
|
284
|
+
await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
|
|
285
|
+
timeout: 120000,
|
|
286
|
+
});
|
|
287
|
+
await modelerCreatePage.enterDiagramName(processName);
|
|
288
|
+
// Replaced sleep(10000) with deterministic wait: the diagram name
|
|
289
|
+
// commit triggers a panel re-render; assertNameInput below waits
|
|
290
|
+
// for that to settle. Saves ~10s per run.
|
|
291
|
+
await modelerCreatePage.clickStartEventElement();
|
|
292
|
+
await modelerCreatePage.clickGeneralPropertiesPanel();
|
|
293
|
+
await modelerCreatePage.assertNameInput(processName);
|
|
294
|
+
await modelerCreatePage.clickStartEventElement();
|
|
295
|
+
await modelerCreatePage.addParallelUserTasks(3, userTaskName);
|
|
296
|
+
await modelerCreatePage.clickAppendElementButton();
|
|
297
|
+
await modelerCreatePage.clickAppendEndEventButton('parallelGateway');
|
|
298
|
+
});
|
|
299
|
+
await SM_8_11_1.test.step('Assign User tasks to Candidate Users and Start Process Instance', async () => {
|
|
300
|
+
await modelerCreatePage.selectUserTask(`${userTaskName}1`);
|
|
301
|
+
await modelerCreatePage.expandAssignmentSection();
|
|
302
|
+
await modelerCreatePage.clickCandidateUsersInput();
|
|
303
|
+
await modelerCreatePage.fillCandidateUsersInput(testUser);
|
|
304
|
+
await modelerCreatePage.clickAssigneeInput();
|
|
305
|
+
await modelerCreatePage.fillAssigneeInput('demo');
|
|
306
|
+
await modelerCreatePage.clickCanvas();
|
|
307
|
+
await modelerCreatePage.selectUserTask(`${userTaskName}2`);
|
|
308
|
+
await modelerCreatePage.expandAssignmentSection();
|
|
309
|
+
await modelerCreatePage.clickCandidateUsersInput();
|
|
310
|
+
await modelerCreatePage.fillCandidateUsersInput('demo');
|
|
311
|
+
await modelerCreatePage.clickCanvas();
|
|
312
|
+
await modelerCreatePage.selectUserTask(`${userTaskName}3`);
|
|
313
|
+
await modelerCreatePage.expandAssignmentSection();
|
|
314
|
+
await modelerCreatePage.clickCandidateUsersInput();
|
|
315
|
+
await modelerCreatePage.fillCandidateUsersInput(testUser);
|
|
316
|
+
await modelerCreatePage.clickCanvas(); // blur to commit candidate user to BPMN model
|
|
317
|
+
await modelerCreatePage.runProcessInstance('', mtTenant);
|
|
318
|
+
});
|
|
319
|
+
await SM_8_11_1.test.step('View User Tasks in Tasklist', async () => {
|
|
320
|
+
await navigationPage.goToTasklist();
|
|
321
|
+
// Removed page.waitForLoadState('networkidle'). Tasklist polls
|
|
322
|
+
// for new tasks continuously; networkidle never fires and the
|
|
323
|
+
// test would hang for the 12-min Playwright timeout. The
|
|
324
|
+
// expect(...).toBeVisible({timeout}) auto-waits below cover the
|
|
325
|
+
// readiness window correctly.
|
|
326
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}1`)).toBeVisible({
|
|
327
|
+
timeout: 120000,
|
|
328
|
+
});
|
|
329
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}2`)).toBeVisible({
|
|
330
|
+
timeout: 120000,
|
|
331
|
+
});
|
|
332
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}3`)).not.toBeVisible({
|
|
333
|
+
timeout: 120000,
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
await SM_8_11_1.test.step('Clear cookies and reset session', async () => {
|
|
337
|
+
await (0, resetSession_1.resetSession)(browser, page); //a workaround for https://github.com/camunda/camunda/issues/34513
|
|
338
|
+
});
|
|
339
|
+
await SM_8_11_1.test.step('Navigate to Tasklist and Assert User Tasks ', async () => {
|
|
340
|
+
await navigationPage.goToTasklist(undefined, credentials);
|
|
341
|
+
// Removed networkidle wait — same reason as above (Tasklist
|
|
342
|
+
// polls); toBeVisible auto-waits cover readiness.
|
|
343
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}1`)).toBeVisible({
|
|
344
|
+
timeout: 120000,
|
|
345
|
+
});
|
|
346
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}2`)).not.toBeVisible({
|
|
347
|
+
timeout: 120000,
|
|
348
|
+
});
|
|
349
|
+
await (0, test_1.expect)(page.getByText(`${userTaskName}3`)).toBeVisible({
|
|
350
|
+
timeout: 120000,
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
await SM_8_11_1.test.step('Complete a User Task', async () => {
|
|
354
|
+
await taskPanelPage.openTask(`${userTaskName}3`);
|
|
355
|
+
await taskDetailsPage.clickAssignToMeButton();
|
|
356
|
+
await taskDetailsPage.clickCompleteTaskButton();
|
|
357
|
+
await (0, test_1.expect)(page.getByText('Task completed')).toBeVisible({
|
|
358
|
+
timeout: 200000,
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
await SM_8_11_1.test.step('Navigate to Operate and Assert Process Instance', async () => {
|
|
362
|
+
await navigationPage.goToOperate(undefined, credentials);
|
|
363
|
+
await operateHomePage.openProcess(processName);
|
|
364
|
+
await operateProcessInstancePage.activeUserTaskIconVisibleAssertion(`state-overlay-${userTaskName}1-active`);
|
|
365
|
+
await operateProcessInstancePage.activeUserTaskIconVisibleAssertion(`state-overlay-${userTaskName}2-active`);
|
|
366
|
+
await operateProcessInstancePage.activeUserTaskIconNotVisibleAssertion(`state-overlay-${userTaskName}3-active`);
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
(0, SM_8_11_1.test)('RBA Off User Flow', async ({ page, modelerHomePage, modelerCreatePage, taskPanelPage, navigationPage, taskProcessesPage, ocIdentityHomePage, ocIdentityAuthorizationsPage, }) => {
|
|
370
|
+
SM_8_11_1.test.slow();
|
|
371
|
+
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
372
|
+
const processName = 'User_Task_Process_RBA_OFF_' + randomString + '_';
|
|
373
|
+
await SM_8_11_1.test.step('Navigate to Identity', async () => {
|
|
374
|
+
await navigationPage.goToOCAdmin();
|
|
375
|
+
await ocIdentityHomePage.clickAuthorizationsTab();
|
|
376
|
+
await ocIdentityAuthorizationsPage.clickProcessDefinitionTab();
|
|
377
|
+
await (0, test_1.expect)(page.getByText(processName).first()).not.toBeVisible({
|
|
378
|
+
timeout: 30000,
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
await SM_8_11_1.test.step('Navigate to Web Modeler', async () => {
|
|
382
|
+
await navigationPage.goToModeler();
|
|
383
|
+
});
|
|
384
|
+
await SM_8_11_1.test.step('Open Cross Component Test Project', async () => {
|
|
385
|
+
await modelerHomePage.clickCrossComponentProjectFolder();
|
|
386
|
+
});
|
|
387
|
+
await SM_8_11_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
|
|
388
|
+
await (0, UtilitiesPage_1.runMultipleProcesses)(page, modelerHomePage, modelerCreatePage, 2, processName, processName, mtTenant);
|
|
389
|
+
});
|
|
390
|
+
await SM_8_11_1.test.step('Navigate to Tasklist and Make Sure that the Two Deployed Processes Are Accessible', async () => {
|
|
391
|
+
await navigationPage.goToTasklist();
|
|
392
|
+
await taskPanelPage.clickProcessesTab();
|
|
393
|
+
await taskProcessesPage.clickpopupContinueButton();
|
|
394
|
+
await taskProcessesPage.clickSearchProcessesSearchbox();
|
|
395
|
+
await taskProcessesPage.fillSearchProcessesSearchbox(processName + '1');
|
|
396
|
+
await taskProcessesPage.startProcess(processName + '1');
|
|
397
|
+
await (0, test_1.expect)(page.getByText(`${processName}1`).last()).toBeVisible({
|
|
398
|
+
timeout: 120000,
|
|
399
|
+
});
|
|
400
|
+
await taskPanelPage.clickProcessesTab();
|
|
401
|
+
await taskProcessesPage.clickpopupContinueButton();
|
|
402
|
+
await taskProcessesPage.clickSearchProcessesSearchbox();
|
|
403
|
+
await taskProcessesPage.fillSearchProcessesSearchbox(processName + '2');
|
|
404
|
+
await taskProcessesPage.startProcess(processName + '2');
|
|
405
|
+
await (0, test_1.expect)(page.getByText(`${processName}2`).last()).toBeVisible({
|
|
406
|
+
timeout: 120000,
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
});
|
|
410
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const SM_8_11_1 = require("../../fixtures/SM-8.11");
|
|
4
|
+
const _setup_1 = require("../../test-setup.js");
|
|
5
|
+
SM_8_11_1.test.describe('Hub and Web Modeler smoke tests', () => {
|
|
6
|
+
SM_8_11_1.test.afterEach(async ({ page }, testInfo) => {
|
|
7
|
+
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
8
|
+
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
9
|
+
});
|
|
10
|
+
(0, SM_8_11_1.test)('Deploy and start a process on the selected cluster', async ({ navigationPage, modelerHomePage, modelerCreatePage, }) => {
|
|
11
|
+
const suffix = await (0, _setup_1.generateRandomStringAsync)(5);
|
|
12
|
+
const processName = `Hub_Web_Modeler_Smoke_${suffix}`;
|
|
13
|
+
await SM_8_11_1.test.step('Open Web Modeler and create a BPMN diagram', async () => {
|
|
14
|
+
await navigationPage.goToModeler();
|
|
15
|
+
await modelerHomePage.createCrossComponentProjectFolder();
|
|
16
|
+
await modelerHomePage.clickDiagramTypeDropdown();
|
|
17
|
+
await modelerHomePage.clickBpmnTemplateOption();
|
|
18
|
+
await modelerCreatePage.modelJobWorkerDiagram(processName);
|
|
19
|
+
});
|
|
20
|
+
await SM_8_11_1.test.step('Deploy and start the process on the selected cluster', async () => {
|
|
21
|
+
await modelerCreatePage.runProcessInstance();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|