@camunda/e2e-test-suite 0.0.3 → 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/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/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 +23 -12
- package/dist/tests/SM-8.7/rba-enabled-user-flows.spec.js +21 -8
- package/dist/tests/SM-8.7/smoke-tests.spec.js +31 -7
- package/dist/utils/keycloak.js +5 -2
- 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() {
|
|
@@ -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);
|
|
@@ -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,6 +5,7 @@ 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
10
|
SM_8_7_1.test.beforeEach(async ({ navigationPage, identityPage, identityTenantPage, keycloakLoginPage, keycloakAdminPage, }) => {
|
|
10
11
|
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
@@ -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();
|
|
@@ -5,8 +5,20 @@ 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, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage }, testInfo) => {
|
|
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();
|
|
10
22
|
await (0, keycloak_1.setupKeycloakUser)(navigationPage, identityPage, keycloakLoginPage, keycloakAdminPage, identityTenantPage);
|
|
11
23
|
});
|
|
12
24
|
SM_8_7_1.test.afterEach(async ({ page }, testInfo) => {
|
|
@@ -80,7 +92,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
80
92
|
await SM_8_7_1.test.step('Navigate back to Identity and assert RBA is Enabled', async () => {
|
|
81
93
|
await navigationPage.goToIdentity();
|
|
82
94
|
await identityPage.clickUsersLink();
|
|
83
|
-
await identityPage.
|
|
95
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
84
96
|
await (0, test_1.expect)(identityPage.authorizationsTab).toBeVisible({
|
|
85
97
|
timeout: 60000,
|
|
86
98
|
});
|
|
@@ -99,7 +111,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
99
111
|
await SM_8_7_1.test.step('Navigate to Users and Create Authorized Resource For Process 1', async () => {
|
|
100
112
|
await navigationPage.goToIdentity();
|
|
101
113
|
await identityPage.clickUsersLink();
|
|
102
|
-
await identityPage.
|
|
114
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
103
115
|
await identityPage.clickAuthorizationsTab();
|
|
104
116
|
await (0, test_1.expect)(page.getByText(`${processName}1`).last()).not.toBeVisible({
|
|
105
117
|
timeout: 120000,
|
|
@@ -132,11 +144,12 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
132
144
|
});
|
|
133
145
|
});
|
|
134
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
|
|
135
148
|
await settingsPage.clickOpenSettingsButton();
|
|
136
149
|
await settingsPage.clickLogoutButton();
|
|
137
|
-
await loginPage.fillUsername(
|
|
138
|
-
await (0, test_1.expect)(loginPage.usernameInput).toHaveValue(
|
|
139
|
-
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);
|
|
140
153
|
await loginPage.clickLoginButton();
|
|
141
154
|
await (0, test_1.expect)(taskPanelPage.tasklistBanner).toBeVisible({ timeout: 120000 });
|
|
142
155
|
});
|
|
@@ -176,7 +189,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
176
189
|
await SM_8_7_1.test.step('Navigate back to Identity and assert RBA is Enabled', async () => {
|
|
177
190
|
await navigationPage.goToIdentity();
|
|
178
191
|
await identityPage.clickUsersLink();
|
|
179
|
-
await identityPage.
|
|
192
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
180
193
|
await (0, test_1.expect)(identityPage.authorizationsTab).toBeVisible({
|
|
181
194
|
timeout: 60000,
|
|
182
195
|
});
|
|
@@ -195,7 +208,7 @@ SM_8_7_1.test.describe('RBA Enabled User Flows Test', () => {
|
|
|
195
208
|
await SM_8_7_1.test.step('Navigate to Users and Create Authorized Resource For Both Processes', async () => {
|
|
196
209
|
await navigationPage.goToIdentity();
|
|
197
210
|
await identityPage.clickUsersLink();
|
|
198
|
-
await identityPage.
|
|
211
|
+
await identityPage.clickUser(navigationPage.activeUser);
|
|
199
212
|
await identityPage.clickAuthorizationsTab();
|
|
200
213
|
await (0, test_1.expect)(page.getByText(`${processName}1`).last()).not.toBeVisible({
|
|
201
214
|
timeout: 120000,
|
|
@@ -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,13 +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();
|
|
130
|
-
|
|
131
|
-
|
|
152
|
+
if (process.env.IS_MT === 'true') {
|
|
153
|
+
await operateProcessesPage.clickTenantDropdown();
|
|
154
|
+
await operateProcessesPage.clickTenantDropdownOption();
|
|
155
|
+
}
|
|
132
156
|
await operateProcessesPage.clickProcessInstanceLink(processName, 'completed');
|
|
133
157
|
const result = await operateProcessInstancePage.assertEitherIncidentOrCompletedIconVisible();
|
|
134
158
|
(0, test_1.expect)(result).toBe('completed');
|
package/dist/utils/keycloak.js
CHANGED
|
@@ -63,6 +63,9 @@ const createIdentityUser = async (navigationPage, identityPage, identityTenantPa
|
|
|
63
63
|
await identityPage.clickIdentityCheckbox();
|
|
64
64
|
await identityPage.clickModelerAdminCheckbox();
|
|
65
65
|
await identityPage.clickAddButton();
|
|
66
|
-
|
|
67
|
-
|
|
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
|
+
}
|
|
68
71
|
};
|