@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,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskPanelPage = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const sleep_1 = require("../../utils/sleep");
6
+ const constants_1 = require("../../utils/constants");
7
+ class TaskPanelPage {
8
+ page;
9
+ availableTasks;
10
+ filterOptions;
11
+ tasklistBanner;
12
+ collapseFilter;
13
+ processesPageTab;
14
+ tasksTab;
15
+ assignToMeButton;
16
+ unassignButton;
17
+ licenseKeyTagNonProduction;
18
+ licenseKeyTagProduction;
19
+ constructor(page) {
20
+ this.page = page;
21
+ this.availableTasks = page.getByTitle('Available tasks');
22
+ this.filterOptions = page
23
+ .locator('[aria-label="Filter controls"] li')
24
+ .filter({ hasText: 'Expand to show filters' });
25
+ this.tasklistBanner = page.getByRole('link', {
26
+ name: 'Camunda logo Tasklist',
27
+ });
28
+ this.collapseFilter = page.locator('button[aria-controls="task-nav-bar"][aria-expanded="true"]');
29
+ this.processesPageTab = page.getByRole('link', { name: 'Processes' });
30
+ this.tasksTab = page.getByRole('link', { name: 'Tasks', exact: true });
31
+ this.assignToMeButton = page.getByRole('button', { name: 'Assign to me' });
32
+ this.unassignButton = page.getByRole('button', { name: 'Unassign' });
33
+ this.licenseKeyTagNonProduction = page.getByText('Non-production license', {
34
+ exact: true,
35
+ });
36
+ this.licenseKeyTagProduction = page.getByText('Production license', {
37
+ exact: true,
38
+ });
39
+ }
40
+ async openTask(name, assignButton = true) {
41
+ for (let attempt = 1; attempt <= 30; attempt++) {
42
+ try {
43
+ await this.availableTasks
44
+ .getByText(name, { exact: true })
45
+ .nth(0)
46
+ .click({ timeout: constants_1._1_SECOND_IN_MS * 4 });
47
+ if (assignButton) {
48
+ await (0, test_1.expect)(this.assignToMeButton).toBeVisible({
49
+ timeout: constants_1._1_SECOND_IN_MS * 10,
50
+ });
51
+ }
52
+ return;
53
+ }
54
+ catch (error) {
55
+ if (attempt < 30) {
56
+ console.warn(`Attempt ${attempt} failed. Reloading page...`);
57
+ await this.page.reload();
58
+ }
59
+ else {
60
+ throw new Error(`Failed to open task "${name}" after 3 attempts: ${error}`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ async filterBy(option) {
66
+ await this.filterOptions.click({ timeout: 45000 });
67
+ await (0, test_1.expect)(this.page.getByRole('link', { name: option })).toBeVisible({
68
+ timeout: 120000,
69
+ });
70
+ await this.page.getByRole('link', { name: option }).click({ timeout: 120000 });
71
+ }
72
+ async scrollToLastTask(name) {
73
+ await this.page.getByText(name).last().scrollIntoViewIfNeeded();
74
+ }
75
+ async scrollToFirstTask(name) {
76
+ await this.page.getByText(name).first().scrollIntoViewIfNeeded();
77
+ }
78
+ async clickCollapseFilter() {
79
+ await this.collapseFilter.click({ timeout: 45000 });
80
+ }
81
+ async clickProcessesTab() {
82
+ await (0, test_1.expect)(this.processesPageTab).toBeVisible();
83
+ await this.processesPageTab.click();
84
+ }
85
+ async taskCount(name) {
86
+ await (0, sleep_1.sleep)(50000);
87
+ return this.availableTasks.getByText(name, { exact: true }).count();
88
+ }
89
+ async clickTasksTab() {
90
+ await this.tasksTab.click();
91
+ }
92
+ }
93
+ exports.TaskPanelPage = TaskPanelPage;
@@ -0,0 +1,14 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ declare class TaskProcessesPage {
3
+ private page;
4
+ readonly popupContinueButton: Locator;
5
+ readonly popup: Locator;
6
+ readonly processes: Locator;
7
+ readonly searchProcessesSearchbox: Locator;
8
+ constructor(page: Page);
9
+ clickpopupContinueButton(): Promise<void>;
10
+ startProcess(name: string): Promise<void>;
11
+ clickSearchProcessesSearchbox(): Promise<void>;
12
+ fillSearchProcessesSearchbox(process: string): Promise<void>;
13
+ }
14
+ export { TaskProcessesPage };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskProcessesPage = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const UtilitiesPage_1 = require("./UtilitiesPage");
6
+ class TaskProcessesPage {
7
+ page;
8
+ popupContinueButton;
9
+ popup;
10
+ processes;
11
+ searchProcessesSearchbox;
12
+ constructor(page) {
13
+ this.page = page;
14
+ this.popupContinueButton = page.getByRole('button', { name: 'Continue' });
15
+ this.popup = page.getByLabel('Start your process on demand');
16
+ this.processes = page.locator('[data-testid="process-tile"]');
17
+ this.searchProcessesSearchbox = page.getByRole('searchbox', {
18
+ name: 'Search processes',
19
+ });
20
+ }
21
+ async clickpopupContinueButton() {
22
+ try {
23
+ await (0, test_1.expect)(this.popupContinueButton).toBeVisible({ timeout: 15000 });
24
+ await this.popupContinueButton.click({ timeout: 15000 });
25
+ await (0, test_1.expect)(this.popupContinueButton).not.toBeVisible({ timeout: 60000 });
26
+ }
27
+ catch (error) {
28
+ console.log('Popup not present');
29
+ }
30
+ }
31
+ async startProcess(name) {
32
+ const found = await (0, UtilitiesPage_1.findTextWithPagination)(this.page, name, 60000, async () => {
33
+ await this.page
34
+ .locator('[data-testid="process-tile"]')
35
+ .filter({ hasText: name })
36
+ .getByRole('button', { name: 'Start process' })
37
+ .click({ timeout: 60000 });
38
+ });
39
+ if (!found) {
40
+ throw new Error(`Process "${name}" not found in pagination`);
41
+ }
42
+ await (0, test_1.expect)(this.page.getByText('Waiting for tasks...')).not.toBeVisible({
43
+ timeout: 60000,
44
+ });
45
+ }
46
+ async clickSearchProcessesSearchbox() {
47
+ await this.searchProcessesSearchbox.click();
48
+ }
49
+ async fillSearchProcessesSearchbox(process) {
50
+ await this.searchProcessesSearchbox.fill(process);
51
+ }
52
+ }
53
+ exports.TaskProcessesPage = TaskProcessesPage;
@@ -0,0 +1,34 @@
1
+ import { ModelerHomePage } from './ModelerHomePage';
2
+ import { ModelerCreatePage } from './ModelerCreatePage';
3
+ import { Locator, Page } from '@playwright/test';
4
+ import { TaskDetailsPage } from '../SM-8.10/TaskDetailsPage';
5
+ import { TaskPanelPage } from '../SM-8.10/TaskPanelPage';
6
+ import { ConnectorSettingsPage } from '../SM-8.10/ConnectorSettingsPage';
7
+ import { ConnectorMarketplacePage } from '../SM-8.10/ConnectorMarketplacePage';
8
+ import { ConnectorTemplatePage } from './ConnectorTemplatePage';
9
+ import { NavigationPage } from '../SM-8.10/NavigationPage';
10
+ import { ManagementIdentityPage } from '../SM-8.10/ManagementIdentityPage';
11
+ import { KeycloakLoginPage } from '../SM-8.10/KeycloakLoginPage';
12
+ import { KeycloakAdminPage } from '../SM-8.10/KeycloakAdminPage';
13
+ import { OCIdentityHomePage } from '../SM-8.10/OCIdentityHomePage';
14
+ import { OCIdentityMappingRulesPage } from '../SM-8.10/OCIdentityMappingRulesPage';
15
+ import { OCIdentityRolesPage } from '../SM-8.10/OCIdentityRolesPage';
16
+ import { Serializable } from 'playwright-core/types/structs';
17
+ export declare function deleteAllUserGroups(): Promise<void>;
18
+ export declare function runMultipleProcesses(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, numberOfProcesses: number, processName: string, processId?: string): Promise<void>;
19
+ export declare function createUserAndAssignToRole(page: Page, navigationPage: NavigationPage, managementIdentityPage: ManagementIdentityPage, keycloakLoginPage: KeycloakLoginPage, keycloakAdminPage: KeycloakAdminPage, ocIdentityHomePage: OCIdentityHomePage, identityMappingRulesPage: OCIdentityMappingRulesPage, identityRolesPage: OCIdentityRolesPage, username: string, password: string, role?: string, testMappings?: Serializable): Promise<void>;
20
+ export declare function assignMappingToRole(page: Page, ocIdentityHomePage: OCIdentityHomePage, ocIdentityRolesPage: OCIdentityRolesPage, role: string, mappingRuleId: string, testMappings?: Serializable): Promise<void>;
21
+ export declare function createAndRunProcess(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, processId?: string): Promise<void>;
22
+ export declare function completeTaskWithRetry(page: Page, taskPanelPage: TaskPanelPage, taskDetailsPage: TaskDetailsPage, taskName: string, taskPriority: string, maxRetries?: number): Promise<void>;
23
+ export declare function modelRestConnector(modelerCreatePage: ModelerCreatePage, connectorSettingsPage: ConnectorSettingsPage, connectorMarketplacePage: ConnectorMarketplacePage, processName: string, url: string, auth: string, resultExpression: string, resultVariable?: string, basicAuthCredentials?: {
24
+ username: string;
25
+ password: string;
26
+ }): Promise<void>;
27
+ export declare function assertLocatorVisibleWithPaginated(page: Page, locator: Locator, text: string): Promise<void>;
28
+ export declare function assertLocatorVisibleWithRetry(page: Page, locator: Locator, text: string, timeout?: number, notVisible?: boolean, maxRetries?: number, clickLocator?: Locator): Promise<void>;
29
+ export declare function assertPageTextWithRetry(page: Page, text: string, notVisible?: boolean, timeout?: number, maxRetries?: number): Promise<void>;
30
+ export declare function modelAndRunConnectorsTimerEventDiagram(modelerCreatePage: ModelerCreatePage, modelerHomePage: ModelerHomePage, processName: string, page: Page, connectorMarketplacePage: ConnectorMarketplacePage, connectorTemplatePage: ConnectorTemplatePage): Promise<void>;
31
+ export declare function findTextWithPagination(page: Page, text: string, timeout?: number, action?: (locator: Locator) => Promise<void>): Promise<boolean>;
32
+ export declare function modelDiagramFromFile(page: Page, modelerHomePage: ModelerHomePage, modelerCreatePage: ModelerCreatePage, processName: string, fileName?: string, nrOfRenamedUserTasks?: number, taskName?: string): Promise<void>;
33
+ export declare function expectTextWithPagination(page: Page, text: string, shouldExist?: boolean, timeout?: number): Promise<void>;
34
+ export declare function modelAndRunConnectorsDocHandlingDiagram(modelerCreatePage: ModelerCreatePage, modelerHomePage: ModelerHomePage, processName: string, page: Page, connectorMarketplacePage: ConnectorMarketplacePage, zeebeUrl: string, zeebeClientId: string, zeebeClientSecret: string, endpoint: string): Promise<void>;
@@ -0,0 +1,435 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelAndRunConnectorsDocHandlingDiagram = exports.expectTextWithPagination = exports.modelDiagramFromFile = exports.findTextWithPagination = exports.modelAndRunConnectorsTimerEventDiagram = exports.assertPageTextWithRetry = exports.assertLocatorVisibleWithRetry = exports.assertLocatorVisibleWithPaginated = exports.modelRestConnector = exports.completeTaskWithRetry = exports.createAndRunProcess = exports.assignMappingToRole = exports.createUserAndAssignToRole = exports.runMultipleProcesses = exports.deleteAllUserGroups = void 0;
4
+ const sleep_1 = require("../../utils/sleep");
5
+ const test_1 = require("@playwright/test");
6
+ const fileUpload_1 = require("../../utils/fileUpload");
7
+ const findLocatorInPaginatedList_1 = require("../../utils/findLocatorInPaginatedList");
8
+ const KeycloakUtils_1 = require("../SM-8.10/KeycloakUtils");
9
+ const expectLocatorWithPagination_1 = require("../../utils/assertionHelpers/expectLocatorWithPagination");
10
+ // This step will be skipped until new Identity expected flow is confirmed
11
+ async function deleteAllUserGroups() {
12
+ // await navigationPage.goToOCIdentity();
13
+ // await identityPage.clickGroupsTab();
14
+ // await identityPage.deleteAllGroups();
15
+ }
16
+ exports.deleteAllUserGroups = deleteAllUserGroups;
17
+ async function runMultipleProcesses(page, modelerHomePage, modelerCreatePage, numberOfProcesses, processName, processId = '') {
18
+ for (let i = 1; i <= numberOfProcesses; i++) {
19
+ await createAndRunProcess(page, modelerHomePage, modelerCreatePage, processName + i, processId.length > 0 ? processId + i : processId);
20
+ }
21
+ }
22
+ exports.runMultipleProcesses = runMultipleProcesses;
23
+ async function createUserAndAssignToRole(page, navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, ocIdentityHomePage, identityMappingRulesPage, identityRolesPage, username, password, role = 'admin', testMappings) {
24
+ const mappingRuleId = `${username}-user-mapping`;
25
+ const claimName = 'preferred_username';
26
+ await (0, KeycloakUtils_1.createUser)(navigationPage, managementIdentityPage, keycloakLoginPage, keycloakAdminPage, username, password);
27
+ await navigationPage.goToOCIdentity();
28
+ await ocIdentityHomePage.clickMappingRulesTab();
29
+ await identityMappingRulesPage.createMappingRule(mappingRuleId, mappingRuleId, claimName, username);
30
+ await (0, expectLocatorWithPagination_1.expectLocatorWithPagination)(page, identityMappingRulesPage.mappingRuleRow(mappingRuleId).first());
31
+ if (testMappings && mappingRuleId.toLowerCase() != 'demo-user-mapping') {
32
+ testMappings.mappingIds.push(mappingRuleId);
33
+ }
34
+ await assignMappingToRole(page, ocIdentityHomePage, identityRolesPage, role, mappingRuleId, testMappings);
35
+ await (0, expectLocatorWithPagination_1.expectLocatorWithPagination)(page, identityMappingRulesPage
36
+ .mappingRuleRow(mappingRuleId)
37
+ .filter({
38
+ hasText: `${mappingRuleId}${mappingRuleId}${claimName}${username}`,
39
+ })
40
+ .first());
41
+ }
42
+ exports.createUserAndAssignToRole = createUserAndAssignToRole;
43
+ async function assignMappingToRole(page, ocIdentityHomePage, ocIdentityRolesPage, role, mappingRuleId, testMappings) {
44
+ await ocIdentityHomePage.clickRolesTab();
45
+ try {
46
+ await (0, test_1.expect)(ocIdentityRolesPage.roleCell(role).first()).toBeVisible({
47
+ timeout: 20000,
48
+ });
49
+ }
50
+ catch (error) {
51
+ await ocIdentityRolesPage.createRole({ id: role, name: role });
52
+ if (testMappings && role.toLowerCase() != 'admin') {
53
+ testMappings.roleIds.push(role);
54
+ }
55
+ }
56
+ await ocIdentityRolesPage.assignMappingRuleToRole(role, mappingRuleId);
57
+ await assertLocatorVisibleWithPaginated(page, ocIdentityRolesPage.mappingRuleRow(mappingRuleId).first(), `${mappingRuleId} Mapping Rule`);
58
+ }
59
+ exports.assignMappingToRole = assignMappingToRole;
60
+ async function createAndRunProcess(page, modelerHomePage, modelerCreatePage, processName, processId = '') {
61
+ await modelerHomePage.clickDiagramTypeDropdown();
62
+ await modelerHomePage.clickBpmnTemplateOption();
63
+ await modelerCreatePage.modelCamundaUserTaskDiagram(processName, processId);
64
+ await modelerCreatePage.runProcessInstance();
65
+ await modelerHomePage.clickProjectBreadcrumb();
66
+ }
67
+ exports.createAndRunProcess = createAndRunProcess;
68
+ async function completeTaskWithRetry(page, taskPanelPage, taskDetailsPage, taskName, taskPriority, maxRetries = 7) {
69
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
70
+ try {
71
+ await page.waitForLoadState('networkidle');
72
+ await (0, sleep_1.sleep)(500);
73
+ const taskExists = await taskPanelPage.availableTasks
74
+ .getByText(taskName, { exact: true })
75
+ .first()
76
+ .isVisible({ timeout: 10000 });
77
+ if (!taskExists) {
78
+ throw new Error(`Task ${taskName} not found in available tasks`);
79
+ }
80
+ await taskPanelPage.openTask(taskName, false);
81
+ await (0, sleep_1.sleep)(500);
82
+ await (0, test_1.expect)(taskDetailsPage.detailsPanel).toBeVisible({ timeout: 30000 });
83
+ if (!(await taskDetailsPage.assignedToMeText.isVisible({ timeout: 5000 }))) {
84
+ await taskDetailsPage.clickAssignToMeButton();
85
+ }
86
+ await (0, test_1.expect)(taskDetailsPage.detailsPanel.getByText(taskPriority)).toBeVisible({ timeout: 30000 });
87
+ await taskDetailsPage.clickCompleteTaskButton();
88
+ await (0, test_1.expect)(taskPanelPage.availableTasks.getByText(taskName, { exact: true }).first()).not.toBeVisible({ timeout: 60000 });
89
+ console.log(`Successfully completed task: ${taskName}`);
90
+ return;
91
+ }
92
+ catch (error) {
93
+ console.warn(`Attempt ${attempt + 1} failed for completing task ${taskName}:`, error instanceof Error ? error.message : error);
94
+ if (attempt < maxRetries - 1) {
95
+ await page.reload();
96
+ await page.waitForLoadState('networkidle');
97
+ await (0, sleep_1.sleep)(500);
98
+ }
99
+ else {
100
+ console.error(`All ${maxRetries} attempts failed for task ${taskName}`);
101
+ throw new Error(`Completion of task ${taskName} failed after ${maxRetries} attempts`);
102
+ }
103
+ }
104
+ }
105
+ }
106
+ exports.completeTaskWithRetry = completeTaskWithRetry;
107
+ async function modelRestConnector(modelerCreatePage, connectorSettingsPage, connectorMarketplacePage, processName, url, auth, resultExpression, resultVariable = '', basicAuthCredentials = {
108
+ username: '',
109
+ password: '',
110
+ }) {
111
+ await (0, test_1.expect)(modelerCreatePage.generalPanel).toBeVisible({
112
+ timeout: 120000,
113
+ });
114
+ await modelerCreatePage.enterDiagramName(processName);
115
+ await (0, sleep_1.sleep)(1000);
116
+ await modelerCreatePage.clickCanvas();
117
+ await modelerCreatePage.clickGeneralPropertiesPanel();
118
+ await modelerCreatePage.clickIdInput();
119
+ await modelerCreatePage.fillIdInput(processName);
120
+ await modelerCreatePage.assertNameInput(processName);
121
+ await (0, sleep_1.sleep)(1000);
122
+ await modelerCreatePage.clickStartEventElement();
123
+ try {
124
+ await (0, test_1.expect)(modelerCreatePage.appendElementButton).toBeVisible({
125
+ timeout: 1000,
126
+ });
127
+ }
128
+ catch {
129
+ await modelerCreatePage.clickStartEventElement();
130
+ }
131
+ await modelerCreatePage.clickAppendElementButton();
132
+ await modelerCreatePage.clickAppendTaskButton();
133
+ await modelerCreatePage.clickChangeTypeButton();
134
+ try {
135
+ await (0, test_1.expect)(modelerCreatePage.restConnectorOption).toBeVisible({
136
+ timeout: 15000,
137
+ });
138
+ }
139
+ catch (error) {
140
+ await modelerCreatePage.clickMarketPlaceButton();
141
+ await connectorMarketplacePage.clickSearchForConnectorTextbox();
142
+ await connectorMarketplacePage.fillSearchForConnectorTextbox('REST Connector');
143
+ await (0, sleep_1.sleep)(10000);
144
+ await connectorMarketplacePage.downloadConnectorToProject();
145
+ }
146
+ await modelerCreatePage.clickRestConnectorOption();
147
+ await connectorSettingsPage.clickAuthenticationTab();
148
+ await connectorSettingsPage.clickHTTPEndpointTab();
149
+ if (auth == 'bearer') {
150
+ await connectorSettingsPage.selectAuthenticationType('bearer');
151
+ await (0, test_1.expect)(connectorSettingsPage.bearerTokenInput).toBeVisible({
152
+ timeout: 60000,
153
+ });
154
+ await connectorSettingsPage.clickBearerTokenInput();
155
+ await connectorSettingsPage.fillBearerTokenInput('thisisabearertoken');
156
+ await (0, test_1.expect)(connectorSettingsPage.methodTypeDropdown).toBeVisible({
157
+ timeout: 30000,
158
+ });
159
+ await connectorSettingsPage.selectMethodType('POST');
160
+ }
161
+ else if (auth == 'basic') {
162
+ await connectorSettingsPage.selectAuthenticationType('basic');
163
+ await (0, test_1.expect)(connectorSettingsPage.usernameInput).toBeVisible({
164
+ timeout: 60000,
165
+ });
166
+ await connectorSettingsPage.clickUsernameInput();
167
+ (0, test_1.expect)(basicAuthCredentials['username'].length).toBeGreaterThan(0);
168
+ (0, test_1.expect)(basicAuthCredentials['password'].length).toBeGreaterThan(0);
169
+ await connectorSettingsPage.fillUsernameInput(basicAuthCredentials['username']);
170
+ await connectorSettingsPage.clickPasswordInput();
171
+ await connectorSettingsPage.fillPasswordInput(basicAuthCredentials['password']);
172
+ await connectorSettingsPage.selectMethodType('POST');
173
+ }
174
+ await connectorSettingsPage.clickUrlInput();
175
+ await connectorSettingsPage.fillUrlInput(url);
176
+ await connectorSettingsPage.clickOutputMappingTab();
177
+ if (resultVariable.length > 0) {
178
+ await (0, test_1.expect)(connectorSettingsPage.resultVariableInput).toBeVisible({
179
+ timeout: 60000,
180
+ });
181
+ await connectorSettingsPage.clickResultVariableInput();
182
+ await connectorSettingsPage.fillResultVariableInput('result');
183
+ await (0, sleep_1.sleep)(5000);
184
+ }
185
+ await connectorSettingsPage.clickResultExpressionInput();
186
+ await connectorSettingsPage.fillResultExpressionInput(resultExpression);
187
+ await (0, sleep_1.sleep)(5000);
188
+ await modelerCreatePage.clickAppendElementButton();
189
+ await modelerCreatePage.clickAppendEndEventButton();
190
+ await (0, sleep_1.sleep)(10000);
191
+ }
192
+ exports.modelRestConnector = modelRestConnector;
193
+ async function assertLocatorVisibleWithPaginated(page, locator, text) {
194
+ const maxRetries = 6;
195
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
196
+ try {
197
+ await page.reload();
198
+ await (0, sleep_1.sleep)(5000);
199
+ if (attempt > 2) {
200
+ await (0, findLocatorInPaginatedList_1.findLocatorInPaginatedList)(page, locator);
201
+ }
202
+ await (0, test_1.expect)(locator).toBeVisible();
203
+ return;
204
+ }
205
+ catch (error) {
206
+ if (attempt < maxRetries - 1) {
207
+ console.warn(`Attempt ${attempt + 1} failed for asserting ${text}. Retrying...`);
208
+ }
209
+ else {
210
+ throw new Error(`Assertion ${text} failed after ${maxRetries} attempts`);
211
+ }
212
+ }
213
+ }
214
+ }
215
+ exports.assertLocatorVisibleWithPaginated = assertLocatorVisibleWithPaginated;
216
+ async function assertLocatorVisibleWithRetry(page, locator, text, timeout = 120000, notVisible, maxRetries = 3, clickLocator) {
217
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
218
+ try {
219
+ await page.reload();
220
+ if (clickLocator) {
221
+ await (0, test_1.expect)(clickLocator).toBeVisible({
222
+ timeout: 30000,
223
+ });
224
+ await clickLocator.click();
225
+ }
226
+ if (notVisible == true) {
227
+ await (0, sleep_1.sleep)(10000);
228
+ await (0, test_1.expect)(locator.first()).not.toBeVisible({
229
+ timeout: timeout,
230
+ });
231
+ }
232
+ else {
233
+ await (0, test_1.expect)(locator).toBeVisible({
234
+ timeout: timeout,
235
+ });
236
+ }
237
+ return;
238
+ }
239
+ catch (error) {
240
+ if (attempt < maxRetries - 1) {
241
+ console.warn(`Attempt ${attempt + 1} failed for asserting ${text}. Retrying...`);
242
+ }
243
+ else {
244
+ throw new Error(`Assertion failed after ${maxRetries} attempts`);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ exports.assertLocatorVisibleWithRetry = assertLocatorVisibleWithRetry;
250
+ async function assertPageTextWithRetry(page, text, notVisible, timeout = 120000, maxRetries = 3) {
251
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
252
+ try {
253
+ await page.reload();
254
+ if (notVisible == true) {
255
+ await (0, sleep_1.sleep)(10000);
256
+ await (0, test_1.expect)(page.getByText(text, { exact: true }).first()).not.toBeVisible({
257
+ timeout: timeout,
258
+ });
259
+ }
260
+ else {
261
+ await (0, test_1.expect)(page.getByText(text, { exact: true }).first()).toBeVisible({
262
+ timeout: timeout,
263
+ });
264
+ }
265
+ return;
266
+ }
267
+ catch (error) {
268
+ if (attempt < maxRetries - 1) {
269
+ console.warn(`Attempt ${attempt + 1} failed for asserting ${text}. Retrying...`);
270
+ }
271
+ else {
272
+ throw new Error(`Assertion failed after ${maxRetries} attempts`);
273
+ }
274
+ }
275
+ }
276
+ }
277
+ exports.assertPageTextWithRetry = assertPageTextWithRetry;
278
+ async function modelAndRunConnectorsTimerEventDiagram(modelerCreatePage, modelerHomePage, processName, page, connectorMarketplacePage, connectorTemplatePage) {
279
+ await modelerHomePage.clickCrossComponentProjectFolder();
280
+ await modelerHomePage.clickDiagramTypeDropdown();
281
+ await modelerHomePage.clickUploadFilesButton();
282
+ await (0, fileUpload_1.uploadFile)(page, 'Rest Connector Timer Event.bpmn');
283
+ await modelerHomePage.clickProcessDiagram('Rest Connector Timer Event');
284
+ await modelerCreatePage.clickDiagramBreadcrumb();
285
+ await modelerCreatePage.clickEditDiagramNameButton();
286
+ await modelerCreatePage.enterDiagramName(processName);
287
+ await modelerCreatePage.clickStartEventElement();
288
+ await modelerCreatePage.clickGeneralPropertiesPanel();
289
+ await modelerCreatePage.clickIdInput();
290
+ await modelerCreatePage.fillIdInput(processName);
291
+ await (0, sleep_1.sleep)(2000);
292
+ await page.reload();
293
+ await modelerCreatePage.clickEighthPlacedElement();
294
+ await modelerCreatePage.clickChangeTypeButton();
295
+ await (0, test_1.expect)(modelerCreatePage.marketPlaceButton).toBeVisible({
296
+ timeout: 120000,
297
+ });
298
+ await modelerCreatePage.clickMarketPlaceButton();
299
+ await connectorMarketplacePage.clickSearchForConnectorTextbox();
300
+ await connectorMarketplacePage.fillSearchForConnectorTextbox('REST Connector');
301
+ await (0, sleep_1.sleep)(10000);
302
+ await (0, test_1.expect)(page.getByText('REST ConnectorBy CamundaConnect, interact, and synchronize processes')).toBeVisible({
303
+ timeout: 60000,
304
+ });
305
+ await connectorMarketplacePage.downloadConnectorToProject();
306
+ await modelerHomePage.clickProjectBreadcrumb();
307
+ await modelerHomePage.clickProcessDiagram('REST Outbound Connector');
308
+ await connectorTemplatePage.publishConnector();
309
+ await modelerHomePage.clickProjectBreadcrumb();
310
+ await modelerHomePage.clickProcessDiagram(processName);
311
+ await (0, sleep_1.sleep)(5000);
312
+ await page.reload();
313
+ await (0, sleep_1.sleep)(5000);
314
+ await modelerCreatePage.runProcessInstance();
315
+ }
316
+ exports.modelAndRunConnectorsTimerEventDiagram = modelAndRunConnectorsTimerEventDiagram;
317
+ async function findTextWithPagination(page, text, timeout = 30000, action) {
318
+ const maxPages = 10;
319
+ const startTime = Date.now();
320
+ for (let pageNum = 0; pageNum < maxPages; pageNum++) {
321
+ if (Date.now() - startTime > timeout) {
322
+ console.log(`Overall timeout of ${timeout}ms exceeded`);
323
+ break;
324
+ }
325
+ const locator = page.getByText(text).last();
326
+ const textExists = await locator
327
+ .isVisible({ timeout: 2000 })
328
+ .catch(() => false);
329
+ if (textExists) {
330
+ console.log(`Found text "${text}" on page ${pageNum + 1}`);
331
+ if (action) {
332
+ await action(locator);
333
+ }
334
+ return true;
335
+ }
336
+ const loadMoreButton = page
337
+ .getByRole('button', { name: 'Load more', exact: true })
338
+ .last();
339
+ const isVisible = await loadMoreButton
340
+ .isVisible({ timeout: 1000 })
341
+ .catch(() => false);
342
+ const isEnabled = isVisible
343
+ ? await loadMoreButton.isEnabled().catch(() => false)
344
+ : false;
345
+ if (!isVisible || !isEnabled) {
346
+ console.log(`No more pages available after page ${pageNum + 1} (visible: ${isVisible}, enabled: ${isEnabled})`);
347
+ break;
348
+ }
349
+ console.log(`Text "${text}" not found on page ${pageNum + 1}, going to next page...`);
350
+ await loadMoreButton.click();
351
+ await page.waitForTimeout(1000);
352
+ }
353
+ return false;
354
+ }
355
+ exports.findTextWithPagination = findTextWithPagination;
356
+ async function modelDiagramFromFile(page, modelerHomePage, modelerCreatePage, processName, fileName = '', nrOfRenamedUserTasks = 0, taskName = '') {
357
+ await modelerHomePage.clickDiagramTypeDropdown();
358
+ await modelerHomePage.clickUploadFilesButton();
359
+ await (0, fileUpload_1.uploadFile)(page, fileName + '.bpmn');
360
+ await modelerHomePage.clickProcessDiagram(fileName);
361
+ await modelerCreatePage.clickDiagramBreadcrumb();
362
+ await modelerCreatePage.clickEditDiagramNameButton();
363
+ await modelerCreatePage.enterDiagramName(processName);
364
+ await (0, sleep_1.sleep)(1000);
365
+ await modelerCreatePage.clickGeneralPropertiesPanel();
366
+ await modelerCreatePage.clickNameInput();
367
+ await modelerCreatePage.fillNameInput(processName);
368
+ await modelerCreatePage.clickIdInput();
369
+ await modelerCreatePage.fillIdInput(processName);
370
+ if (nrOfRenamedUserTasks > 0) {
371
+ for (let i = 1; i <= nrOfRenamedUserTasks; i++) {
372
+ await modelerCreatePage.clickUserTask('process' + i);
373
+ await modelerCreatePage.clickNameInput();
374
+ await modelerCreatePage.fillNameInput(taskName + i);
375
+ await modelerCreatePage.clickIdInput();
376
+ await modelerCreatePage.fillIdInput(taskName + i);
377
+ await modelerCreatePage.clickCanvas();
378
+ }
379
+ }
380
+ await (0, sleep_1.sleep)(10000);
381
+ }
382
+ exports.modelDiagramFromFile = modelDiagramFromFile;
383
+ async function expectTextWithPagination(page, text, shouldExist = true, timeout = 30000) {
384
+ const found = await findTextWithPagination(page, text, timeout);
385
+ if (shouldExist && !found) {
386
+ throw new Error(`Text "${text}" not found on any page within ${timeout}ms`);
387
+ }
388
+ if (!shouldExist && found) {
389
+ throw new Error(`Text "${text}" should not exist but was found`);
390
+ }
391
+ if (shouldExist && found) {
392
+ await (0, test_1.expect)(page.getByText(text).last()).toBeVisible({ timeout: 5000 });
393
+ }
394
+ }
395
+ exports.expectTextWithPagination = expectTextWithPagination;
396
+ async function modelAndRunConnectorsDocHandlingDiagram(modelerCreatePage, modelerHomePage, processName, page, connectorMarketplacePage, zeebeUrl, zeebeClientId, zeebeClientSecret, endpoint) {
397
+ await modelerHomePage.clickCrossComponentProjectFolder();
398
+ await modelerHomePage.clickDiagramTypeDropdown();
399
+ await modelerHomePage.clickUploadFilesButton();
400
+ await (0, fileUpload_1.uploadFile)(page, 'SM_Document_Handling_Connectors_User_Flow.bpmn');
401
+ await modelerHomePage.clickProcessDiagram('SM_Document_Handling_Connectors_User_Flow');
402
+ await modelerCreatePage.clickDiagramBreadcrumb();
403
+ await modelerCreatePage.clickEditDiagramNameButton();
404
+ await modelerCreatePage.enterDiagramName(processName);
405
+ await modelerCreatePage.clickGeneralPropertiesPanel();
406
+ await modelerCreatePage.clickNameInput();
407
+ await modelerCreatePage.fillNameInput(processName);
408
+ await modelerCreatePage.clickIdInput();
409
+ await modelerCreatePage.fillIdInput(processName);
410
+ await (0, sleep_1.sleep)(10000);
411
+ await modelerCreatePage.clickFirstPlaceRESTConnector();
412
+ await modelerCreatePage.clickChangeTypeButton();
413
+ await modelerCreatePage.clickMarketPlaceButton();
414
+ await connectorMarketplacePage.clickSearchForConnectorTextbox();
415
+ await connectorMarketplacePage.fillSearchForConnectorTextbox('REST Connector');
416
+ await connectorMarketplacePage.downloadConnectorToProject();
417
+ await (0, sleep_1.sleep)(5000);
418
+ await page.reload();
419
+ await (0, sleep_1.sleep)(5000);
420
+ await modelerCreatePage.fillStartEventVariablesForDocHandling(zeebeUrl, zeebeClientId, zeebeClientSecret);
421
+ await modelerCreatePage.setOAuthTokenEndpoint(page.locator('.djs-hit').first(), endpoint);
422
+ await (0, sleep_1.sleep)(2000);
423
+ await modelerCreatePage.setOAuthTokenEndpoint(page.locator('g:nth-child(3) > .djs-element > .djs-hit'), endpoint);
424
+ await (0, sleep_1.sleep)(2000);
425
+ await modelerCreatePage.setOAuthTokenEndpoint(page.locator('g:nth-child(6) > .djs-element > .djs-hit'), endpoint);
426
+ await (0, sleep_1.sleep)(2000);
427
+ await modelerCreatePage.clickCloseDetailsPanel();
428
+ await modelerCreatePage.setOAuthTokenEndpoint(page.locator('g:nth-child(7) > .djs-element > .djs-hit'), endpoint, { openPanel: true });
429
+ await (0, sleep_1.sleep)(2000);
430
+ await modelerCreatePage.clickCloseDetailsPanel();
431
+ await modelerCreatePage.setOAuthTokenEndpoint(page.locator('g:nth-child(9) > .djs-element > .djs-hit'), endpoint, { openPanel: true });
432
+ await (0, sleep_1.sleep)(2000);
433
+ await modelerCreatePage.runProcessInstance();
434
+ }
435
+ exports.modelAndRunConnectorsDocHandlingDiagram = modelAndRunConnectorsDocHandlingDiagram;
@@ -0,0 +1,6 @@
1
+ import { Locator, Page } from '@playwright/test';
2
+ import { OptimizeCollectionsPage } from '../SM-8.10/OptimizeCollectionsPage';
3
+ import { OptimizeReportPage } from '../SM-8.10/OptimizeReportPage';
4
+ import { OptimizeHomePage } from '../SM-8.10/OptimizeHomePage';
5
+ export declare const createReportForProcess: (optimizeCollectionsPage: OptimizeCollectionsPage, optimizeReportPage: OptimizeReportPage, processName: string) => Promise<void>;
6
+ export declare const assertReportWithRefreshes: (page: Page, optimizeHomePage: OptimizeHomePage, optimizeCollectionsPage: OptimizeCollectionsPage, optimizeReportPage: OptimizeReportPage, reportName: string, locator: Locator, text: string) => Promise<void>;