@camunda/e2e-test-suite 0.0.2 → 0.0.4
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.7/ClusterPage.js +1 -2
- package/dist/pages/SM-8.7/IdentityPage.js +1 -1
- package/dist/pages/SM-8.7/IdentityUsersPage.js +1 -1
- package/dist/pages/SM-8.7/ModelerCreatePage.js +13 -6
- package/dist/pages/SM-8.7/NavigationPage.d.ts +2 -0
- package/dist/pages/SM-8.7/NavigationPage.js +12 -4
- package/dist/pages/SM-8.7/OperateProcessesPage.d.ts +4 -0
- package/dist/pages/SM-8.7/OperateProcessesPage.js +10 -0
- package/dist/pages/SM-8.7/TaskPanelPage.js +1 -1
- package/dist/pages/SM-8.7/TaskProcessesPage.js +1 -1
- package/dist/pages/SM-8.7/UtlitiesPage.js +6 -0
- package/dist/tests/SM-8.7/connectors-user-flows.spec.js +25 -14
- package/dist/tests/SM-8.7/console-user-flows.spec.js +2 -2
- package/dist/tests/SM-8.7/hto-user-flows.spec.js +4 -4
- package/dist/tests/SM-8.7/mt-enabled-user-flows.spec.js +4 -4
- package/dist/tests/SM-8.7/optimize-user-flows.spec.js +2 -2
- package/dist/tests/SM-8.7/play.spec.js +2 -2
- package/dist/tests/SM-8.7/rba-enabled-user-flows.spec.js +36 -16
- package/dist/tests/SM-8.7/smoke-tests.spec.js +33 -7
- package/dist/tests/SM-8.7/web-modeler-user-flows.spec.js +2 -2
- package/dist/utils/keycloak.d.ts +3 -2
- package/dist/utils/keycloak.js +10 -5
- package/package.json +1 -1
|
@@ -11,8 +11,7 @@ class ClusterPage {
|
|
|
11
11
|
constructor(page) {
|
|
12
12
|
this.page = page;
|
|
13
13
|
this.clustersList = page
|
|
14
|
-
.getByRole('row')
|
|
15
|
-
.filter({ hasNotText: 'integration' }); //Filter out header row
|
|
14
|
+
.getByRole('row');
|
|
16
15
|
this.cluster = this.clustersList.getByText(this.defaultClusterName).first();
|
|
17
16
|
}
|
|
18
17
|
async clickClusterLink() {
|
|
@@ -109,7 +109,7 @@ class IdentityPage {
|
|
|
109
109
|
name: 'create group',
|
|
110
110
|
});
|
|
111
111
|
this.authorizationsTab = page.getByRole('tab', { name: 'Authorizations' });
|
|
112
|
-
this.tenantTab = page.
|
|
112
|
+
this.tenantTab = page.locator('a').filter({ hasText: 'Tenants' });
|
|
113
113
|
this.licenseKeyTagNonProduction = page
|
|
114
114
|
.getByText('Non-production license')
|
|
115
115
|
.first();
|
|
@@ -169,7 +169,7 @@ class IdentityUsersPage {
|
|
|
169
169
|
}
|
|
170
170
|
async clickCreateResourceAuthorizationButton() {
|
|
171
171
|
await (0, test_1.expect)(this.createResourceAuthorizationButton).toBeVisible({
|
|
172
|
-
timeout:
|
|
172
|
+
timeout: 1000,
|
|
173
173
|
});
|
|
174
174
|
await this.createResourceAuthorizationButton.click();
|
|
175
175
|
}
|
|
@@ -208,11 +208,18 @@ class ModelerCreatePage {
|
|
|
208
208
|
});
|
|
209
209
|
await this.enterDiagramName(processName);
|
|
210
210
|
if (processId.length > 0) {
|
|
211
|
-
await
|
|
211
|
+
await (0, sleep_1.sleep)(1000); // When we go too fast there, modeler will missing the input
|
|
212
|
+
await this.clickCanvas();
|
|
212
213
|
await this.clickGeneralPropertiesPanel();
|
|
213
214
|
await this.clickIdInput();
|
|
214
215
|
await this.fillIdInput(processId);
|
|
215
216
|
await this.clickStartEventElement();
|
|
217
|
+
try {
|
|
218
|
+
await (0, test_1.expect)(this.appendElementButton).toBeVisible({ timeout: 1000 });
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
await this.clickStartEventElement();
|
|
222
|
+
}
|
|
216
223
|
}
|
|
217
224
|
await this.clickAppendElementButton();
|
|
218
225
|
await this.clickAppendTaskButton();
|
|
@@ -317,10 +324,10 @@ class ModelerCreatePage {
|
|
|
317
324
|
await this.elemendIdInput.fill(id);
|
|
318
325
|
}
|
|
319
326
|
async clickStartEventElement() {
|
|
320
|
-
await this.startEventElement.click(
|
|
327
|
+
await this.startEventElement.click();
|
|
321
328
|
}
|
|
322
329
|
async selectStartEventElement() {
|
|
323
|
-
await this.startEventElement.click(
|
|
330
|
+
await this.startEventElement.click();
|
|
324
331
|
}
|
|
325
332
|
async clickAppendTaskButton() {
|
|
326
333
|
await this.hoverOnLocator(this.appendPreButton);
|
|
@@ -388,11 +395,11 @@ class ModelerCreatePage {
|
|
|
388
395
|
}
|
|
389
396
|
async hoverOnLocator(locator, selector = '.djs-create-pad-entry') {
|
|
390
397
|
const canvasState = await Promise.race([
|
|
391
|
-
this.page.waitForSelector(selector, { state: 'visible' }).then(() => 'pad'),
|
|
392
|
-
locator.waitFor({ state: 'visible' }).then(() => 'hover'),
|
|
398
|
+
this.page.waitForSelector(selector, { state: 'visible' }).then(() => 'pad').catch(() => { throw new Error('Canvas not visible'); }),
|
|
399
|
+
locator.waitFor({ state: 'visible' }).then(() => 'hover').catch(() => { throw new Error('Locator not visible'); }),
|
|
393
400
|
]);
|
|
394
401
|
if (canvasState === 'hover') {
|
|
395
|
-
await locator.hover({ timeout:
|
|
402
|
+
await locator.hover({ timeout: 5000 });
|
|
396
403
|
await this.page.waitForSelector(selector, { state: 'visible' });
|
|
397
404
|
}
|
|
398
405
|
}
|
|
@@ -12,6 +12,8 @@ declare class NavigationPage {
|
|
|
12
12
|
activePassword: string;
|
|
13
13
|
user1: string;
|
|
14
14
|
user2: string;
|
|
15
|
+
user1password: string;
|
|
16
|
+
user2password: string;
|
|
15
17
|
constructor(page: Page);
|
|
16
18
|
goTo(url: string, banner: Locator, sleepTimeout?: number, maxRetries?: number): Promise<void>;
|
|
17
19
|
goToModeler(sleepTimeout?: number): Promise<void>;
|
|
@@ -19,12 +19,16 @@ class NavigationPage {
|
|
|
19
19
|
activePassword;
|
|
20
20
|
user1;
|
|
21
21
|
user2;
|
|
22
|
+
user1password;
|
|
23
|
+
user2password;
|
|
22
24
|
constructor(page) {
|
|
23
25
|
this.page = page;
|
|
24
26
|
this.activeUser = '';
|
|
25
27
|
this.activePassword = '';
|
|
26
28
|
this.user1 = '';
|
|
27
29
|
this.user2 = '';
|
|
30
|
+
this.user1password = '';
|
|
31
|
+
this.user2password = '';
|
|
28
32
|
this.operatePageBanner = page.getByRole('link', {
|
|
29
33
|
name: 'Camunda logo Operate',
|
|
30
34
|
});
|
|
@@ -47,6 +51,10 @@ class NavigationPage {
|
|
|
47
51
|
}
|
|
48
52
|
async goTo(url, banner, sleepTimeout, maxRetries = 3) {
|
|
49
53
|
const startTime = Date.now();
|
|
54
|
+
let timeout = constants_1._1_SECOND_IN_MS * 1;
|
|
55
|
+
if (url === '/modeler') {
|
|
56
|
+
timeout = constants_1._1_SECOND_IN_MS * 10;
|
|
57
|
+
}
|
|
50
58
|
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
51
59
|
try {
|
|
52
60
|
if (sleepTimeout) {
|
|
@@ -56,7 +64,7 @@ class NavigationPage {
|
|
|
56
64
|
const loginPage = new LoginPage_1.LoginPage(this.page);
|
|
57
65
|
const isLogin = await Promise.race([
|
|
58
66
|
loginPage.isLoginPage(),
|
|
59
|
-
(0, sleep_1.sleep)(
|
|
67
|
+
(0, sleep_1.sleep)(timeout) // the sleep here is a delay to allow the login page to load so that the race is a fair race
|
|
60
68
|
.then(async () => {
|
|
61
69
|
try {
|
|
62
70
|
await (0, test_1.expect)(banner).toBeVisible({
|
|
@@ -85,7 +93,7 @@ class NavigationPage {
|
|
|
85
93
|
await (0, randomSleep_1.randomSleep)(15000, 30000);
|
|
86
94
|
if (!this.page.isClosed()) {
|
|
87
95
|
try {
|
|
88
|
-
await this.page.waitForLoadState('load', { timeout:
|
|
96
|
+
await this.page.waitForLoadState('load', { timeout: timeout });
|
|
89
97
|
}
|
|
90
98
|
catch (error) {
|
|
91
99
|
const now2 = new Date();
|
|
@@ -105,10 +113,10 @@ class NavigationPage {
|
|
|
105
113
|
await this.goTo('/modeler', this.modelerPageBanner, sleepTimeout);
|
|
106
114
|
}
|
|
107
115
|
async goToTasklist(sleepTimeout) {
|
|
108
|
-
await this.goTo('/tasklist
|
|
116
|
+
await this.goTo('/tasklist', this.tasklistPageBanner, sleepTimeout);
|
|
109
117
|
}
|
|
110
118
|
async goToOperate(sleepTimeout) {
|
|
111
|
-
await this.goTo('/operate
|
|
119
|
+
await this.goTo('/operate', this.operatePageBanner, sleepTimeout);
|
|
112
120
|
}
|
|
113
121
|
async goToOptimize(sleepTimeout) {
|
|
114
122
|
await this.goTo('/optimize', this.optimizePageBanner, sleepTimeout);
|
|
@@ -9,6 +9,8 @@ declare class OperateProcessesPage {
|
|
|
9
9
|
readonly processPageHeading: Locator;
|
|
10
10
|
readonly noMatchingInstancesMessage: Locator;
|
|
11
11
|
readonly processFinishedInstancesCheckbox: Locator;
|
|
12
|
+
readonly tenantDropdown: Locator;
|
|
13
|
+
readonly tenantDropdownOption: Locator;
|
|
12
14
|
constructor(page: Page);
|
|
13
15
|
private checkCheckbox;
|
|
14
16
|
private uncheckCheckbox;
|
|
@@ -21,6 +23,8 @@ declare class OperateProcessesPage {
|
|
|
21
23
|
clickFinishedProcessInstancesCheckbox(): Promise<void>;
|
|
22
24
|
private toggleActiveCheckboxOn;
|
|
23
25
|
private toggleCompletedCheckbox;
|
|
26
|
+
clickTenantDropdown(): Promise<void>;
|
|
27
|
+
clickTenantDropdownOption(): Promise<void>;
|
|
24
28
|
clickProcessInstanceLink(processName: string, type?: 'active' | 'completed'): Promise<void>;
|
|
25
29
|
}
|
|
26
30
|
export { OperateProcessesPage };
|
|
@@ -14,6 +14,8 @@ class OperateProcessesPage {
|
|
|
14
14
|
processPageHeading;
|
|
15
15
|
noMatchingInstancesMessage;
|
|
16
16
|
processFinishedInstancesCheckbox;
|
|
17
|
+
tenantDropdown;
|
|
18
|
+
tenantDropdownOption;
|
|
17
19
|
constructor(page) {
|
|
18
20
|
this.page = page;
|
|
19
21
|
this.processResultCount = page.getByTestId('result-count');
|
|
@@ -36,6 +38,8 @@ class OperateProcessesPage {
|
|
|
36
38
|
this.processFinishedInstancesCheckbox = page
|
|
37
39
|
.getByTestId('filter-finished-instances')
|
|
38
40
|
.getByRole('checkbox');
|
|
41
|
+
this.tenantDropdown = page.getByRole('combobox', { name: 'Tenant' });
|
|
42
|
+
this.tenantDropdownOption = page.getByRole('option', { name: 'All tenants' });
|
|
39
43
|
}
|
|
40
44
|
async checkCheckbox(checkbox) {
|
|
41
45
|
if (!(await checkbox.isChecked())) {
|
|
@@ -100,6 +104,12 @@ class OperateProcessesPage {
|
|
|
100
104
|
await this.checkCheckbox(this.processCompletedCheckbox);
|
|
101
105
|
}
|
|
102
106
|
}
|
|
107
|
+
async clickTenantDropdown() {
|
|
108
|
+
await this.tenantDropdown.click();
|
|
109
|
+
}
|
|
110
|
+
async clickTenantDropdownOption() {
|
|
111
|
+
await this.tenantDropdownOption.click();
|
|
112
|
+
}
|
|
103
113
|
async clickProcessInstanceLink(processName, type = 'active') {
|
|
104
114
|
const MAX_ATTEMPTS = 100;
|
|
105
115
|
if (type === 'active') {
|
|
@@ -82,7 +82,7 @@ class TaskPanelPage {
|
|
|
82
82
|
await this.processesPageTab.click();
|
|
83
83
|
}
|
|
84
84
|
async taskCount(name) {
|
|
85
|
-
await (0, sleep_1.sleep)(
|
|
85
|
+
await (0, sleep_1.sleep)(5000);
|
|
86
86
|
return this.availableTasks.getByText(name, { exact: true }).count();
|
|
87
87
|
}
|
|
88
88
|
async clickTasksTab() {
|
|
@@ -65,6 +65,12 @@ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, conn
|
|
|
65
65
|
timeout: 120000,
|
|
66
66
|
});
|
|
67
67
|
await modelerCreatePage.enterDiagramName(processName);
|
|
68
|
+
await (0, sleep_1.sleep)(1000); // When we go too fast there, modeler will missing the input
|
|
69
|
+
await modelerCreatePage.clickCanvas();
|
|
70
|
+
await modelerCreatePage.clickGeneralPropertiesPanel();
|
|
71
|
+
await modelerCreatePage.clickIdInput();
|
|
72
|
+
await modelerCreatePage.fillIdInput(processName);
|
|
73
|
+
await modelerCreatePage.clickStartEventElement();
|
|
68
74
|
await modelerCreatePage.clickAppendElementButton();
|
|
69
75
|
await modelerCreatePage.clickAppendTaskButton();
|
|
70
76
|
await modelerCreatePage.clickChangeTypeButton();
|
|
@@ -5,9 +5,10 @@ const SM_8_7_1 = require("../../fixtures/SM-8.7");
|
|
|
5
5
|
const _setup_1 = require("../../test-setup.js");
|
|
6
6
|
const UtlitiesPage_1 = require("../../pages/SM-8.7/UtlitiesPage");
|
|
7
7
|
const keycloak_1 = require("../../utils/keycloak");
|
|
8
|
+
const sleep_1 = require("../../utils/sleep");
|
|
8
9
|
SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
9
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
10
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
10
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
11
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
11
12
|
});
|
|
12
13
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
13
14
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -76,7 +77,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
76
77
|
});
|
|
77
78
|
});
|
|
78
79
|
});
|
|
79
|
-
SM_8_7_1.test
|
|
80
|
+
(0, SM_8_7_1.test)('Start Event Webhook Connector No Auth User Flow', async ({ page, modelerHomePage, navigationPage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, context, }) => {
|
|
80
81
|
SM_8_7_1.test.slow();
|
|
81
82
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
82
83
|
const processName = 'Start_Event_Webhook_Connector_No_Auth_Process' + randomString;
|
|
@@ -117,7 +118,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
117
118
|
await SM_8_7_1.test.step('Make Authorization Request', async () => {
|
|
118
119
|
const baseURL = process.env.PLAYWRIGHT_BASE_URL ||
|
|
119
120
|
`https://gke-${process.env.BASE_URL}.ci.distro.ultrawombat.com`;
|
|
120
|
-
const maxWaitTime =
|
|
121
|
+
const maxWaitTime = 150000; // 15 seconds
|
|
121
122
|
const pollInterval = 1000; // 1 second
|
|
122
123
|
const startTime = Date.now();
|
|
123
124
|
let response;
|
|
@@ -125,7 +126,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
125
126
|
console.log('Making request to', `${baseURL}/connectors/inbound/test-webhook-id${randomString}`);
|
|
126
127
|
while (Date.now() - startTime < maxWaitTime) {
|
|
127
128
|
try {
|
|
128
|
-
response = await request.post(`${baseURL}/connectors/inbound/
|
|
129
|
+
response = await request.post(`${baseURL}/connectors/inbound/test-webhook-id${randomString}`);
|
|
129
130
|
if (response.status() === 200) {
|
|
130
131
|
break; // Success!
|
|
131
132
|
}
|
|
@@ -134,7 +135,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
134
135
|
catch (err) {
|
|
135
136
|
lastError = err;
|
|
136
137
|
}
|
|
137
|
-
await
|
|
138
|
+
await (0, sleep_1.sleep)(pollInterval);
|
|
138
139
|
}
|
|
139
140
|
if (!response || response.status() !== 200) {
|
|
140
141
|
throw new Error(`Resource not available after 15s. Last error: ${lastError}`);
|
|
@@ -179,7 +180,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
179
180
|
await (0, test_1.expect)(page.getByTestId('variable-message').getByText('"Message from Mock!"')).toBeVisible({ timeout: 180000 });
|
|
180
181
|
});
|
|
181
182
|
});
|
|
182
|
-
SM_8_7_1.test
|
|
183
|
+
(0, SM_8_7_1.test)('Intermediate Event Webhook Connector No Auth User Flow', async ({ modelerHomePage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, navigationPage, connectorMarketplacePage, context, }) => {
|
|
183
184
|
SM_8_7_1.test.slow();
|
|
184
185
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
185
186
|
const processName = 'Intermediate_Event_Webhook_Connector_No_Auth_Process' + randomString;
|
|
@@ -201,7 +202,7 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
201
202
|
await modelerCreatePage.clickChangeTypeButton();
|
|
202
203
|
try {
|
|
203
204
|
await (0, test_1.expect)(modelerCreatePage.webhookStartEventConnectorOption).toBeVisible({
|
|
204
|
-
timeout:
|
|
205
|
+
timeout: 3000,
|
|
205
206
|
});
|
|
206
207
|
}
|
|
207
208
|
catch (error) {
|
|
@@ -226,12 +227,22 @@ SM_8_7_1.test.describe.parallel('Connectors User Flow Tests', () => {
|
|
|
226
227
|
await SM_8_7_1.test.step('Make Authorization Request', async () => {
|
|
227
228
|
const baseURL = process.env.PLAYWRIGHT_BASE_URL ||
|
|
228
229
|
`http://gke-${process.env.BASE_URL}.ci.distro.ultrawombat.com`;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
// It takes about 6 seconds for the process to appear in the connectors endpoint
|
|
231
|
+
// So we need to wait for it to appear before making the request
|
|
232
|
+
const retries = 10;
|
|
233
|
+
let response;
|
|
234
|
+
for (let i = 0; i < retries; i++) {
|
|
235
|
+
response = await request.post(`${baseURL}/connectors/inbound/test-webhook-intermediate${randomString}`, {
|
|
236
|
+
data: {
|
|
237
|
+
test: 'test',
|
|
238
|
+
},
|
|
239
|
+
});
|
|
240
|
+
if (response.status() === 200) {
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
await (0, sleep_1.sleep)(1000);
|
|
244
|
+
}
|
|
245
|
+
(0, test_1.expect)(response?.status()).toBe(200);
|
|
235
246
|
});
|
|
236
247
|
await SM_8_7_1.test.step('Assert Diagram Has Successfully Completed in Operate', async () => {
|
|
237
248
|
await navigationPage.goToOperate();
|
|
@@ -8,8 +8,8 @@ const keycloak_1 = require("../../utils/keycloak");
|
|
|
8
8
|
SM_8_7_1.test.describe.parallel('Console User Flow Tests', () => {
|
|
9
9
|
const defaultTags = ['dev', 'custom', 'stage', 'prod', 'test'];
|
|
10
10
|
const customPropertyDescription = 'This is the main integration environment for the Camunda Platform.';
|
|
11
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
12
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
11
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
12
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
13
13
|
});
|
|
14
14
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
15
15
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -6,17 +6,17 @@ const _setup_1 = require("../../test-setup.js");
|
|
|
6
6
|
const UtlitiesPage_1 = require("../../pages/SM-8.7/UtlitiesPage");
|
|
7
7
|
const keycloak_1 = require("../../utils/keycloak");
|
|
8
8
|
SM_8_7_1.test.describe.parallel('HTO User Flow Tests', () => {
|
|
9
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, context, }) => {
|
|
9
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, context, identityTenantPage, }) => {
|
|
10
10
|
await context.clearCookies();
|
|
11
11
|
const user1 = 'lisa' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
12
12
|
const user2 = 'bart' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
13
13
|
navigationPage.user1 = user1;
|
|
14
14
|
navigationPage.user2 = user2;
|
|
15
|
-
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user1, 'lisa');
|
|
15
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user1, 'lisa', identityTenantPage);
|
|
16
16
|
await context.clearCookies();
|
|
17
|
-
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user2, 'bart');
|
|
17
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user2, 'bart', identityTenantPage);
|
|
18
18
|
await context.clearCookies();
|
|
19
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
19
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
20
20
|
});
|
|
21
21
|
SM_8_7_1.test.afterEach(async ({ page, context }, testInfo) => {
|
|
22
22
|
await context.clearCookies();
|
|
@@ -9,17 +9,17 @@ const keycloak_1 = require("../../utils/keycloak");
|
|
|
9
9
|
if (process.env.IS_MT === 'true') {
|
|
10
10
|
SM_8_7_1.test.describe.configure({ mode: 'parallel' });
|
|
11
11
|
SM_8_7_1.test.describe('MT Enabled User Flows Test', () => {
|
|
12
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, context, }) => {
|
|
12
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, context, identityTenantPage, }) => {
|
|
13
13
|
await context.clearCookies();
|
|
14
14
|
const user1 = 'lisa' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
15
15
|
const user2 = 'bart' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
16
16
|
navigationPage.user1 = user1;
|
|
17
17
|
navigationPage.user2 = user2;
|
|
18
|
-
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user1, 'lisa');
|
|
18
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user1, 'lisa', identityTenantPage);
|
|
19
19
|
await context.clearCookies();
|
|
20
|
-
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user2, 'bart');
|
|
20
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, user2, 'bart', identityTenantPage);
|
|
21
21
|
await context.clearCookies();
|
|
22
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
22
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
23
23
|
});
|
|
24
24
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
25
25
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -12,8 +12,8 @@ if (env_1.isOpenSearch) {
|
|
|
12
12
|
SM_8_7_1.test.skip();
|
|
13
13
|
}
|
|
14
14
|
SM_8_7_1.test.describe.parallel('Optimize User Flow Tests', () => {
|
|
15
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
16
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
15
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
16
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
17
17
|
});
|
|
18
18
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
19
19
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -5,8 +5,8 @@ const SM_8_7_1 = require("../../fixtures/SM-8.7");
|
|
|
5
5
|
const _setup_1 = require("../../test-setup.js");
|
|
6
6
|
const keycloak_1 = require("../../utils/keycloak");
|
|
7
7
|
SM_8_7_1.test.describe('Deploy and run a process in Play', () => {
|
|
8
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
9
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
8
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
9
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
10
10
|
});
|
|
11
11
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
12
12
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -4,16 +4,28 @@ const test_1 = require("@playwright/test");
|
|
|
4
4
|
const SM_8_7_1 = require("../../fixtures/SM-8.7");
|
|
5
5
|
const _setup_1 = require("../../test-setup.js");
|
|
6
6
|
const UtlitiesPage_1 = require("../../pages/SM-8.7/UtlitiesPage");
|
|
7
|
-
|
|
7
|
+
const keycloak_1 = require("../../utils/keycloak");
|
|
8
|
+
const sleep_1 = require("../../utils/sleep");
|
|
8
9
|
SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
9
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage }, testInfo) => {
|
|
10
|
-
await
|
|
10
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage, context }, testInfo) => {
|
|
11
|
+
await context.clearCookies();
|
|
12
|
+
const user1 = 'lisa' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
13
|
+
const user2 = 'bart' + (await (0, _setup_1.generateRandomStringAsync)(3)).toLowerCase();
|
|
14
|
+
navigationPage.user1 = user1;
|
|
15
|
+
navigationPage.user1password = 'lisa';
|
|
16
|
+
navigationPage.user2 = user2;
|
|
17
|
+
navigationPage.user2password = 'bart';
|
|
18
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, navigationPage.user1, navigationPage.user1password, identityTenantPage);
|
|
19
|
+
await context.clearCookies();
|
|
20
|
+
await (0, keycloak_1.createUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, navigationPage.user2, navigationPage.user2password, identityTenantPage);
|
|
21
|
+
await context.clearCookies();
|
|
22
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
11
23
|
});
|
|
12
24
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
13
25
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
14
26
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
15
27
|
});
|
|
16
|
-
(0, SM_8_7_1.test)('RBA On User Flow - No User Permission', async ({ page, identityPage, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, navigationPage, }) => {
|
|
28
|
+
(0, SM_8_7_1.test)('RBA On User Flow - No User Permission', async ({ page, identityPage, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, navigationPage, context, }) => {
|
|
17
29
|
if (process.env.IS_RBA !== 'true') {
|
|
18
30
|
SM_8_7_1.test.skip(true, 'Skipping test because test environment does not have RBA enabled');
|
|
19
31
|
}
|
|
@@ -21,7 +33,10 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
21
33
|
const randomString = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
22
34
|
const processName = 'RBA_NO_PERM' + randomString;
|
|
23
35
|
await SM_8_7_1.test.step('Open Cross Component Test Project', async () => {
|
|
24
|
-
await
|
|
36
|
+
await context.clearCookies();
|
|
37
|
+
await navigationPage.goToModeler();
|
|
38
|
+
await modelerHomePage.clickCreateNewProjectButton();
|
|
39
|
+
await modelerHomePage.createCrossComponentProjectFolder();
|
|
25
40
|
});
|
|
26
41
|
await SM_8_7_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
|
|
27
42
|
await (0, UtlitiesPage_1.runMultipleProcesses)(modelerHomePage, modelerCreatePage, 2, processName);
|
|
@@ -67,7 +82,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
67
82
|
});
|
|
68
83
|
});
|
|
69
84
|
});
|
|
70
|
-
(0, SM_8_7_1.test)('RBA On User Flow - Permission for One Process', async ({ page, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, identityUsersPage, loginPage, navigationPage, identityPage, settingsPage, }) => {
|
|
85
|
+
(0, SM_8_7_1.test)('RBA On User Flow - Permission for One Process', async ({ page, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, identityUsersPage, loginPage, navigationPage, identityPage, settingsPage, context, }) => {
|
|
71
86
|
if (process.env.IS_RBA !== 'true') {
|
|
72
87
|
SM_8_7_1.test.skip(true, 'Skipping test because test environment does not have RBA enabled');
|
|
73
88
|
}
|
|
@@ -77,16 +92,18 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
77
92
|
await SM_8_7_1.test.step('Navigate back to Identity and assert RBA is Enabled', async () => {
|
|
78
93
|
await navigationPage.goToIdentity();
|
|
79
94
|
await identityPage.clickUsersLink();
|
|
80
|
-
await identityPage.
|
|
95
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
81
96
|
await (0, test_1.expect)(identityPage.authorizationsTab).toBeVisible({
|
|
82
97
|
timeout: 60000,
|
|
83
98
|
});
|
|
84
99
|
});
|
|
85
100
|
await SM_8_7_1.test.step('Navigate to Web Modeler', async () => {
|
|
101
|
+
await context.clearCookies();
|
|
86
102
|
await navigationPage.goToModeler();
|
|
87
103
|
});
|
|
88
104
|
await SM_8_7_1.test.step('Open Cross Component Test Project', async () => {
|
|
89
|
-
await modelerHomePage.
|
|
105
|
+
await modelerHomePage.clickCreateNewProjectButton();
|
|
106
|
+
await modelerHomePage.createCrossComponentProjectFolder();
|
|
90
107
|
});
|
|
91
108
|
await SM_8_7_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
|
|
92
109
|
await (0, UtlitiesPage_1.runMultipleProcesses)(modelerHomePage, modelerCreatePage, 2, processName, processName);
|
|
@@ -94,7 +111,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
94
111
|
await SM_8_7_1.test.step('Navigate to Users and Create Authorized Resource For Process 1', async () => {
|
|
95
112
|
await navigationPage.goToIdentity();
|
|
96
113
|
await identityPage.clickUsersLink();
|
|
97
|
-
await identityPage.
|
|
114
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
98
115
|
await identityPage.clickAuthorizationsTab();
|
|
99
116
|
await (0, test_1.expect)(page.getByText(`${processName}1`).last()).not.toBeVisible({
|
|
100
117
|
timeout: 120000,
|
|
@@ -127,11 +144,12 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
127
144
|
});
|
|
128
145
|
});
|
|
129
146
|
await SM_8_7_1.test.step('Logout and Login with "bart" User', async () => {
|
|
147
|
+
await (0, sleep_1.sleep)(4000); // When we go too fast there, tasklist will error out
|
|
130
148
|
await settingsPage.clickOpenSettingsButton();
|
|
131
149
|
await settingsPage.clickLogoutButton();
|
|
132
|
-
await loginPage.fillUsername(
|
|
133
|
-
await (0, test_1.expect)(loginPage.usernameInput).toHaveValue(
|
|
134
|
-
await loginPage.fillPassword(
|
|
150
|
+
await loginPage.fillUsername(navigationPage.user1);
|
|
151
|
+
await (0, test_1.expect)(loginPage.usernameInput).toHaveValue(navigationPage.user1);
|
|
152
|
+
await loginPage.fillPassword(navigationPage.user1password);
|
|
135
153
|
await loginPage.clickLoginButton();
|
|
136
154
|
await (0, test_1.expect)(taskPanelPage.tasklistBanner).toBeVisible({ timeout: 120000 });
|
|
137
155
|
});
|
|
@@ -161,7 +179,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
161
179
|
});
|
|
162
180
|
});
|
|
163
181
|
});
|
|
164
|
-
(0, SM_8_7_1.test)('RBA On User Flow - Permission for All Processes', async ({ page, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, identityUsersPage, navigationPage, identityPage, }) => {
|
|
182
|
+
(0, SM_8_7_1.test)('RBA On User Flow - Permission for All Processes', async ({ page, modelerHomePage, modelerCreatePage, taskPanelPage, taskProcessesPage, operateHomePage, identityUsersPage, navigationPage, identityPage, context, }) => {
|
|
165
183
|
if (process.env.IS_RBA !== 'true') {
|
|
166
184
|
SM_8_7_1.test.skip(true, 'Skipping test because test environment does not have RBA enabled');
|
|
167
185
|
}
|
|
@@ -171,16 +189,18 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
171
189
|
await SM_8_7_1.test.step('Navigate back to Identity and assert RBA is Enabled', async () => {
|
|
172
190
|
await navigationPage.goToIdentity();
|
|
173
191
|
await identityPage.clickUsersLink();
|
|
174
|
-
await identityPage.
|
|
192
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
175
193
|
await (0, test_1.expect)(identityPage.authorizationsTab).toBeVisible({
|
|
176
194
|
timeout: 60000,
|
|
177
195
|
});
|
|
178
196
|
});
|
|
179
197
|
await SM_8_7_1.test.step('Navigate to Web Modeler', async () => {
|
|
198
|
+
await context.clearCookies();
|
|
180
199
|
await navigationPage.goToModeler();
|
|
181
200
|
});
|
|
182
201
|
await SM_8_7_1.test.step('Open Cross Component Test Project', async () => {
|
|
183
|
-
await modelerHomePage.
|
|
202
|
+
await modelerHomePage.clickCreateNewProjectButton();
|
|
203
|
+
await modelerHomePage.createCrossComponentProjectFolder();
|
|
184
204
|
});
|
|
185
205
|
await SM_8_7_1.test.step('Create Two BPMN Diagrams with User Task and Start Process Instance', async () => {
|
|
186
206
|
await (0, UtlitiesPage_1.runMultipleProcesses)(modelerHomePage, modelerCreatePage, 2, processName, processName);
|
|
@@ -188,7 +208,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
188
208
|
await SM_8_7_1.test.step('Navigate to Users and Create Authorized Resource For Both Processes', async () => {
|
|
189
209
|
await navigationPage.goToIdentity();
|
|
190
210
|
await identityPage.clickUsersLink();
|
|
191
|
-
await identityPage.
|
|
211
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
192
212
|
await identityPage.clickAuthorizationsTab();
|
|
193
213
|
await (0, test_1.expect)(page.getByText(`${processName}1`).last()).not.toBeVisible({
|
|
194
214
|
timeout: 120000,
|
|
@@ -8,8 +8,8 @@ const env_1 = require("../../utils/env");
|
|
|
8
8
|
const keycloak_1 = require("../../utils/keycloak");
|
|
9
9
|
const optimizeReportUtils_1 = require("./optimizeReportUtils");
|
|
10
10
|
SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
11
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
12
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
11
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
12
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
13
13
|
});
|
|
14
14
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
15
15
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
@@ -44,7 +44,7 @@ SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
44
44
|
await navigationPage.goToConsole();
|
|
45
45
|
});
|
|
46
46
|
});
|
|
47
|
-
(0, SM_8_7_1.test)('Most Common Flow User Flow With All Apps', async ({ page, context, modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessesPage, operateProcessInstancePage, optimizeHomePage, optimizeCollectionsPage, optimizeReportPage, taskDetailsPage, taskPanelPage, }) => {
|
|
47
|
+
(0, SM_8_7_1.test)('Most Common Flow User Flow With All Apps', async ({ page, context, modelerHomePage, navigationPage, modelerCreatePage, operateHomePage, operateProcessesPage, operateProcessInstancePage, optimizeHomePage, optimizeCollectionsPage, optimizeReportPage, taskDetailsPage, taskPanelPage, identityPage, identityUsersPage, }) => {
|
|
48
48
|
SM_8_7_1.test.slow();
|
|
49
49
|
const randomName = await (0, _setup_1.generateRandomStringAsync)(3);
|
|
50
50
|
const processName = 'Zeebe_User_Task_Process' + randomName;
|
|
@@ -58,8 +58,18 @@ SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
58
58
|
await modelerHomePage.clickBpmnTemplateOption();
|
|
59
59
|
});
|
|
60
60
|
await SM_8_7_1.test.step('Create BPMN Diagram with Zeebe User Task and Start Process Instance', async () => {
|
|
61
|
-
await modelerCreatePage.modelCamundaUserTaskDiagram(processName);
|
|
61
|
+
await modelerCreatePage.modelCamundaUserTaskDiagram(processName, processName);
|
|
62
62
|
await modelerCreatePage.runProcessInstance();
|
|
63
|
+
if (process.env.IS_RBA === 'true') {
|
|
64
|
+
await navigationPage.goToIdentity();
|
|
65
|
+
await identityPage.clickUsersLink();
|
|
66
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
67
|
+
await identityPage.clickAuthorizationsTab();
|
|
68
|
+
await (0, test_1.expect)(page.getByText(processName).last()).not.toBeVisible({
|
|
69
|
+
timeout: 120000,
|
|
70
|
+
});
|
|
71
|
+
await identityUsersPage.createResourceAuthorization(processName);
|
|
72
|
+
}
|
|
63
73
|
});
|
|
64
74
|
await SM_8_7_1.test.step('View Process Instance in Operate, complete User Task in Tasklist & assert process complete in Operate and Assert Process has been successfully imported in Optimize', async () => {
|
|
65
75
|
await navigationPage.goToOperate();
|
|
@@ -84,8 +94,10 @@ SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
84
94
|
await (0, test_1.expect)(optimizeReportPage.versionSelection).toBeVisible({
|
|
85
95
|
timeout: 30000,
|
|
86
96
|
});
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
if (process.env.IS_RBA === 'true') {
|
|
98
|
+
await optimizeReportPage.clickVersionSelection();
|
|
99
|
+
await optimizeReportPage.clickAlwaysDisplayLatestSelection();
|
|
100
|
+
}
|
|
89
101
|
await optimizeReportPage.clickBlankReportButton();
|
|
90
102
|
await optimizeReportPage.clickCreateReportLink();
|
|
91
103
|
await (0, test_1.expect)(optimizeReportPage.selectDropdown).toBeVisible({
|
|
@@ -107,7 +119,7 @@ SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
107
119
|
}
|
|
108
120
|
});
|
|
109
121
|
});
|
|
110
|
-
(0, SM_8_7_1.test)('Most Common REST Connector User Flow', async ({ page, context, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessesPage, operateProcessInstancePage, connectorMarketplacePage, }) => {
|
|
122
|
+
(0, SM_8_7_1.test)('Most Common REST Connector User Flow', async ({ page, context, operateHomePage, modelerHomePage, modelerCreatePage, connectorSettingsPage, navigationPage, operateProcessesPage, operateProcessInstancePage, connectorMarketplacePage, identityPage, identityUsersPage, }) => {
|
|
111
123
|
SM_8_7_1.test.slow();
|
|
112
124
|
const processName = 'REST_Connector_Basic_Auth_Process' +
|
|
113
125
|
(await (0, _setup_1.generateRandomStringAsync)(3));
|
|
@@ -122,11 +134,25 @@ SM_8_7_1.test.describe.parallel('Smoke Tests', () => {
|
|
|
122
134
|
await SM_8_7_1.test.step('Create BPMN Diagram with REST Connector with Basic Auth and Start Process Instance', async () => {
|
|
123
135
|
await (0, UtlitiesPage_1.modelRestConnector)(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'basic', '{message:response.body.message}', 'result', { username: 'username', password: 'password' });
|
|
124
136
|
await modelerCreatePage.runProcessInstance();
|
|
137
|
+
if (process.env.IS_RBA === 'true') {
|
|
138
|
+
await navigationPage.goToIdentity();
|
|
139
|
+
await identityPage.clickUsersLink();
|
|
140
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
141
|
+
await identityPage.clickAuthorizationsTab();
|
|
142
|
+
await (0, test_1.expect)(page.getByText(processName).last()).not.toBeVisible({
|
|
143
|
+
timeout: 120000,
|
|
144
|
+
});
|
|
145
|
+
await identityUsersPage.createResourceAuthorization(processName);
|
|
146
|
+
}
|
|
125
147
|
await (0, _setup_1.performBasicAuthPostRequest)('https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test', 'username', 'password');
|
|
126
148
|
});
|
|
127
149
|
await SM_8_7_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
|
|
128
150
|
await navigationPage.goToOperate();
|
|
129
151
|
await operateHomePage.clickProcessesTab();
|
|
152
|
+
if (process.env.IS_MT === 'true') {
|
|
153
|
+
await operateProcessesPage.clickTenantDropdown();
|
|
154
|
+
await operateProcessesPage.clickTenantDropdownOption();
|
|
155
|
+
}
|
|
130
156
|
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
131
157
|
const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
|
|
132
158
|
(0, test_1.expect)(result).toBe('completed');
|
|
@@ -6,8 +6,8 @@ const _setup_1 = require("../../test-setup.js");
|
|
|
6
6
|
const UtlitiesPage_1 = require("../../pages/SM-8.7/UtlitiesPage");
|
|
7
7
|
const keycloak_1 = require("../../utils/keycloak");
|
|
8
8
|
SM_8_7_1.test.describe.parallel('Web Modeler User Flow Tests', () => {
|
|
9
|
-
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
10
|
-
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage);
|
|
9
|
+
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage, }) => {
|
|
10
|
+
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
11
11
|
});
|
|
12
12
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
13
13
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
package/dist/utils/keycloak.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { NavigationPage } from '../pages/SM-8.7/NavigationPage';
|
|
|
2
2
|
import { IdentityPage } from '../pages/SM-8.7/IdentityPage';
|
|
3
3
|
import { KeycloakLoginPage } from '../pages/SM-8.7/KeycloakLoginPage';
|
|
4
4
|
import { KeycloakAdminPage } from '../pages/SM-8.7/KeycloakAdminPage';
|
|
5
|
+
import { IdentityTenantPage } from '../pages/SM-8.7/IdentityTenantPage';
|
|
5
6
|
export declare const keycloakAdminCredentials: () => {
|
|
6
7
|
username: string;
|
|
7
8
|
password: string;
|
|
@@ -9,5 +10,5 @@ export declare const keycloakAdminCredentials: () => {
|
|
|
9
10
|
export declare const adminUser = "demo";
|
|
10
11
|
export declare const adminPassword: string;
|
|
11
12
|
export declare const setAdminUserCredentials: (navigationPage: NavigationPage) => void;
|
|
12
|
-
export declare const setupKeycloakUser: (navigationPage: NavigationPage, identityPage: IdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage) => Promise<void>;
|
|
13
|
-
export declare const createUser: (navigationPage: NavigationPage, identityPage: IdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, username: string, password: string) => Promise<void>;
|
|
13
|
+
export declare const setupKeycloakUser: (navigationPage: NavigationPage, identityPage: IdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, identityTenantPage: IdentityTenantPage) => Promise<void>;
|
|
14
|
+
export declare const createUser: (navigationPage: NavigationPage, identityPage: IdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, username: string, password: string, identityTenantPage: IdentityTenantPage) => Promise<void>;
|
package/dist/utils/keycloak.js
CHANGED
|
@@ -15,22 +15,22 @@ const setAdminUserCredentials = (navigationPage) => {
|
|
|
15
15
|
navigationPage.activePassword = exports.adminPassword;
|
|
16
16
|
};
|
|
17
17
|
exports.setAdminUserCredentials = setAdminUserCredentials;
|
|
18
|
-
const setupKeycloakUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage) => {
|
|
18
|
+
const setupKeycloakUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage) => {
|
|
19
19
|
const testUsername = `test-user-${new Date().getTime()}-${Math.random()
|
|
20
20
|
.toString(36)
|
|
21
21
|
.substring(7)}`;
|
|
22
22
|
const testPassword = 'test-password';
|
|
23
23
|
await createKeycloakUser(navigationPage, keycloakLoginPage, keycloakAdminPage, testUsername, testPassword);
|
|
24
24
|
(0, exports.setAdminUserCredentials)(navigationPage);
|
|
25
|
-
await createIdentityUser(navigationPage, identityPage, testUsername);
|
|
25
|
+
await createIdentityUser(navigationPage, identityPage, identityTenantPage, testUsername);
|
|
26
26
|
navigationPage.activeUser = testUsername;
|
|
27
27
|
navigationPage.activePassword = testPassword;
|
|
28
28
|
};
|
|
29
29
|
exports.setupKeycloakUser = setupKeycloakUser;
|
|
30
|
-
const createUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, username, password) => {
|
|
30
|
+
const createUser = async (navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, username, password, identityTenantPage) => {
|
|
31
31
|
await createKeycloakUser(navigationPage, keycloakLoginPage, keycloakAdminPage, username, password);
|
|
32
32
|
(0, exports.setAdminUserCredentials)(navigationPage);
|
|
33
|
-
await createIdentityUser(navigationPage, identityPage, username);
|
|
33
|
+
await createIdentityUser(navigationPage, identityPage, identityTenantPage, username);
|
|
34
34
|
};
|
|
35
35
|
exports.createUser = createUser;
|
|
36
36
|
const createKeycloakUser = async (navigationPage, keycloakLoginPage, keycloakAdminPage, username, password) => {
|
|
@@ -48,7 +48,7 @@ const createKeycloakUser = async (navigationPage, keycloakLoginPage, keycloakAdm
|
|
|
48
48
|
await keycloakAdminPage.fillPassword(password);
|
|
49
49
|
await keycloakAdminPage.savePassword();
|
|
50
50
|
};
|
|
51
|
-
const createIdentityUser = async (navigationPage, identityPage, username) => {
|
|
51
|
+
const createIdentityUser = async (navigationPage, identityPage, identityTenantPage, username) => {
|
|
52
52
|
await navigationPage.goToIdentity();
|
|
53
53
|
await identityPage.clickUsersLink();
|
|
54
54
|
await identityPage.clickUser(username);
|
|
@@ -63,4 +63,9 @@ const createIdentityUser = async (navigationPage, identityPage, username) => {
|
|
|
63
63
|
await identityPage.clickIdentityCheckbox();
|
|
64
64
|
await identityPage.clickModelerAdminCheckbox();
|
|
65
65
|
await identityPage.clickAddButton();
|
|
66
|
+
if (process.env.IS_MT === 'true') {
|
|
67
|
+
await identityPage.clickTenantTab();
|
|
68
|
+
await identityTenantPage.assignUserToTenant('default', username, username + '@camunda.com');
|
|
69
|
+
await identityTenantPage.assignClientToTenant('web-modeler');
|
|
70
|
+
}
|
|
66
71
|
};
|