@camunda/e2e-test-suite 0.0.257 → 0.0.258

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.
Files changed (120) hide show
  1. package/dist/fixtures/SM-8.10.d.ts +81 -0
  2. package/dist/fixtures/SM-8.10.js +184 -0
  3. package/dist/pages/SM-8.10/Authorization.d.ts +31 -0
  4. package/dist/pages/SM-8.10/Authorization.js +146 -0
  5. package/dist/pages/SM-8.10/ClusterDetailsPage.d.ts +8 -0
  6. package/dist/pages/SM-8.10/ClusterDetailsPage.js +28 -0
  7. package/dist/pages/SM-8.10/ClusterPage.d.ts +11 -0
  8. package/dist/pages/SM-8.10/ClusterPage.js +32 -0
  9. package/dist/pages/SM-8.10/ConnectorMarketplacePage.d.ts +16 -0
  10. package/dist/pages/SM-8.10/ConnectorMarketplacePage.js +52 -0
  11. package/dist/pages/SM-8.10/ConnectorSettingsPage.d.ts +40 -0
  12. package/dist/pages/SM-8.10/ConnectorSettingsPage.js +133 -0
  13. package/dist/pages/SM-8.10/ConnectorTemplatePage.d.ts +11 -0
  14. package/dist/pages/SM-8.10/ConnectorTemplatePage.js +34 -0
  15. package/dist/pages/SM-8.10/ConsoleHomePage.d.ts +11 -0
  16. package/dist/pages/SM-8.10/ConsoleHomePage.js +31 -0
  17. package/dist/pages/SM-8.10/ConsoleOrganizationPage.d.ts +22 -0
  18. package/dist/pages/SM-8.10/ConsoleOrganizationPage.js +68 -0
  19. package/dist/pages/SM-8.10/FormJsPage.d.ts +31 -0
  20. package/dist/pages/SM-8.10/FormJsPage.js +87 -0
  21. package/dist/pages/SM-8.10/HomePage.d.ts +20 -0
  22. package/dist/pages/SM-8.10/HomePage.js +49 -0
  23. package/dist/pages/SM-8.10/IdentityTenantPage.d.ts +52 -0
  24. package/dist/pages/SM-8.10/IdentityTenantPage.js +218 -0
  25. package/dist/pages/SM-8.10/IdentityUsersPage.d.ts +92 -0
  26. package/dist/pages/SM-8.10/IdentityUsersPage.js +473 -0
  27. package/dist/pages/SM-8.10/KeycloakAdminPage.d.ts +15 -0
  28. package/dist/pages/SM-8.10/KeycloakAdminPage.js +68 -0
  29. package/dist/pages/SM-8.10/KeycloakLoginPage.d.ts +11 -0
  30. package/dist/pages/SM-8.10/KeycloakLoginPage.js +25 -0
  31. package/dist/pages/SM-8.10/KeycloakUtils.d.ts +16 -0
  32. package/dist/pages/SM-8.10/KeycloakUtils.js +63 -0
  33. package/dist/pages/SM-8.10/LoginPage.d.ts +21 -0
  34. package/dist/pages/SM-8.10/LoginPage.js +100 -0
  35. package/dist/pages/SM-8.10/ManagementIdentityPage.d.ts +46 -0
  36. package/dist/pages/SM-8.10/ManagementIdentityPage.js +153 -0
  37. package/dist/pages/SM-8.10/ModelerCreatePage.d.ts +199 -0
  38. package/dist/pages/SM-8.10/ModelerCreatePage.js +1052 -0
  39. package/dist/pages/SM-8.10/ModelerHomePage.d.ts +44 -0
  40. package/dist/pages/SM-8.10/ModelerHomePage.js +179 -0
  41. package/dist/pages/SM-8.10/NavigationPage.d.ts +47 -0
  42. package/dist/pages/SM-8.10/NavigationPage.js +134 -0
  43. package/dist/pages/SM-8.10/OCIdentityAuthorizationsPage.d.ts +10 -0
  44. package/dist/pages/SM-8.10/OCIdentityAuthorizationsPage.js +35 -0
  45. package/dist/pages/SM-8.10/OCIdentityClusterVariablesPage.d.ts +20 -0
  46. package/dist/pages/SM-8.10/OCIdentityClusterVariablesPage.js +69 -0
  47. package/dist/pages/SM-8.10/OCIdentityGroupsPage.d.ts +39 -0
  48. package/dist/pages/SM-8.10/OCIdentityGroupsPage.js +154 -0
  49. package/dist/pages/SM-8.10/OCIdentityHomePage.d.ts +23 -0
  50. package/dist/pages/SM-8.10/OCIdentityHomePage.js +81 -0
  51. package/dist/pages/SM-8.10/OCIdentityMappingRulesPage.d.ts +23 -0
  52. package/dist/pages/SM-8.10/OCIdentityMappingRulesPage.js +110 -0
  53. package/dist/pages/SM-8.10/OCIdentityRolesPage.d.ts +55 -0
  54. package/dist/pages/SM-8.10/OCIdentityRolesPage.js +197 -0
  55. package/dist/pages/SM-8.10/OCTenantPage.d.ts +67 -0
  56. package/dist/pages/SM-8.10/OCTenantPage.js +280 -0
  57. package/dist/pages/SM-8.10/OperateHomePage.d.ts +24 -0
  58. package/dist/pages/SM-8.10/OperateHomePage.js +81 -0
  59. package/dist/pages/SM-8.10/OperateProcessInstancePage.d.ts +24 -0
  60. package/dist/pages/SM-8.10/OperateProcessInstancePage.js +170 -0
  61. package/dist/pages/SM-8.10/OperateProcessesPage.d.ts +32 -0
  62. package/dist/pages/SM-8.10/OperateProcessesPage.js +205 -0
  63. package/dist/pages/SM-8.10/OptimizeCollectionsPage.d.ts +17 -0
  64. package/dist/pages/SM-8.10/OptimizeCollectionsPage.js +66 -0
  65. package/dist/pages/SM-8.10/OptimizeDashboardPage.d.ts +14 -0
  66. package/dist/pages/SM-8.10/OptimizeDashboardPage.js +56 -0
  67. package/dist/pages/SM-8.10/OptimizeHomePage.d.ts +19 -0
  68. package/dist/pages/SM-8.10/OptimizeHomePage.js +64 -0
  69. package/dist/pages/SM-8.10/OptimizeReportPage.d.ts +50 -0
  70. package/dist/pages/SM-8.10/OptimizeReportPage.js +179 -0
  71. package/dist/pages/SM-8.10/PlayPage.d.ts +44 -0
  72. package/dist/pages/SM-8.10/PlayPage.js +235 -0
  73. package/dist/pages/SM-8.10/SettingsPage.d.ts +12 -0
  74. package/dist/pages/SM-8.10/SettingsPage.js +25 -0
  75. package/dist/pages/SM-8.10/TaskDetailsPage.d.ts +70 -0
  76. package/dist/pages/SM-8.10/TaskDetailsPage.js +266 -0
  77. package/dist/pages/SM-8.10/TaskPanelPage.d.ts +24 -0
  78. package/dist/pages/SM-8.10/TaskPanelPage.js +93 -0
  79. package/dist/pages/SM-8.10/TaskProcessesPage.d.ts +14 -0
  80. package/dist/pages/SM-8.10/TaskProcessesPage.js +53 -0
  81. package/dist/pages/SM-8.10/UtilitiesPage.d.ts +34 -0
  82. package/dist/pages/SM-8.10/UtilitiesPage.js +435 -0
  83. package/dist/pages/SM-8.10/optimizeReportUtils.d.ts +6 -0
  84. package/dist/pages/SM-8.10/optimizeReportUtils.js +42 -0
  85. package/dist/pages/SM-8.7/ModelerCreatePage.js +3 -0
  86. package/dist/pages/SM-8.7/PlayPage.d.ts +1 -0
  87. package/dist/pages/SM-8.7/PlayPage.js +4 -2
  88. package/dist/tests/SM-8.10/cluster-variables.spec.d.ts +1 -0
  89. package/dist/tests/SM-8.10/cluster-variables.spec.js +190 -0
  90. package/dist/tests/SM-8.10/connectors-user-flows.spec.d.ts +1 -0
  91. package/dist/tests/SM-8.10/connectors-user-flows.spec.js +260 -0
  92. package/dist/tests/SM-8.10/console-user-flows.spec.d.ts +1 -0
  93. package/dist/tests/SM-8.10/console-user-flows.spec.js +88 -0
  94. package/dist/tests/SM-8.10/document-handling-user-flows.spec.d.ts +1 -0
  95. package/dist/tests/SM-8.10/document-handling-user-flows.spec.js +157 -0
  96. package/dist/tests/SM-8.10/hto-user-flows.spec.d.ts +1 -0
  97. package/dist/tests/SM-8.10/hto-user-flows.spec.js +408 -0
  98. package/dist/tests/SM-8.10/identity-user-flows.spec.d.ts +1 -0
  99. package/dist/tests/SM-8.10/identity-user-flows.spec.js +233 -0
  100. package/dist/tests/SM-8.10/license-key-user-flows.spec.d.ts +1 -0
  101. package/dist/tests/SM-8.10/license-key-user-flows.spec.js +523 -0
  102. package/dist/tests/SM-8.10/login.spec.d.ts +1 -0
  103. package/dist/tests/SM-8.10/login.spec.js +24 -0
  104. package/dist/tests/SM-8.10/migration-path-user-flows.spec.d.ts +1 -0
  105. package/dist/tests/SM-8.10/migration-path-user-flows.spec.js +224 -0
  106. package/dist/tests/SM-8.10/mt-enabled-user-flows.spec.d.ts +1 -0
  107. package/dist/tests/SM-8.10/mt-enabled-user-flows.spec.js +584 -0
  108. package/dist/tests/SM-8.10/optimize-user-flows.spec.d.ts +1 -0
  109. package/dist/tests/SM-8.10/optimize-user-flows.spec.js +184 -0
  110. package/dist/tests/SM-8.10/play.spec.d.ts +1 -0
  111. package/dist/tests/SM-8.10/play.spec.js +152 -0
  112. package/dist/tests/SM-8.10/rba-enabled-user-flows.spec.d.ts +1 -0
  113. package/dist/tests/SM-8.10/rba-enabled-user-flows.spec.js +715 -0
  114. package/dist/tests/SM-8.10/smoke-tests.spec.d.ts +1 -0
  115. package/dist/tests/SM-8.10/smoke-tests.spec.js +163 -0
  116. package/dist/tests/SM-8.10/test-setup.spec.d.ts +1 -0
  117. package/dist/tests/SM-8.10/test-setup.spec.js +24 -0
  118. package/dist/tests/SM-8.10/web-modeler-user-flows.spec.d.ts +1 -0
  119. package/dist/tests/SM-8.10/web-modeler-user-flows.spec.js +178 -0
  120. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ declare class OCTenantPage {
3
+ private page;
4
+ readonly createTenantMainButton: Locator;
5
+ readonly enterTenantNameInput: Locator;
6
+ readonly enterTenantIdInput: Locator;
7
+ readonly createTenantSubButton: Locator;
8
+ readonly usersTab: Locator;
9
+ readonly assignUsersButton: Locator;
10
+ readonly usernameInput: Locator;
11
+ readonly assignUserFinalButton: Locator;
12
+ readonly removeUserButton: Locator;
13
+ readonly removeButton: Locator;
14
+ readonly openSidebarButton: Locator;
15
+ readonly logoutButton: Locator;
16
+ readonly assignedApplicationsTab: Locator;
17
+ readonly searchApplicationsInput: Locator;
18
+ readonly assignApplicationsButtonFinal: Locator;
19
+ readonly assignApplicationsButton: Locator;
20
+ readonly tenantDescriptionInput: Locator;
21
+ readonly modalCloseButton: Locator;
22
+ readonly rolesTab: Locator;
23
+ readonly assignRoleButton: Locator;
24
+ readonly roleIdSearchBox: Locator;
25
+ readonly assignRoleSubButton: Locator;
26
+ readonly cancelButton: Locator;
27
+ readonly gotItButton: Locator;
28
+ readonly row: (name: string) => Locator;
29
+ constructor(page: Page);
30
+ clickCreateTenantMainButton(): Promise<void>;
31
+ clickCreateTenantSubButton(): Promise<void>;
32
+ clickEnterTenantNameInput(): Promise<void>;
33
+ fillEnterTenantNameInput(tenantName: string): Promise<void>;
34
+ clickEnterTenantIdInput(): Promise<void>;
35
+ fillEnterTenantIdInput(tenantId: string): Promise<void>;
36
+ clickUsersTab(): Promise<void>;
37
+ clickAssignUsersButton(): Promise<void>;
38
+ clickUsernameInput(): Promise<void>;
39
+ fillUsernameInput(user: string): Promise<void>;
40
+ clickAssignUserFinalButton(): Promise<void>;
41
+ clickRemoveUserButton(): Promise<void>;
42
+ clickRemoveButton(): Promise<void>;
43
+ clickTenantDescriptionInput(): Promise<void>;
44
+ fillTenantDescriptionInput(description: string): Promise<void>;
45
+ createTenant(tenantName: string): Promise<void>;
46
+ assertTenantCreated(): Promise<void>;
47
+ clickCancelButton(): Promise<void>;
48
+ clickGotItButton(): Promise<void>;
49
+ clickTenant(tenantName: string): Promise<void>;
50
+ assignUserToTenant(user: string): Promise<void>;
51
+ removeUserFromTenant(tenantName: string): Promise<void>;
52
+ clickOpenSidebarButton(): Promise<void>;
53
+ clickLogoutButton(): Promise<void>;
54
+ assignClientToTenant(clientName: string): Promise<void>;
55
+ clickAssignedApplicationsTab(): Promise<void>;
56
+ clickSearchApplicationsInput(): Promise<void>;
57
+ fillSearchApplicationsInput(clientName: string): Promise<void>;
58
+ clickAssignApplicationsFinalButton(): Promise<void>;
59
+ clickAssignApplicationsButton(): Promise<void>;
60
+ clickRolesTab(): Promise<void>;
61
+ clickAssignRoleButton(): Promise<void>;
62
+ clickRoleIdSearchBox(): Promise<void>;
63
+ fillRoleIdSearchBox(roleId: string, roleIdentifier: string): Promise<void>;
64
+ clickAssignRoleSubButton(): Promise<void>;
65
+ assignRoleToTenant(roleId: string, roleIdentifier: string): Promise<void>;
66
+ }
67
+ export { OCTenantPage };
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OCTenantPage = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const sleep_1 = require("../../utils/sleep");
6
+ const findLocatorInPaginatedList_1 = require("../../utils/findLocatorInPaginatedList");
7
+ const expectTextWithPagination_1 = require("../../utils/assertionHelpers/expectTextWithPagination");
8
+ class OCTenantPage {
9
+ page;
10
+ createTenantMainButton;
11
+ enterTenantNameInput;
12
+ enterTenantIdInput;
13
+ createTenantSubButton;
14
+ usersTab;
15
+ assignUsersButton;
16
+ usernameInput;
17
+ assignUserFinalButton;
18
+ removeUserButton;
19
+ removeButton;
20
+ openSidebarButton;
21
+ logoutButton;
22
+ assignedApplicationsTab;
23
+ searchApplicationsInput;
24
+ assignApplicationsButtonFinal;
25
+ assignApplicationsButton;
26
+ tenantDescriptionInput;
27
+ modalCloseButton;
28
+ rolesTab;
29
+ assignRoleButton;
30
+ roleIdSearchBox;
31
+ assignRoleSubButton;
32
+ cancelButton;
33
+ gotItButton;
34
+ row;
35
+ constructor(page) {
36
+ this.page = page;
37
+ this.createTenantMainButton = page.getByRole('button', {
38
+ name: 'Create Tenant',
39
+ });
40
+ this.enterTenantNameInput = page.getByPlaceholder('Enter tenant name');
41
+ this.enterTenantIdInput = page.getByPlaceholder('Enter tenant ID');
42
+ this.createTenantSubButton = page
43
+ .getByLabel('Create new tenant')
44
+ .getByRole('button', { name: 'Create tenant' });
45
+ this.usersTab = page.getByRole('tab', { name: 'Users' });
46
+ this.assignUsersButton = page.getByRole('button', { name: 'Assign user' });
47
+ this.usernameInput = page.getByTitle('Username');
48
+ this.assignUserFinalButton = page
49
+ .getByLabel('Assign user')
50
+ .getByRole('button', { name: 'Assign user' });
51
+ this.removeUserButton = page.getByRole('button', {
52
+ name: 'danger Remove user',
53
+ });
54
+ this.removeButton = page.getByRole('button', { name: 'danger Remove' });
55
+ this.openSidebarButton = page.getByLabel('Open User Sidebar');
56
+ this.logoutButton = page.getByRole('button', { name: 'Log out' });
57
+ this.assignedApplicationsTab = page.getByRole('tab', {
58
+ name: 'Assigned applications',
59
+ });
60
+ this.searchApplicationsInput = page.getByPlaceholder('Search applications');
61
+ this.assignApplicationsButtonFinal = page
62
+ .getByLabel('Assign applications')
63
+ .getByRole('button', { name: 'Assign applications' });
64
+ this.assignApplicationsButton = page.getByRole('button', {
65
+ name: 'Assign applications',
66
+ });
67
+ this.tenantDescriptionInput = page.getByTitle('Description');
68
+ this.modalCloseButton = page
69
+ .getByRole('dialog')
70
+ .getByRole('button', { name: 'Close' });
71
+ this.rolesTab = page.getByRole('tab', { name: 'Roles' });
72
+ this.assignRoleButton = page.getByRole('button', { name: 'Assign role' });
73
+ this.roleIdSearchBox = page.getByRole('searchbox', {
74
+ name: 'Search by Role ID',
75
+ });
76
+ this.assignRoleSubButton = page
77
+ .getByLabel('Assign role')
78
+ .getByRole('button', { name: 'Assign role' });
79
+ this.cancelButton = page
80
+ .getByRole('dialog')
81
+ .getByRole('button', { name: 'Cancel' });
82
+ this.gotItButton = page.getByRole('button', { name: 'Got it' });
83
+ this.row = (name) => this.page.getByRole('row').filter({ hasText: name }).first();
84
+ }
85
+ async clickCreateTenantMainButton() {
86
+ await this.createTenantMainButton.click({ timeout: 60000 });
87
+ }
88
+ async clickCreateTenantSubButton() {
89
+ await this.createTenantSubButton.click({ timeout: 60000 });
90
+ }
91
+ async clickEnterTenantNameInput() {
92
+ await this.enterTenantNameInput.click();
93
+ }
94
+ async fillEnterTenantNameInput(tenantName) {
95
+ await this.enterTenantNameInput.fill(tenantName);
96
+ }
97
+ async clickEnterTenantIdInput() {
98
+ await this.enterTenantIdInput.click();
99
+ }
100
+ async fillEnterTenantIdInput(tenantId) {
101
+ await this.enterTenantIdInput.fill(tenantId);
102
+ }
103
+ async clickUsersTab() {
104
+ await this.usersTab.click({ timeout: 60000 });
105
+ }
106
+ async clickAssignUsersButton() {
107
+ await this.assignUsersButton.click();
108
+ }
109
+ async clickUsernameInput() {
110
+ await this.usernameInput.click();
111
+ }
112
+ async fillUsernameInput(user) {
113
+ await this.usernameInput.fill(user);
114
+ }
115
+ async clickAssignUserFinalButton() {
116
+ try {
117
+ await this.assignUserFinalButton.click();
118
+ await (0, test_1.expect)(this.page.getByRole('dialog')).not.toBeVisible();
119
+ }
120
+ catch (e) {
121
+ if (await this.page.getByText('ALREADY_EXISTS').first().isVisible()) {
122
+ console.log('User is already assigned to tenant');
123
+ await this.clickCancelButton();
124
+ }
125
+ else {
126
+ throw new Error('Assigning user to tenant failed' + e);
127
+ }
128
+ }
129
+ }
130
+ async clickRemoveUserButton() {
131
+ await this.removeUserButton.click();
132
+ }
133
+ async clickRemoveButton() {
134
+ await this.removeButton.click();
135
+ }
136
+ async clickTenantDescriptionInput() {
137
+ await this.tenantDescriptionInput.click();
138
+ }
139
+ async fillTenantDescriptionInput(description) {
140
+ await this.tenantDescriptionInput.fill(description);
141
+ }
142
+ async createTenant(tenantName) {
143
+ await this.clickCreateTenantMainButton();
144
+ await this.clickEnterTenantNameInput();
145
+ await this.fillEnterTenantNameInput(tenantName);
146
+ await this.clickEnterTenantIdInput();
147
+ await this.fillEnterTenantIdInput(tenantName);
148
+ await this.clickTenantDescriptionInput();
149
+ await this.fillTenantDescriptionInput('This is a test');
150
+ await this.clickCreateTenantSubButton();
151
+ await this.assertTenantCreated();
152
+ await (0, sleep_1.sleep)(30000);
153
+ }
154
+ async assertTenantCreated() {
155
+ try {
156
+ await (0, test_1.expect)(this.page.getByText('successfully created')).toBeVisible({
157
+ timeout: 8000,
158
+ });
159
+ await this.clickGotItButton();
160
+ }
161
+ catch (error) {
162
+ if (await this.page.getByText('ALREADY_EXISTS').first().isVisible()) {
163
+ await this.clickCancelButton();
164
+ }
165
+ else {
166
+ throw new Error('Creating tenant failed' + error);
167
+ }
168
+ }
169
+ }
170
+ async clickCancelButton() {
171
+ await this.cancelButton.click({ timeout: 30000 });
172
+ }
173
+ async clickGotItButton() {
174
+ await this.gotItButton.click({ timeout: 30000 });
175
+ }
176
+ async clickTenant(tenantName) {
177
+ const maxRetries = 10;
178
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
179
+ try {
180
+ await this.page.reload();
181
+ await (0, sleep_1.sleep)(10000);
182
+ const tenant = this.page.getByText(tenantName).first();
183
+ await (0, findLocatorInPaginatedList_1.findLocatorInPaginatedList)(this.page, tenant);
184
+ await tenant.click({
185
+ timeout: 30000,
186
+ });
187
+ return;
188
+ }
189
+ catch (error) {
190
+ console.warn(`Attempt ${attempt} to click tenant '${tenantName}' failed. Retrying...`, error);
191
+ if (attempt === maxRetries) {
192
+ throw new Error(`Failed to click tenant '${tenantName}' after ${maxRetries} attempts.`);
193
+ }
194
+ }
195
+ }
196
+ }
197
+ async assignUserToTenant(user) {
198
+ await this.clickUsersTab();
199
+ await this.clickAssignUsersButton();
200
+ await this.clickUsernameInput();
201
+ await this.fillUsernameInput(user);
202
+ await this.clickAssignUserFinalButton();
203
+ }
204
+ async removeUserFromTenant(tenantName) {
205
+ await (0, expectTextWithPagination_1.expectTextWithPagination)(this.page, tenantName);
206
+ await this.page.getByText(tenantName).first().click();
207
+ await this.clickUsersTab();
208
+ await this.clickRemoveButton();
209
+ await this.clickRemoveUserButton();
210
+ await (0, test_1.expect)(this.page.getByText('Tenant member has been removed.')).toBeVisible({
211
+ timeout: 60000,
212
+ });
213
+ }
214
+ async clickOpenSidebarButton() {
215
+ await this.openSidebarButton.click({ timeout: 60000 });
216
+ }
217
+ async clickLogoutButton() {
218
+ await this.logoutButton.click({ timeout: 60000 });
219
+ }
220
+ async assignClientToTenant(clientName) {
221
+ await this.clickAssignedApplicationsTab();
222
+ if (await this.page.getByText(clientName, { exact: true }).isVisible()) {
223
+ return;
224
+ }
225
+ else {
226
+ await this.clickAssignApplicationsButton();
227
+ await this.clickSearchApplicationsInput();
228
+ await this.fillSearchApplicationsInput(clientName);
229
+ await this.page.getByText(clientName, { exact: true }).click();
230
+ await this.clickAssignApplicationsFinalButton();
231
+ await (0, test_1.expect)(this.page.getByText('Applications assigned')).toBeVisible({
232
+ timeout: 60000,
233
+ });
234
+ }
235
+ }
236
+ async clickAssignedApplicationsTab() {
237
+ await this.assignedApplicationsTab.click({ timeout: 60000 });
238
+ }
239
+ async clickSearchApplicationsInput() {
240
+ await this.searchApplicationsInput.click({ timeout: 60000 });
241
+ }
242
+ async fillSearchApplicationsInput(clientName) {
243
+ await this.searchApplicationsInput.fill(clientName);
244
+ }
245
+ async clickAssignApplicationsFinalButton() {
246
+ await this.assignApplicationsButtonFinal.click({ timeout: 60000 });
247
+ }
248
+ async clickAssignApplicationsButton() {
249
+ await this.assignApplicationsButton.click({ timeout: 60000 });
250
+ }
251
+ async clickRolesTab() {
252
+ await this.rolesTab.click();
253
+ }
254
+ async clickAssignRoleButton() {
255
+ await this.assignRoleButton.click();
256
+ }
257
+ async clickRoleIdSearchBox() {
258
+ await this.roleIdSearchBox.click();
259
+ }
260
+ async fillRoleIdSearchBox(roleId, roleIdentifier) {
261
+ await this.roleIdSearchBox.fill(roleId);
262
+ await this.page.getByText(roleIdentifier).click();
263
+ }
264
+ async clickAssignRoleSubButton() {
265
+ await this.assignRoleSubButton.click();
266
+ }
267
+ async assignRoleToTenant(roleId, roleIdentifier) {
268
+ await this.clickRolesTab();
269
+ await (0, sleep_1.sleep)(1000);
270
+ if (await this.row(roleId).isVisible()) {
271
+ console.log(`Role ${roleId} is already assigned to tenant`);
272
+ return;
273
+ }
274
+ await this.clickAssignRoleButton();
275
+ await this.clickRoleIdSearchBox();
276
+ await this.fillRoleIdSearchBox(roleId, roleIdentifier);
277
+ await this.clickAssignRoleSubButton();
278
+ }
279
+ }
280
+ exports.OCTenantPage = OCTenantPage;
@@ -0,0 +1,24 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ declare class OperateHomePage {
3
+ private page;
4
+ readonly operateBanner: Locator;
5
+ readonly processesTab: Locator;
6
+ readonly informationDialog: Locator;
7
+ readonly editVariableButton: Locator;
8
+ readonly variableValueInput: Locator;
9
+ readonly saveVariableButton: Locator;
10
+ readonly editVariableSpinner: Locator;
11
+ readonly licenseKeyTagNonProduction: Locator;
12
+ readonly licenseKeyTagProduction: Locator;
13
+ readonly processPageHeading: Locator;
14
+ constructor(page: Page);
15
+ clickProcessesTab(): Promise<void>;
16
+ closeInformationDialog(): Promise<void>;
17
+ clickEditVariableButton(variableName: string): Promise<void>;
18
+ clickVariableValueInput(): Promise<void>;
19
+ clearVariableValueInput(): Promise<void>;
20
+ fillVariableValueInput(value: string): Promise<void>;
21
+ clickSaveVariableButton(): Promise<void>;
22
+ openProcess(processName: string): Promise<void>;
23
+ }
24
+ export { OperateHomePage };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperateHomePage = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const clickLocatorWithRetry_1 = require("../../utils/assertionHelpers/clickLocatorWithRetry");
6
+ const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
7
+ const constants_1 = require("../../utils/constants");
8
+ class OperateHomePage {
9
+ page;
10
+ operateBanner;
11
+ processesTab;
12
+ informationDialog;
13
+ editVariableButton;
14
+ variableValueInput;
15
+ saveVariableButton;
16
+ editVariableSpinner;
17
+ licenseKeyTagNonProduction;
18
+ licenseKeyTagProduction;
19
+ processPageHeading;
20
+ constructor(page) {
21
+ this.page = page;
22
+ this.operateBanner = page.getByRole('link', { name: 'Camunda logo Operate' });
23
+ this.processesTab = page.getByRole('link', {
24
+ name: 'Processes',
25
+ exact: true,
26
+ });
27
+ this.informationDialog = page.getByRole('button', {
28
+ name: 'Close this dialog',
29
+ });
30
+ this.editVariableButton = page.getByTestId('edit-variable-button');
31
+ this.variableValueInput = page.getByTestId('edit-variable-value');
32
+ this.saveVariableButton = page.getByLabel('Save variable');
33
+ this.editVariableSpinner = page
34
+ .getByTestId('variable-operation-spinner')
35
+ .locator('circle')
36
+ .nth(1);
37
+ this.licenseKeyTagNonProduction = page
38
+ .getByText('Non-production license')
39
+ .first();
40
+ this.licenseKeyTagProduction = page.getByText('Production license').first();
41
+ this.processPageHeading = page
42
+ .getByTestId('expanded-panel')
43
+ .getByRole('heading', { name: 'Process' });
44
+ }
45
+ async clickProcessesTab() {
46
+ await (0, clickLocatorWithRetry_1.clickLocatorWithRetry)(this.page, this.processesTab, {
47
+ totalTimeout: 20000,
48
+ });
49
+ await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.processPageHeading, {
50
+ preAction: async () => {
51
+ await (0, test_1.expect)(this.processesTab).toBeVisible({
52
+ timeout: constants_1._1_SECOND_IN_MS * 4,
53
+ });
54
+ await this.processesTab.click({ timeout: constants_1._1_SECOND_IN_MS * 4 });
55
+ },
56
+ });
57
+ }
58
+ async closeInformationDialog() {
59
+ await this.informationDialog.click();
60
+ }
61
+ async clickEditVariableButton(variableName) {
62
+ const editVariableButton = 'Edit variable ' + variableName;
63
+ await this.page.getByLabel(editVariableButton).click();
64
+ }
65
+ async clickVariableValueInput() {
66
+ await this.variableValueInput.click();
67
+ }
68
+ async clearVariableValueInput() {
69
+ await this.variableValueInput.clear();
70
+ }
71
+ async fillVariableValueInput(value) {
72
+ await this.variableValueInput.fill(value);
73
+ }
74
+ async clickSaveVariableButton() {
75
+ await this.saveVariableButton.click();
76
+ }
77
+ async openProcess(processName) {
78
+ await this.page.getByText(processName).click();
79
+ }
80
+ }
81
+ exports.OperateHomePage = OperateHomePage;
@@ -0,0 +1,24 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ declare class OperateProcessInstancePage {
3
+ private page;
4
+ readonly diagram: Locator;
5
+ readonly completedIcon: Locator;
6
+ readonly diagramSpinner: Locator;
7
+ readonly activeIcon: Locator;
8
+ readonly incidentIcon: Locator;
9
+ constructor(page: Page);
10
+ connectorResultVariableName(name: string): Promise<Locator>;
11
+ connectorResultVariableValue(variableName: string): Promise<Locator>;
12
+ completedIconAssertion(): Promise<void>;
13
+ activeIconAssertion(): Promise<void>;
14
+ activeUserTaskIconVisibleAssertion(taskName: string): Promise<void>;
15
+ activeUserTaskIconNotVisibleAssertion(taskName: string): Promise<void>;
16
+ tenantNameAssertion(name: string): Promise<void>;
17
+ incidentIconAssertion(): Promise<void>;
18
+ assertEitherIncidentOrActiveIconVisible(): Promise<string>;
19
+ assertEitherIncidentOrCompletedIconVisible(): Promise<string>;
20
+ assertProcessCompleteStatusWithRetry(timeout?: number, maxRetries?: number): Promise<void>;
21
+ assertProcessVariableContainsText(variableName: string, text: string): Promise<void>;
22
+ assertActiveTokenIsPresent(): Promise<void>;
23
+ }
24
+ export { OperateProcessInstancePage };
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperateProcessInstancePage = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const sleep_1 = require("../../utils/sleep");
6
+ class OperateProcessInstancePage {
7
+ page;
8
+ diagram;
9
+ completedIcon;
10
+ diagramSpinner;
11
+ activeIcon;
12
+ incidentIcon;
13
+ constructor(page) {
14
+ this.page = page;
15
+ this.diagram = page.getByTestId('diagram');
16
+ this.completedIcon = page
17
+ .getByTestId('instance-header')
18
+ .getByTestId('COMPLETED-icon');
19
+ this.diagramSpinner = page.getByTestId('diagram-spinner');
20
+ this.activeIcon = page
21
+ .getByTestId('instance-header')
22
+ .getByTestId('ACTIVE-icon');
23
+ this.incidentIcon = page
24
+ .getByTestId('instance-header')
25
+ .getByTestId('INCIDENT-icon');
26
+ }
27
+ async connectorResultVariableName(name) {
28
+ return await this.page.getByTestId(name);
29
+ }
30
+ async connectorResultVariableValue(variableName) {
31
+ return await this.page.getByTestId(variableName).locator('td').last();
32
+ }
33
+ async completedIconAssertion() {
34
+ let retryCount = 0;
35
+ const maxRetries = 3;
36
+ while (retryCount < maxRetries) {
37
+ try {
38
+ await (0, test_1.expect)(this.completedIcon).toBeVisible({
39
+ timeout: 90000,
40
+ });
41
+ return; // Exit the function if the expectation is met
42
+ }
43
+ catch (error) {
44
+ // If the active icon isn't found, reload the page and try again
45
+ retryCount++;
46
+ console.log(`Attempt ${retryCount} failed. Retrying...`);
47
+ await this.page.reload();
48
+ await (0, sleep_1.sleep)(10000);
49
+ }
50
+ }
51
+ throw new Error(`Active icon not visible after ${maxRetries} attempts.`);
52
+ }
53
+ async activeIconAssertion() {
54
+ let retryCount = 0;
55
+ const maxRetries = 3;
56
+ while (retryCount < maxRetries) {
57
+ try {
58
+ await (0, test_1.expect)(this.activeIcon).toBeVisible({
59
+ timeout: 90000,
60
+ });
61
+ return; // Exit the function if the expectation is met
62
+ }
63
+ catch (error) {
64
+ // If the active icon isn't found, reload the page and try again
65
+ retryCount++;
66
+ console.log(`Attempt ${retryCount} failed. Retrying...`);
67
+ await this.page.reload();
68
+ await (0, sleep_1.sleep)(10000);
69
+ }
70
+ }
71
+ throw new Error(`Active icon not visible after ${maxRetries} attempts.`);
72
+ }
73
+ async activeUserTaskIconVisibleAssertion(taskName) {
74
+ let retryCount = 0;
75
+ const maxRetries = 3;
76
+ while (retryCount < maxRetries) {
77
+ try {
78
+ await (0, test_1.expect)(this.page.getByTestId(taskName)).toBeVisible({
79
+ timeout: 90000,
80
+ });
81
+ return; // Exit the function if the expectation is met
82
+ }
83
+ catch (error) {
84
+ // If the active icon isn't found, reload the page and try again
85
+ retryCount++;
86
+ console.log(`Attempt ${retryCount} failed. Retrying...`);
87
+ await this.page.reload();
88
+ await (0, sleep_1.sleep)(10000);
89
+ }
90
+ }
91
+ throw new Error(`Active icon not visible after ${maxRetries} attempts.`);
92
+ }
93
+ async activeUserTaskIconNotVisibleAssertion(taskName) {
94
+ let retryCount = 0;
95
+ const maxRetries = 3;
96
+ while (retryCount < maxRetries) {
97
+ try {
98
+ await (0, test_1.expect)(this.page.getByTestId(taskName)).not.toBeVisible({
99
+ timeout: 90000,
100
+ });
101
+ return; // Exit the function if the expectation is met
102
+ }
103
+ catch (error) {
104
+ // If the active icon is found, reload the page and try again
105
+ retryCount++;
106
+ console.log(`Attempt ${retryCount} failed. Retrying...`);
107
+ await this.page.reload();
108
+ await (0, sleep_1.sleep)(10000);
109
+ }
110
+ }
111
+ throw new Error(`Active icon visible after ${maxRetries} attempts.`);
112
+ }
113
+ async tenantNameAssertion(name) {
114
+ await (0, test_1.expect)(this.page.getByRole('cell', { name: name, exact: true })).toBeVisible({ timeout: 60000 });
115
+ }
116
+ async incidentIconAssertion() {
117
+ await (0, test_1.expect)(this.incidentIcon).toBeVisible({ timeout: 90000 });
118
+ }
119
+ async assertEitherIncidentOrActiveIconVisible() {
120
+ return Promise.race([
121
+ this.incidentIcon.waitFor({ timeout: 90000 }).then(() => 'incident'),
122
+ this.activeIcon.waitFor({ timeout: 90000 }).then(() => 'active'),
123
+ ]);
124
+ }
125
+ async assertEitherIncidentOrCompletedIconVisible() {
126
+ return Promise.race([
127
+ this.incidentIcon.waitFor({ timeout: 90000 }).then(() => 'incident'),
128
+ this.completedIcon.waitFor({ timeout: 90000 }).then(() => 'completed'),
129
+ ]);
130
+ }
131
+ async assertProcessCompleteStatusWithRetry(timeout = 60000, maxRetries = 10) {
132
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
133
+ try {
134
+ await (0, test_1.expect)(this.completedIcon).toBeVisible({
135
+ timeout: timeout,
136
+ });
137
+ return;
138
+ }
139
+ catch (error) {
140
+ if (attempt < maxRetries - 1) {
141
+ console.warn(`Process complete status attempt ${attempt + 1} failed. Retrying...`);
142
+ await this.page.reload();
143
+ await (0, sleep_1.sleep)(5000);
144
+ }
145
+ else {
146
+ throw new Error(`Assertion failed after ${maxRetries} attempts`);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ async assertProcessVariableContainsText(variableName, text) {
152
+ const maxRetries = 3;
153
+ for (let retries = 0; retries < maxRetries; retries++) {
154
+ try {
155
+ await (0, test_1.expect)(this.page.getByTestId(`variable-${variableName}`)).toContainText(text, { timeout: 30000 });
156
+ return;
157
+ }
158
+ catch (error) {
159
+ console.log(`Failed to assert variable ${variableName}` + error);
160
+ await this.page.reload();
161
+ await (0, sleep_1.sleep)(10000);
162
+ }
163
+ }
164
+ throw new Error(`Failed to assert variable ${variableName} after ${maxRetries} attempts.`);
165
+ }
166
+ async assertActiveTokenIsPresent() {
167
+ await (0, test_1.expect)(this.activeIcon).toBeVisible({ timeout: 60000 });
168
+ }
169
+ }
170
+ exports.OperateProcessInstancePage = OperateProcessInstancePage;
@@ -0,0 +1,32 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ declare class OperateProcessesPage {
3
+ private page;
4
+ readonly processResultCount: Locator;
5
+ readonly processActiveCheckbox: Locator;
6
+ readonly processCompletedCheckbox: Locator;
7
+ readonly processRunningInstancesCheckbox: Locator;
8
+ readonly processIncidentsCheckbox: Locator;
9
+ readonly processPageHeading: Locator;
10
+ readonly noMatchingInstancesMessage: Locator;
11
+ readonly processFinishedInstancesCheckbox: Locator;
12
+ readonly moreFiltersButton: Locator;
13
+ readonly processInstanceKeyTextBox: Locator;
14
+ constructor(page: Page);
15
+ private checkCheckbox;
16
+ private uncheckCheckbox;
17
+ private uncheckCompletedCheckbox;
18
+ private uncheckActiveCheckbox;
19
+ private toggleActiveCheckboxOn;
20
+ private toggleCompletedCheckbox;
21
+ private checkTableForProcess;
22
+ clickProcessActiveCheckbox(): Promise<void>;
23
+ clickProcessCompletedCheckbox(): Promise<void>;
24
+ clickProcessIncidentsCheckbox(): Promise<void>;
25
+ clickRunningProcessInstancesCheckbox(): Promise<void>;
26
+ clickFinishedProcessInstancesCheckbox(): Promise<void>;
27
+ clickProcessInstanceLink(processName: string, type?: 'active' | 'completed'): Promise<void>;
28
+ clickProcessInstanceLinkWithPartialNameMatch(processName: string): Promise<void>;
29
+ private getMoreFilterValueLocator;
30
+ applyMoreFilters(filter: string, value: string): Promise<void>;
31
+ }
32
+ export { OperateProcessesPage };