@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.
@@ -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.getByRole('link', { name: 'Tenants' });
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: 60000,
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 this.clickStartEventElement();
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({ force: true });
327
+ await this.startEventElement.click();
321
328
  }
322
329
  async selectStartEventElement() {
323
- await this.startEventElement.click({ force: true });
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: 2000 });
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)(10000) // the sleep here is a delay to allow the login page to load so that the race is a fair race
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: 90000 });
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/tasklist', this.tasklistPageBanner, sleepTimeout);
116
+ await this.goTo('/tasklist', this.tasklistPageBanner, sleepTimeout);
109
117
  }
110
118
  async goToOperate(sleepTimeout) {
111
- await this.goTo('/operate/operate', this.operatePageBanner, sleepTimeout);
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)(20000);
85
+ await (0, sleep_1.sleep)(5000);
86
86
  return this.availableTasks.getByText(name, { exact: true }).count();
87
87
  }
88
88
  async clickTasksTab() {
@@ -15,7 +15,7 @@ class TaskProcessesPage {
15
15
  }
16
16
  async clickpopupContinueButton() {
17
17
  try {
18
- await this.popupContinueButton.click({ timeout: 60000 });
18
+ await this.popupContinueButton.click({ timeout: 2000 });
19
19
  }
20
20
  catch (error) {
21
21
  console.log('Popup not present');
@@ -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.skip('Start Event Webhook Connector No Auth User Flow', async ({ page, modelerHomePage, navigationPage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, connectorMarketplacePage, context, }) => {
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 = 15000; // 15 seconds
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/inbound/test-webhook-id${randomString}`);
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 new Promise((res) => setTimeout(res, pollInterval));
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.skip('Intermediate Event Webhook Connector No Auth User Flow', async ({ modelerHomePage, modelerCreatePage, request, operateHomePage, operateProcessInstancePage, operateProcessesPage, navigationPage, connectorMarketplacePage, context, }) => {
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: 15000,
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
- const response = await request.post(`${baseURL}/connectors/inbound/test-webhook-intermediate${randomString}`, {
230
- data: {
231
- test: 'test',
232
- },
233
- });
234
- (0, test_1.expect)(response.status()).toBe(200);
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
- SM_8_7_1.test.skip();
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 navigationPage.goToModeler((testInfo.workerIndex + 1) * 1000);
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 modelerHomePage.clickCrossComponentProjectFolder();
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.clickDemoUser();
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.clickCrossComponentProjectFolder();
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.clickDemoUser();
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('bart');
133
- await (0, test_1.expect)(loginPage.usernameInput).toHaveValue('bart');
134
- await loginPage.fillPassword(process.env.DISTRO_QA_E2E_TESTS_IDENTITY_THIRDUSER_PASSWORD);
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.clickDemoUser();
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.clickCrossComponentProjectFolder();
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.clickDemoUser();
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
- await optimizeReportPage.clickVersionSelection();
88
- await optimizeReportPage.clickAlwaysDisplayLatestSelection();
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);
@@ -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>;
@@ -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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",