@camunda/e2e-test-suite 0.0.1442 → 0.0.1444
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/c8_versions.json +1 -0
- package/README.md +2 -0
- package/dist/fixtures/SM-8.11.d.ts +77 -0
- package/dist/fixtures/SM-8.11.js +176 -0
- package/dist/pages/8.7/ModelerCreatePage.js +21 -0
- package/dist/pages/SM-8.11/Authorization.d.ts +39 -0
- package/dist/pages/SM-8.11/Authorization.js +349 -0
- package/dist/pages/SM-8.11/ClusterDetailsPage.d.ts +8 -0
- package/dist/pages/SM-8.11/ClusterDetailsPage.js +65 -0
- package/dist/pages/SM-8.11/ClusterPage.d.ts +11 -0
- package/dist/pages/SM-8.11/ClusterPage.js +37 -0
- package/dist/pages/SM-8.11/ConnectorMarketplacePage.d.ts +27 -0
- package/dist/pages/SM-8.11/ConnectorMarketplacePage.js +187 -0
- package/dist/pages/SM-8.11/ConnectorSettingsPage.d.ts +41 -0
- package/dist/pages/SM-8.11/ConnectorSettingsPage.js +153 -0
- package/dist/pages/SM-8.11/ConnectorTemplatePage.d.ts +11 -0
- package/dist/pages/SM-8.11/ConnectorTemplatePage.js +34 -0
- package/dist/pages/SM-8.11/FormJsPage.d.ts +33 -0
- package/dist/pages/SM-8.11/FormJsPage.js +109 -0
- package/dist/pages/SM-8.11/HomePage.d.ts +20 -0
- package/dist/pages/SM-8.11/HomePage.js +49 -0
- package/dist/pages/SM-8.11/IdentityTenantPage.d.ts +53 -0
- package/dist/pages/SM-8.11/IdentityTenantPage.js +264 -0
- package/dist/pages/SM-8.11/IdentityUsersPage.d.ts +92 -0
- package/dist/pages/SM-8.11/IdentityUsersPage.js +485 -0
- package/dist/pages/SM-8.11/KeycloakAdminPage.d.ts +17 -0
- package/dist/pages/SM-8.11/KeycloakAdminPage.js +78 -0
- package/dist/pages/SM-8.11/KeycloakLoginPage.d.ts +12 -0
- package/dist/pages/SM-8.11/KeycloakLoginPage.js +32 -0
- package/dist/pages/SM-8.11/KeycloakUtils.d.ts +17 -0
- package/dist/pages/SM-8.11/KeycloakUtils.js +94 -0
- package/dist/pages/SM-8.11/LoginPage.d.ts +21 -0
- package/dist/pages/SM-8.11/LoginPage.js +112 -0
- package/dist/pages/SM-8.11/ManagementIdentityPage.d.ts +44 -0
- package/dist/pages/SM-8.11/ManagementIdentityPage.js +176 -0
- package/dist/pages/SM-8.11/ModelerCreatePage.d.ts +238 -0
- package/dist/pages/SM-8.11/ModelerCreatePage.js +1950 -0
- package/dist/pages/SM-8.11/ModelerHomePage.d.ts +97 -0
- package/dist/pages/SM-8.11/ModelerHomePage.js +956 -0
- package/dist/pages/SM-8.11/NavigationPage.d.ts +58 -0
- package/dist/pages/SM-8.11/NavigationPage.js +389 -0
- package/dist/pages/SM-8.11/OCIdentityAuthorizationsPage.d.ts +10 -0
- package/dist/pages/SM-8.11/OCIdentityAuthorizationsPage.js +22 -0
- package/dist/pages/SM-8.11/OCIdentityClusterVariablesPage.d.ts +22 -0
- package/dist/pages/SM-8.11/OCIdentityClusterVariablesPage.js +120 -0
- package/dist/pages/SM-8.11/OCIdentityGroupsPage.d.ts +39 -0
- package/dist/pages/SM-8.11/OCIdentityGroupsPage.js +154 -0
- package/dist/pages/SM-8.11/OCIdentityHomePage.d.ts +23 -0
- package/dist/pages/SM-8.11/OCIdentityHomePage.js +115 -0
- package/dist/pages/SM-8.11/OCIdentityMappingRulesPage.d.ts +23 -0
- package/dist/pages/SM-8.11/OCIdentityMappingRulesPage.js +116 -0
- package/dist/pages/SM-8.11/OCIdentityRolesPage.d.ts +61 -0
- package/dist/pages/SM-8.11/OCIdentityRolesPage.js +433 -0
- package/dist/pages/SM-8.11/OCTenantPage.d.ts +73 -0
- package/dist/pages/SM-8.11/OCTenantPage.js +399 -0
- package/dist/pages/SM-8.11/OperateHomePage.d.ts +26 -0
- package/dist/pages/SM-8.11/OperateHomePage.js +139 -0
- package/dist/pages/SM-8.11/OperateProcessInstancePage.d.ts +30 -0
- package/dist/pages/SM-8.11/OperateProcessInstancePage.js +276 -0
- package/dist/pages/SM-8.11/OperateProcessesPage.d.ts +38 -0
- package/dist/pages/SM-8.11/OperateProcessesPage.js +383 -0
- package/dist/pages/SM-8.11/OptimizeCollectionsPage.d.ts +17 -0
- package/dist/pages/SM-8.11/OptimizeCollectionsPage.js +62 -0
- package/dist/pages/SM-8.11/OptimizeDashboardPage.d.ts +14 -0
- package/dist/pages/SM-8.11/OptimizeDashboardPage.js +63 -0
- package/dist/pages/SM-8.11/OptimizeHomePage.d.ts +19 -0
- package/dist/pages/SM-8.11/OptimizeHomePage.js +76 -0
- package/dist/pages/SM-8.11/OptimizeReportPage.d.ts +50 -0
- package/dist/pages/SM-8.11/OptimizeReportPage.js +209 -0
- package/dist/pages/SM-8.11/PlayPage.d.ts +47 -0
- package/dist/pages/SM-8.11/PlayPage.js +389 -0
- package/dist/pages/SM-8.11/ProcessApplicationPage.d.ts +35 -0
- package/dist/pages/SM-8.11/ProcessApplicationPage.js +340 -0
- package/dist/pages/SM-8.11/SettingsPage.d.ts +12 -0
- package/dist/pages/SM-8.11/SettingsPage.js +34 -0
- package/dist/pages/SM-8.11/TaskDetailsPage.d.ts +70 -0
- package/dist/pages/SM-8.11/TaskDetailsPage.js +273 -0
- package/dist/pages/SM-8.11/TaskPanelPage.d.ts +29 -0
- package/dist/pages/SM-8.11/TaskPanelPage.js +320 -0
- package/dist/pages/SM-8.11/TaskProcessesPage.d.ts +15 -0
- package/dist/pages/SM-8.11/TaskProcessesPage.js +77 -0
- package/dist/pages/SM-8.11/UtilitiesPage.d.ts +38 -0
- package/dist/pages/SM-8.11/UtilitiesPage.js +573 -0
- package/dist/pages/SM-8.11/optimizeReportUtils.d.ts +6 -0
- package/dist/pages/SM-8.11/optimizeReportUtils.js +77 -0
- package/dist/tests/SM-8.11/cluster-management-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/cluster-management-user-flows.spec.js +48 -0
- package/dist/tests/SM-8.11/cluster-variables.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/cluster-variables.spec.js +226 -0
- package/dist/tests/SM-8.11/connectors-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/connectors-user-flows.spec.js +307 -0
- package/dist/tests/SM-8.11/document-handling-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/document-handling-user-flows.spec.js +174 -0
- package/dist/tests/SM-8.11/hto-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/hto-user-flows.spec.js +410 -0
- package/dist/tests/SM-8.11/hub-web-modeler-smoke.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/hub-web-modeler-smoke.spec.js +24 -0
- package/dist/tests/SM-8.11/identity-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/identity-user-flows.spec.js +220 -0
- package/dist/tests/SM-8.11/license-key-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/license-key-user-flows.spec.js +461 -0
- package/dist/tests/SM-8.11/login.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/login.spec.js +24 -0
- package/dist/tests/SM-8.11/migration-path-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/migration-path-user-flows.spec.js +263 -0
- package/dist/tests/SM-8.11/mt-enabled-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/mt-enabled-user-flows.spec.js +607 -0
- package/dist/tests/SM-8.11/optimize-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/optimize-user-flows.spec.js +505 -0
- package/dist/tests/SM-8.11/play.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/play.spec.js +144 -0
- package/dist/tests/SM-8.11/rba-enabled-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/rba-enabled-user-flows.spec.js +712 -0
- package/dist/tests/SM-8.11/smoke-tests.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/smoke-tests.spec.js +167 -0
- package/dist/tests/SM-8.11/test-setup.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/test-setup.spec.js +24 -0
- package/dist/tests/SM-8.11/topology-orchestration-smoke.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/topology-orchestration-smoke.spec.js +58 -0
- package/dist/tests/SM-8.11/web-modeler-user-flows.spec.d.ts +1 -0
- package/dist/tests/SM-8.11/web-modeler-user-flows.spec.js +223 -0
- package/package.json +1 -1
- package/playwright.config.ts +21 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OCIdentityGroupsPage = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
5
|
+
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
class OCIdentityGroupsPage {
|
|
7
|
+
page;
|
|
8
|
+
groupsList;
|
|
9
|
+
createGroupButton;
|
|
10
|
+
editGroupButton;
|
|
11
|
+
deleteGroupButton;
|
|
12
|
+
createGroupModal;
|
|
13
|
+
closeCreateGroupModal;
|
|
14
|
+
createGroupIdField;
|
|
15
|
+
createNameField;
|
|
16
|
+
createDescriptionField;
|
|
17
|
+
createGroupModalCancelButton;
|
|
18
|
+
createGroupModalCreateButton;
|
|
19
|
+
editGroupModal;
|
|
20
|
+
closeEditGroupModal;
|
|
21
|
+
editNameField;
|
|
22
|
+
editDescriptionField;
|
|
23
|
+
editGroupModalCancelButton;
|
|
24
|
+
editGroupModalUpdateButton;
|
|
25
|
+
deleteGroupModal;
|
|
26
|
+
closeDeleteGroupModal;
|
|
27
|
+
deleteGroupModalCancelButton;
|
|
28
|
+
deleteGroupModalDeleteButton;
|
|
29
|
+
emptyState;
|
|
30
|
+
assignUserButton;
|
|
31
|
+
searchBox;
|
|
32
|
+
searchBoxResult;
|
|
33
|
+
assignUserButtonModal;
|
|
34
|
+
selectGroupRow;
|
|
35
|
+
groupCell;
|
|
36
|
+
constructor(page) {
|
|
37
|
+
this.page = page;
|
|
38
|
+
this.groupsList = page.getByRole('table');
|
|
39
|
+
this.selectGroupRow = (name) => this.groupsList.getByRole('row', { name: name });
|
|
40
|
+
this.groupCell = (name) => this.groupsList.getByRole('cell', { name, exact: true });
|
|
41
|
+
this.createGroupButton = page.getByRole('button', {
|
|
42
|
+
name: /Create( a)? group/,
|
|
43
|
+
});
|
|
44
|
+
this.editGroupButton = (rowName) => this.groupsList.getByRole('row', { name: rowName }).getByLabel('Edit');
|
|
45
|
+
this.deleteGroupButton = (rowName) => this.groupsList.getByRole('row', { name: rowName }).getByLabel('Delete');
|
|
46
|
+
this.createGroupModal = page.getByRole('dialog', {
|
|
47
|
+
name: 'Create group',
|
|
48
|
+
});
|
|
49
|
+
this.closeCreateGroupModal = this.createGroupModal.getByRole('button', {
|
|
50
|
+
name: 'Close',
|
|
51
|
+
});
|
|
52
|
+
this.createGroupIdField = this.createGroupModal.getByRole('textbox', {
|
|
53
|
+
name: 'Group ID',
|
|
54
|
+
});
|
|
55
|
+
this.createNameField = this.createGroupModal.getByRole('textbox', {
|
|
56
|
+
name: 'Group name',
|
|
57
|
+
});
|
|
58
|
+
this.createDescriptionField = this.createGroupModal.getByRole('textbox', {
|
|
59
|
+
name: 'Description',
|
|
60
|
+
});
|
|
61
|
+
this.createGroupModalCancelButton = this.createGroupModal.getByRole('button', {
|
|
62
|
+
name: 'Cancel',
|
|
63
|
+
});
|
|
64
|
+
this.createGroupModalCreateButton = this.createGroupModal.getByRole('button', {
|
|
65
|
+
name: 'Create group',
|
|
66
|
+
});
|
|
67
|
+
this.editGroupModal = page.getByRole('dialog', {
|
|
68
|
+
name: 'Edit group',
|
|
69
|
+
});
|
|
70
|
+
this.closeEditGroupModal = this.editGroupModal.getByRole('button', {
|
|
71
|
+
name: 'Close',
|
|
72
|
+
});
|
|
73
|
+
this.editNameField = this.editGroupModal.getByRole('textbox', {
|
|
74
|
+
name: 'Group name',
|
|
75
|
+
});
|
|
76
|
+
this.editDescriptionField = this.editGroupModal.getByRole('textbox', {
|
|
77
|
+
name: 'Description',
|
|
78
|
+
});
|
|
79
|
+
this.editGroupModalCancelButton = this.editGroupModal.getByRole('button', {
|
|
80
|
+
name: 'Cancel',
|
|
81
|
+
});
|
|
82
|
+
this.editGroupModalUpdateButton = this.editGroupModal.getByRole('button', {
|
|
83
|
+
name: 'Edit group',
|
|
84
|
+
});
|
|
85
|
+
this.deleteGroupModal = page.getByRole('dialog', {
|
|
86
|
+
name: 'Delete group',
|
|
87
|
+
});
|
|
88
|
+
this.closeDeleteGroupModal = this.deleteGroupModal.getByRole('button', {
|
|
89
|
+
name: 'Close',
|
|
90
|
+
});
|
|
91
|
+
this.deleteGroupModalCancelButton = this.deleteGroupModal.getByRole('button', {
|
|
92
|
+
name: 'Cancel',
|
|
93
|
+
});
|
|
94
|
+
this.deleteGroupModalDeleteButton = this.deleteGroupModal.getByRole('button', {
|
|
95
|
+
name: 'Delete group',
|
|
96
|
+
});
|
|
97
|
+
this.emptyState = page.getByText('No groups created yet');
|
|
98
|
+
this.assignUserButton = page.getByRole('button', { name: 'Assign user' });
|
|
99
|
+
this.searchBox = page.getByTitle('Username');
|
|
100
|
+
this.searchBoxResult = page.getByRole('listitem');
|
|
101
|
+
this.assignUserButtonModal = page
|
|
102
|
+
.getByLabel('Assign user')
|
|
103
|
+
.getByRole('button', { name: 'Assign user' });
|
|
104
|
+
}
|
|
105
|
+
async createGroup(groupId, groupName, description) {
|
|
106
|
+
await this.createGroupButton.click();
|
|
107
|
+
await this.createGroupIdField.fill(groupId);
|
|
108
|
+
await this.createNameField.fill(groupName);
|
|
109
|
+
if (description) {
|
|
110
|
+
await this.createDescriptionField.fill(description);
|
|
111
|
+
}
|
|
112
|
+
await this.createGroupModalCreateButton.click();
|
|
113
|
+
await (0, test_1.expect)(this.createGroupModal).toBeHidden();
|
|
114
|
+
}
|
|
115
|
+
async editGroup(currentName, newName, newDescription) {
|
|
116
|
+
await this.editGroupButton(currentName).click();
|
|
117
|
+
await (0, test_1.expect)(this.editGroupModal).toBeVisible();
|
|
118
|
+
await this.editNameField.fill(newName);
|
|
119
|
+
if (newDescription) {
|
|
120
|
+
await this.editDescriptionField.fill(newDescription);
|
|
121
|
+
}
|
|
122
|
+
await this.editGroupModalUpdateButton.click();
|
|
123
|
+
await (0, test_1.expect)(this.editGroupModal).toBeHidden();
|
|
124
|
+
}
|
|
125
|
+
async deleteGroup(groupName) {
|
|
126
|
+
await this.deleteGroupButton(groupName).click();
|
|
127
|
+
await (0, test_1.expect)(this.deleteGroupModal).toBeVisible();
|
|
128
|
+
await this.deleteGroupModalDeleteButton.click();
|
|
129
|
+
await (0, test_1.expect)(this.deleteGroupModal).toBeHidden();
|
|
130
|
+
}
|
|
131
|
+
async assertGroupExists(groupName) {
|
|
132
|
+
await (0, test_1.expect)(this.selectGroupRow(groupName)).toBeVisible();
|
|
133
|
+
}
|
|
134
|
+
async clickGroupId(groupName) {
|
|
135
|
+
for (let i = 0; i < 10; i++) {
|
|
136
|
+
try {
|
|
137
|
+
await this.selectGroupRow(groupName).click({ timeout: 15000 });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
await this.page.reload();
|
|
142
|
+
await (0, sleep_1.sleep)(10000);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
throw new Error(`Failed to click group "${groupName}" after 10 attempts`);
|
|
146
|
+
}
|
|
147
|
+
async assignUserToGroup(userName) {
|
|
148
|
+
await this.assignUserButton.click();
|
|
149
|
+
await this.searchBox.fill(userName);
|
|
150
|
+
await this.assignUserButtonModal.click();
|
|
151
|
+
await (0, sleep_1.sleep)(8000);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
exports.OCIdentityGroupsPage = OCIdentityGroupsPage;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Page, Locator } from '@playwright/test';
|
|
2
|
+
declare class OCIdentityHomePage {
|
|
3
|
+
private page;
|
|
4
|
+
readonly groupsTab: Locator;
|
|
5
|
+
readonly adminBanner: Locator;
|
|
6
|
+
readonly mappingRulesTab: Locator;
|
|
7
|
+
readonly tenantsTab: Locator;
|
|
8
|
+
readonly rolesTab: Locator;
|
|
9
|
+
readonly authorizationsTab: Locator;
|
|
10
|
+
readonly clusterVariablesTab: Locator;
|
|
11
|
+
readonly licenseKeyTagNonProduction: Locator;
|
|
12
|
+
readonly licenseKeyTagNonCommercial: Locator;
|
|
13
|
+
readonly licenseKeyTagProduction: Locator;
|
|
14
|
+
readonly licenseKeyTagCommercial: Locator;
|
|
15
|
+
constructor(page: Page);
|
|
16
|
+
clickMappingRulesTab(): Promise<void>;
|
|
17
|
+
clickTenantsTab(): Promise<void>;
|
|
18
|
+
clickAuthorizationsTab(): Promise<void>;
|
|
19
|
+
clickRolesTab(): Promise<void>;
|
|
20
|
+
clickGroupsTab(): Promise<void>;
|
|
21
|
+
clickClusterVariablesTab(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export { OCIdentityHomePage };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OCIdentityHomePage = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
5
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
6
|
+
class OCIdentityHomePage {
|
|
7
|
+
page;
|
|
8
|
+
groupsTab;
|
|
9
|
+
adminBanner;
|
|
10
|
+
mappingRulesTab;
|
|
11
|
+
tenantsTab;
|
|
12
|
+
rolesTab;
|
|
13
|
+
authorizationsTab;
|
|
14
|
+
clusterVariablesTab;
|
|
15
|
+
licenseKeyTagNonProduction;
|
|
16
|
+
licenseKeyTagNonCommercial;
|
|
17
|
+
licenseKeyTagProduction;
|
|
18
|
+
licenseKeyTagCommercial;
|
|
19
|
+
constructor(page) {
|
|
20
|
+
this.page = page;
|
|
21
|
+
this.adminBanner = page
|
|
22
|
+
.getByRole('link', { name: 'Camunda Admin', exact: true })
|
|
23
|
+
.or(page.locator('a').filter({ hasText: /^Camunda logo\s*Admin$/ }))
|
|
24
|
+
.first();
|
|
25
|
+
this.groupsTab = page
|
|
26
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
27
|
+
.getByRole('link', { name: 'Groups', exact: true })
|
|
28
|
+
.or(page
|
|
29
|
+
.getByRole('banner')
|
|
30
|
+
.locator('a')
|
|
31
|
+
.filter({ hasText: /^Groups$/ }))
|
|
32
|
+
.first();
|
|
33
|
+
this.mappingRulesTab = page
|
|
34
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
35
|
+
.getByRole('link', { name: 'Mapping rules', exact: true })
|
|
36
|
+
.or(page
|
|
37
|
+
.getByRole('banner')
|
|
38
|
+
.locator('a')
|
|
39
|
+
.filter({ hasText: /^Mapping rules$/ }))
|
|
40
|
+
.first();
|
|
41
|
+
this.tenantsTab = page
|
|
42
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
43
|
+
.getByRole('link', { name: 'Tenants', exact: true })
|
|
44
|
+
.or(page
|
|
45
|
+
.getByRole('banner')
|
|
46
|
+
.locator('a')
|
|
47
|
+
.filter({ hasText: /^Tenants$/ }))
|
|
48
|
+
.first();
|
|
49
|
+
this.rolesTab = page
|
|
50
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
51
|
+
.getByRole('link', { name: 'Roles', exact: true })
|
|
52
|
+
.or(page
|
|
53
|
+
.getByRole('banner')
|
|
54
|
+
.locator('a')
|
|
55
|
+
.filter({ hasText: /^Roles$/ }))
|
|
56
|
+
.first();
|
|
57
|
+
this.authorizationsTab = page
|
|
58
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
59
|
+
.getByRole('link', { name: 'Authorizations', exact: true })
|
|
60
|
+
.or(page
|
|
61
|
+
.getByRole('banner')
|
|
62
|
+
.locator('a')
|
|
63
|
+
.filter({ hasText: /^Authorizations$/ }))
|
|
64
|
+
.first();
|
|
65
|
+
this.clusterVariablesTab = page
|
|
66
|
+
.getByRole('navigation', { name: 'Main navigation' })
|
|
67
|
+
.getByRole('link', { name: 'Cluster variables', exact: true })
|
|
68
|
+
.or(page
|
|
69
|
+
.getByRole('banner')
|
|
70
|
+
.locator('a')
|
|
71
|
+
.filter({ hasText: /Cluster variables/i }))
|
|
72
|
+
.first();
|
|
73
|
+
this.licenseKeyTagNonProduction = page
|
|
74
|
+
.getByText('Non-production license')
|
|
75
|
+
.first();
|
|
76
|
+
this.licenseKeyTagNonCommercial = page.getByText('Non-commercial license');
|
|
77
|
+
this.licenseKeyTagProduction = page.getByText('Production license').first();
|
|
78
|
+
this.licenseKeyTagCommercial = page.getByText('Commercial license');
|
|
79
|
+
}
|
|
80
|
+
async clickMappingRulesTab() {
|
|
81
|
+
await (0, test_1.expect)(this.mappingRulesTab).toBeVisible({ timeout: 30000 });
|
|
82
|
+
await this.mappingRulesTab.click();
|
|
83
|
+
}
|
|
84
|
+
async clickTenantsTab() {
|
|
85
|
+
await (0, test_1.expect)(this.tenantsTab).toBeVisible({ timeout: 30000 });
|
|
86
|
+
await this.tenantsTab.click();
|
|
87
|
+
}
|
|
88
|
+
async clickAuthorizationsTab() {
|
|
89
|
+
await (0, test_1.expect)(this.authorizationsTab).toBeVisible({ timeout: 30000 });
|
|
90
|
+
await this.authorizationsTab.click();
|
|
91
|
+
}
|
|
92
|
+
async clickRolesTab() {
|
|
93
|
+
// Reload between attempts: the Admin shell can render its branding link
|
|
94
|
+
// (which is all goToOCAdmin waits for) before the nav hydrates, and /admin
|
|
95
|
+
// serves a no-permission view while the user's admin authorization is
|
|
96
|
+
// still propagating. A flat wait on the same DOM can recover from neither.
|
|
97
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.rolesTab, {
|
|
98
|
+
visibilityTimeout: 30000,
|
|
99
|
+
totalTimeout: 120000,
|
|
100
|
+
postAction: async () => {
|
|
101
|
+
await this.page.reload();
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
await this.rolesTab.click({ timeout: 30000 });
|
|
105
|
+
}
|
|
106
|
+
async clickGroupsTab() {
|
|
107
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.groupsTab);
|
|
108
|
+
await this.groupsTab.click({ timeout: 30000 });
|
|
109
|
+
}
|
|
110
|
+
async clickClusterVariablesTab() {
|
|
111
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.clusterVariablesTab);
|
|
112
|
+
await this.clusterVariablesTab.click({ timeout: 30000 });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.OCIdentityHomePage = OCIdentityHomePage;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Page, Locator } from '@playwright/test';
|
|
2
|
+
declare class OCIdentityMappingRulesPage {
|
|
3
|
+
private page;
|
|
4
|
+
readonly mappingRuleCell: (name: string) => Locator;
|
|
5
|
+
readonly mappingRuleRow: (name: string) => Locator;
|
|
6
|
+
readonly deleteMappingRuleDialog: Locator;
|
|
7
|
+
readonly deleteMappingRuleButton: Locator;
|
|
8
|
+
readonly createMappingModal: Locator;
|
|
9
|
+
readonly closeCreateMappingModal: Locator;
|
|
10
|
+
readonly createMappingIdField: Locator;
|
|
11
|
+
readonly createMappingNameField: Locator;
|
|
12
|
+
readonly createMappingClaimNameField: Locator;
|
|
13
|
+
readonly createMappingClaimValueField: Locator;
|
|
14
|
+
readonly createMappingModalCancelButton: Locator;
|
|
15
|
+
readonly createMappingModalCreateButton: Locator;
|
|
16
|
+
readonly createMappingButton: Locator;
|
|
17
|
+
readonly filterTableSearchbox: Locator;
|
|
18
|
+
constructor(page: Page);
|
|
19
|
+
filterTable(name: string): Promise<void>;
|
|
20
|
+
createMappingRule(mappingId: string, mappingName: string, claimName: string, claimValue: string): Promise<void>;
|
|
21
|
+
deleteMappingRule(rule: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export { OCIdentityMappingRulesPage };
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OCIdentityMappingRulesPage = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
5
|
+
const sleep_1 = require("../../utils/sleep");
|
|
6
|
+
class OCIdentityMappingRulesPage {
|
|
7
|
+
page;
|
|
8
|
+
mappingRuleCell;
|
|
9
|
+
mappingRuleRow;
|
|
10
|
+
deleteMappingRuleDialog;
|
|
11
|
+
deleteMappingRuleButton;
|
|
12
|
+
createMappingModal;
|
|
13
|
+
closeCreateMappingModal;
|
|
14
|
+
createMappingIdField;
|
|
15
|
+
createMappingNameField;
|
|
16
|
+
createMappingClaimNameField;
|
|
17
|
+
createMappingClaimValueField;
|
|
18
|
+
createMappingModalCancelButton;
|
|
19
|
+
createMappingModalCreateButton;
|
|
20
|
+
createMappingButton;
|
|
21
|
+
filterTableSearchbox;
|
|
22
|
+
constructor(page) {
|
|
23
|
+
this.page = page;
|
|
24
|
+
this.mappingRuleCell = (name) => page.getByRole('cell', {
|
|
25
|
+
name,
|
|
26
|
+
exact: true,
|
|
27
|
+
});
|
|
28
|
+
this.mappingRuleRow = (name) => page.getByRole('row').filter({ hasText: name });
|
|
29
|
+
this.deleteMappingRuleDialog = page.getByRole('dialog', {
|
|
30
|
+
name: 'Delete Mapping rule',
|
|
31
|
+
});
|
|
32
|
+
// The design-system Admin shell replaced Carbon's table toolbar search
|
|
33
|
+
// (labelled "Filter table") with an input whose aria-label is its
|
|
34
|
+
// placeholder, so match the new shell first and fall back to the legacy
|
|
35
|
+
// one - the same dual-shell pattern the Admin nav locators use.
|
|
36
|
+
this.filterTableSearchbox = page
|
|
37
|
+
.getByRole('searchbox', { name: 'Search by mapping rule ID' })
|
|
38
|
+
.or(page.getByRole('searchbox', { name: 'Filter table' }))
|
|
39
|
+
.first();
|
|
40
|
+
this.deleteMappingRuleButton = this.deleteMappingRuleDialog
|
|
41
|
+
.getByRole('button', {
|
|
42
|
+
name: 'Delete Mapping rule',
|
|
43
|
+
})
|
|
44
|
+
.first();
|
|
45
|
+
// Create mapping modal
|
|
46
|
+
this.createMappingModal = page.getByRole('dialog', {
|
|
47
|
+
name: 'Create new mapping rule',
|
|
48
|
+
});
|
|
49
|
+
this.closeCreateMappingModal = this.createMappingModal.getByRole('button', {
|
|
50
|
+
name: 'Close',
|
|
51
|
+
});
|
|
52
|
+
this.createMappingIdField = this.createMappingModal.getByRole('textbox', {
|
|
53
|
+
name: 'Mapping rule ID',
|
|
54
|
+
});
|
|
55
|
+
this.createMappingNameField = this.createMappingModal.getByRole('textbox', {
|
|
56
|
+
name: 'Mapping rule name',
|
|
57
|
+
});
|
|
58
|
+
this.createMappingClaimNameField = this.createMappingModal.getByRole('textbox', {
|
|
59
|
+
name: 'Claim name',
|
|
60
|
+
});
|
|
61
|
+
this.createMappingClaimValueField = this.createMappingModal.getByRole('textbox', {
|
|
62
|
+
name: 'Claim value',
|
|
63
|
+
});
|
|
64
|
+
this.createMappingModalCancelButton = this.createMappingModal.getByRole('button', {
|
|
65
|
+
name: 'Cancel',
|
|
66
|
+
});
|
|
67
|
+
this.createMappingButton = page.getByRole('button', {
|
|
68
|
+
name: /Create mapping rule/i,
|
|
69
|
+
});
|
|
70
|
+
this.createMappingModalCreateButton = this.createMappingModal.getByRole('button', {
|
|
71
|
+
name: /Create mapping rule/i,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async filterTable(name) {
|
|
75
|
+
await this.filterTableSearchbox.click({ timeout: 60000 });
|
|
76
|
+
await this.filterTableSearchbox.fill(name);
|
|
77
|
+
await this.filterTableSearchbox.press('Enter');
|
|
78
|
+
}
|
|
79
|
+
async createMappingRule(mappingId, mappingName, claimName, claimValue) {
|
|
80
|
+
await (0, test_1.expect)(this.createMappingButton).toBeVisible({
|
|
81
|
+
timeout: 30000,
|
|
82
|
+
});
|
|
83
|
+
await this.createMappingButton.click();
|
|
84
|
+
await (0, test_1.expect)(this.createMappingModal).toBeVisible({
|
|
85
|
+
timeout: 30000,
|
|
86
|
+
});
|
|
87
|
+
await this.createMappingIdField.fill(mappingId);
|
|
88
|
+
await this.createMappingNameField.fill(mappingName);
|
|
89
|
+
await this.createMappingClaimNameField.fill(claimName);
|
|
90
|
+
await this.createMappingClaimValueField.fill(claimValue);
|
|
91
|
+
await this.createMappingModalCreateButton.click({
|
|
92
|
+
timeout: 30000,
|
|
93
|
+
});
|
|
94
|
+
await (0, test_1.expect)(this.createMappingModal).not.toBeVisible({
|
|
95
|
+
timeout: 30000,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async deleteMappingRule(rule) {
|
|
99
|
+
await this.filterTable(rule);
|
|
100
|
+
await (0, sleep_1.sleep)(3000);
|
|
101
|
+
const deleteButtons = this.page.getByRole('button', {
|
|
102
|
+
name: 'Delete',
|
|
103
|
+
exact: true,
|
|
104
|
+
});
|
|
105
|
+
(0, test_1.expect)(await deleteButtons.count()).toEqual(1);
|
|
106
|
+
await deleteButtons.first().click({ timeout: 60000 });
|
|
107
|
+
await (0, test_1.expect)(this.deleteMappingRuleDialog).toBeVisible({
|
|
108
|
+
timeout: 60000,
|
|
109
|
+
});
|
|
110
|
+
await this.deleteMappingRuleButton.click();
|
|
111
|
+
await (0, test_1.expect)(this.page.getByText('Mapping rule deleted')).toBeVisible({
|
|
112
|
+
timeout: 60000,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.OCIdentityMappingRulesPage = OCIdentityMappingRulesPage;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Page, Locator } from '@playwright/test';
|
|
2
|
+
declare class OCIdentityRolesPage {
|
|
3
|
+
private page;
|
|
4
|
+
readonly selectResourceTypeTab: (name: string) => Locator;
|
|
5
|
+
readonly assignMappingRuleButton: Locator;
|
|
6
|
+
readonly mappingSearchBox: Locator;
|
|
7
|
+
readonly mappingSearchTrigger: Locator;
|
|
8
|
+
readonly assignMappingModal: Locator;
|
|
9
|
+
readonly assignMappingRuleOption: (name: string) => Locator;
|
|
10
|
+
readonly assignMappingModalAssignRuleButton: Locator;
|
|
11
|
+
readonly rolesList: Locator;
|
|
12
|
+
readonly roleCell: (name: string) => Locator;
|
|
13
|
+
readonly mappingRuleRow: (name: string) => Locator;
|
|
14
|
+
readonly createRoleButton: Locator;
|
|
15
|
+
readonly createRoleModal: Locator;
|
|
16
|
+
readonly createNameField: Locator;
|
|
17
|
+
readonly createIdField: Locator;
|
|
18
|
+
readonly createRoleModalCreateButton: Locator;
|
|
19
|
+
readonly deleteRoleButton: (rowName?: string) => Locator;
|
|
20
|
+
readonly deleteRoleModal: Locator;
|
|
21
|
+
readonly closeDeleteRoleModal: Locator;
|
|
22
|
+
readonly deleteRoleModalCancelButton: Locator;
|
|
23
|
+
readonly deleteRoleModalDeleteButton: Locator;
|
|
24
|
+
readonly adminRole: Locator;
|
|
25
|
+
readonly rolesNavTab: Locator;
|
|
26
|
+
readonly assignUserButton: Locator;
|
|
27
|
+
readonly usernameTextBox: Locator;
|
|
28
|
+
readonly assignUserSubButton: Locator;
|
|
29
|
+
readonly clientsTab: Locator;
|
|
30
|
+
readonly assignClientsButton: Locator;
|
|
31
|
+
readonly clientIdTextBox: Locator;
|
|
32
|
+
readonly assignClientIdSubButton: Locator;
|
|
33
|
+
readonly notFoundText: Locator;
|
|
34
|
+
constructor(page: Page);
|
|
35
|
+
clickMappingRulesTab(): Promise<void>;
|
|
36
|
+
clickRole(roleID: string): Promise<void>;
|
|
37
|
+
assignMappingRuleToRole(roleId: string, mappingId: string): Promise<void>;
|
|
38
|
+
createRole(role: {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
deleteRole(name: string, options?: {
|
|
43
|
+
throwError?: boolean;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
private isRolesListOpen;
|
|
46
|
+
private openRolesList;
|
|
47
|
+
private recoverToRolesList;
|
|
48
|
+
clickAdminRole(): Promise<void>;
|
|
49
|
+
assignUserToRole(userId: string): Promise<void>;
|
|
50
|
+
clickAssignUserButton(): Promise<void>;
|
|
51
|
+
clickUsernameTextbox(): Promise<void>;
|
|
52
|
+
fillUsernameTextbox(userId: string): Promise<void>;
|
|
53
|
+
clickAssignUserSubButton(): Promise<void>;
|
|
54
|
+
clickClientsTab(): Promise<void>;
|
|
55
|
+
clickAssignClientButton(): Promise<void>;
|
|
56
|
+
clickClientIdTextbox(): Promise<void>;
|
|
57
|
+
fillClientIdTextbox(clientId: string): Promise<void>;
|
|
58
|
+
clickAssignClientIdSubButton(): Promise<void>;
|
|
59
|
+
addClientToRole(clientId: string): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
export { OCIdentityRolesPage };
|