@umbraco/playwright-testhelpers 17.1.0-beta.5 → 17.1.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/helpers/BaseApiHelper.d.ts +19 -0
- package/dist/lib/helpers/BaseApiHelper.js +87 -0
- package/dist/lib/helpers/BaseApiHelper.js.map +1 -0
- package/dist/lib/helpers/ConstantHelper.d.ts +0 -17
- package/dist/lib/helpers/ConstantHelper.js +0 -17
- package/dist/lib/helpers/ConstantHelper.js.map +1 -1
- package/dist/lib/helpers/ContentRenderUiHelper.js +3 -3
- package/dist/lib/helpers/ContentRenderUiHelper.js.map +1 -1
- package/dist/lib/helpers/ContentUiHelper.js +487 -353
- package/dist/lib/helpers/ContentUiHelper.js.map +1 -1
- package/dist/lib/helpers/CurrentUserProfileUiHelper.js +10 -4
- package/dist/lib/helpers/CurrentUserProfileUiHelper.js.map +1 -1
- package/dist/lib/helpers/DataTypeApiHelper.d.ts +9 -21
- package/dist/lib/helpers/DataTypeApiHelper.js +32 -125
- package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/DataTypeUiHelper.js +332 -193
- package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/DictionaryApiHelper.d.ts +8 -15
- package/dist/lib/helpers/DictionaryApiHelper.js +49 -77
- package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
- package/dist/lib/helpers/DictionaryUiHelper.js +23 -17
- package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +7 -13
- package/dist/lib/helpers/DocumentBlueprintApiHelper.js +44 -69
- package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentBlueprintUiHelper.js +10 -8
- package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +4 -18
- package/dist/lib/helpers/DocumentTypeApiHelper.js +4 -134
- package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentTypeUiHelper.js +34 -22
- package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/ExamineManagementUiHelper.js +6 -5
- package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -1
- package/dist/lib/helpers/FormsUiHelper.js +159 -119
- package/dist/lib/helpers/FormsUiHelper.js.map +1 -1
- package/dist/lib/helpers/HealthCheckUiHelper.js +7 -7
- package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -1
- package/dist/lib/helpers/LanguageApiHelper.d.ts +10 -12
- package/dist/lib/helpers/LanguageApiHelper.js +34 -35
- package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
- package/dist/lib/helpers/LanguageUiHelper.js +19 -16
- package/dist/lib/helpers/LanguageUiHelper.js.map +1 -1
- package/dist/lib/helpers/LogViewerUiHelper.js +31 -22
- package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -1
- package/dist/lib/helpers/LoginUiHelper.js +7 -4
- package/dist/lib/helpers/LoginUiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaTypeApiHelper.d.ts +4 -18
- package/dist/lib/helpers/MediaTypeApiHelper.js +4 -134
- package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaTypeUiHelper.js +17 -11
- package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaUiHelper.js +45 -36
- package/dist/lib/helpers/MediaUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberApiHelper.d.ts +4 -12
- package/dist/lib/helpers/MemberApiHelper.js +6 -54
- package/dist/lib/helpers/MemberApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberGroupApiHelper.d.ts +6 -11
- package/dist/lib/helpers/MemberGroupApiHelper.js +20 -35
- package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberGroupUiHelper.js +16 -13
- package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberTypeApiHelper.d.ts +5 -12
- package/dist/lib/helpers/MemberTypeApiHelper.js +16 -49
- package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberTypeUiHelper.js +3 -2
- package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberUiHelper.js +43 -25
- package/dist/lib/helpers/MemberUiHelper.js.map +1 -1
- package/dist/lib/helpers/ModelsBuilderUiHelper.js +3 -2
- package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -1
- package/dist/lib/helpers/PackageApiHelper.d.ts +5 -4
- package/dist/lib/helpers/PackageApiHelper.js +47 -75
- package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
- package/dist/lib/helpers/PackageUiHelper.js +36 -30
- package/dist/lib/helpers/PackageUiHelper.js.map +1 -1
- package/dist/lib/helpers/PartialViewApiHelper.d.ts +5 -20
- package/dist/lib/helpers/PartialViewApiHelper.js +12 -146
- package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
- package/dist/lib/helpers/PartialViewUiHelper.js +17 -14
- package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -1
- package/dist/lib/helpers/PathBasedTreeApiHelper.d.ts +32 -0
- package/dist/lib/helpers/PathBasedTreeApiHelper.js +164 -0
- package/dist/lib/helpers/PathBasedTreeApiHelper.js.map +1 -0
- package/dist/lib/helpers/ProfilingUiHelper.js +5 -3
- package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -1
- package/dist/lib/helpers/PublishedStatusUiHelper.js +8 -7
- package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -1
- package/dist/lib/helpers/RedirectManagementUiHelper.js +12 -7
- package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -1
- package/dist/lib/helpers/RelationTypeApiHelper.d.ts +7 -12
- package/dist/lib/helpers/RelationTypeApiHelper.js +28 -49
- package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/RelationTypeUiHelper.js +16 -13
- package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/ScriptApiHelper.d.ts +6 -22
- package/dist/lib/helpers/ScriptApiHelper.js +12 -165
- package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
- package/dist/lib/helpers/ScriptUiHelper.js +13 -9
- package/dist/lib/helpers/ScriptUiHelper.js.map +1 -1
- package/dist/lib/helpers/StylesheetApiHelper.d.ts +5 -20
- package/dist/lib/helpers/StylesheetApiHelper.js +13 -154
- package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
- package/dist/lib/helpers/StylesheetUiHelper.js +14 -9
- package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
- package/dist/lib/helpers/TelemetryDataUiHelper.js +3 -2
- package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -1
- package/dist/lib/helpers/TemplateApiHelper.d.ts +8 -15
- package/dist/lib/helpers/TemplateApiHelper.js +51 -83
- package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
- package/dist/lib/helpers/TemplateUiHelper.js +25 -19
- package/dist/lib/helpers/TemplateUiHelper.js.map +1 -1
- package/dist/lib/helpers/TreeApiHelper.d.ts +15 -0
- package/dist/lib/helpers/TreeApiHelper.js +116 -0
- package/dist/lib/helpers/TreeApiHelper.js.map +1 -0
- package/dist/lib/helpers/UiBaseLocators.d.ts +228 -230
- package/dist/lib/helpers/UiBaseLocators.js +871 -832
- package/dist/lib/helpers/UiBaseLocators.js.map +1 -1
- package/dist/lib/helpers/UserGroupApiHelper.d.ts +3 -13
- package/dist/lib/helpers/UserGroupApiHelper.js +3 -69
- package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
- package/dist/lib/helpers/UserGroupUiHelper.js +49 -32
- package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -1
- package/dist/lib/helpers/UserUiHelper.js +46 -43
- package/dist/lib/helpers/UserUiHelper.js.map +1 -1
- package/dist/lib/helpers/VariantBasedApiHelper.d.ts +23 -0
- package/dist/lib/helpers/VariantBasedApiHelper.js +81 -0
- package/dist/lib/helpers/VariantBasedApiHelper.js.map +1 -0
- package/dist/lib/helpers/WebhookApiHelper.d.ts +1 -0
- package/dist/lib/helpers/WebhookApiHelper.js +10 -11
- package/dist/lib/helpers/WebhookApiHelper.js.map +1 -1
- package/dist/lib/helpers/WebhookUiHelper.js +27 -11
- package/dist/lib/helpers/WebhookUiHelper.js.map +1 -1
- package/dist/lib/helpers/WelcomeDashboardUiHelper.js +1 -1
- package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -1
- package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js +9 -4
- package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js.map +1 -1
- package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js +10 -5
- package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js.map +1 -1
- package/dist/lib/helpers/index.d.ts +4 -1
- package/dist/lib/helpers/index.js +9 -3
- package/dist/lib/helpers/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/lib/helpers/BasePage.d.ts +0 -449
- package/dist/lib/helpers/BasePage.js +0 -547
- package/dist/lib/helpers/BasePage.js.map +0 -1
|
@@ -72,63 +72,65 @@ class UserUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
72
72
|
this.goToProfileBtn = page.getByLabel('Go to profile', { exact: true });
|
|
73
73
|
}
|
|
74
74
|
async clickUsersButton() {
|
|
75
|
-
await
|
|
75
|
+
await (0, test_1.expect)(this.usersBtn).toBeVisible();
|
|
76
|
+
await this.usersBtn.click();
|
|
76
77
|
}
|
|
77
78
|
async clickCreateUserButton() {
|
|
78
|
-
await this.click(
|
|
79
|
-
await this.page.waitForTimeout(
|
|
79
|
+
await this.createUserBtn.click();
|
|
80
|
+
await this.page.waitForTimeout(500);
|
|
80
81
|
}
|
|
81
82
|
async enterNameOfTheUser(name) {
|
|
82
|
-
await this.
|
|
83
|
+
await this.nameOfTheUserTxt.fill(name);
|
|
83
84
|
}
|
|
84
85
|
async enterUserEmail(email) {
|
|
85
|
-
await this.
|
|
86
|
+
await this.userEmailTxt.fill(email);
|
|
86
87
|
}
|
|
87
88
|
async waitForUserToBeCreated() {
|
|
88
|
-
await this.waitForLoadState();
|
|
89
|
+
await this.page.waitForLoadState();
|
|
89
90
|
}
|
|
90
91
|
async waitForUserToBeDeleted() {
|
|
91
|
-
await this.waitForLoadState();
|
|
92
|
+
await this.page.waitForLoadState();
|
|
92
93
|
}
|
|
93
94
|
async waitForUserToBeRenamed() {
|
|
94
|
-
await this.waitForLoadState();
|
|
95
|
+
await this.page.waitForLoadState();
|
|
95
96
|
}
|
|
96
97
|
async clickAddUserGroupsButton() {
|
|
97
|
-
await this.click(
|
|
98
|
+
await this.addUserGroupsBtn.click();
|
|
98
99
|
// This wait is necessary to avoid the click on the user group button to be ignored
|
|
99
|
-
await this.page.waitForTimeout(
|
|
100
|
+
await this.page.waitForTimeout(200);
|
|
100
101
|
}
|
|
101
102
|
async clickChooseUserGroupsButton() {
|
|
102
|
-
await this.click(
|
|
103
|
+
await this.chooseUserGroupsBtn.click();
|
|
103
104
|
}
|
|
104
105
|
async clickOpenUserGroupsButton() {
|
|
105
|
-
await this.click(
|
|
106
|
+
await this.openUserGroupsBtn.click();
|
|
106
107
|
}
|
|
107
108
|
async enterUpdatedNameOfUser(name) {
|
|
108
|
-
await this.
|
|
109
|
+
await this.updatedNameOfTheUserTxt.fill(name);
|
|
109
110
|
}
|
|
110
111
|
async clickUserWithName(name) {
|
|
111
112
|
const userNameLocator = this.page.locator('#open-part').getByText(name, { exact: true });
|
|
112
|
-
await
|
|
113
|
+
await (0, test_1.expect)(userNameLocator).toBeVisible();
|
|
114
|
+
await userNameLocator.click();
|
|
113
115
|
}
|
|
114
116
|
async clickChangePasswordButton() {
|
|
115
|
-
await this.click(
|
|
117
|
+
await this.changePasswordBtn.click();
|
|
116
118
|
}
|
|
117
119
|
async updatePassword(newPassword) {
|
|
118
120
|
await this.newPasswordTxt.fill(newPassword);
|
|
119
121
|
await this.confirmPasswordTxt.fill(newPassword);
|
|
120
122
|
}
|
|
121
123
|
async isUserVisible(name, isVisible = true) {
|
|
122
|
-
return await
|
|
124
|
+
return await (0, test_1.expect)(this.page.getByText(name, { exact: true })).toBeVisible({ visible: isVisible });
|
|
123
125
|
}
|
|
124
126
|
async clickChangePhotoButton() {
|
|
125
|
-
await this.click(
|
|
127
|
+
await this.changePhotoBtn.click();
|
|
126
128
|
}
|
|
127
129
|
async clickRemoveButtonForUserGroupWithName(userGroupName) {
|
|
128
|
-
await this.
|
|
130
|
+
await this.page.locator('umb-user-group-ref', { hasText: userGroupName }).locator('[label="Remove"]').click();
|
|
129
131
|
}
|
|
130
132
|
async clickRemovePhotoButton() {
|
|
131
|
-
await this.click(
|
|
133
|
+
await this.removePhotoBtn.click();
|
|
132
134
|
}
|
|
133
135
|
async changePhotoWithFileChooser(filePath) {
|
|
134
136
|
const fileChooserPromise = this.page.waitForEvent('filechooser');
|
|
@@ -142,7 +144,7 @@ class UserUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
142
144
|
async doesUserSectionContainUserAmount(amount) {
|
|
143
145
|
let userCount = 0;
|
|
144
146
|
while (true) {
|
|
145
|
-
await this.page.waitForTimeout(
|
|
147
|
+
await this.page.waitForTimeout(1000);
|
|
146
148
|
userCount += await this.userSectionCard.count();
|
|
147
149
|
// Check if pagination exists and next button is enabled
|
|
148
150
|
const nextButton = this.nextPaginationBtn;
|
|
@@ -161,22 +163,22 @@ class UserUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
161
163
|
const firstPage = this.firstPaginationBtn;
|
|
162
164
|
const isFirstPageEnabled = await firstPage.isEnabled();
|
|
163
165
|
if (isFirstPageEnabled) {
|
|
164
|
-
await
|
|
166
|
+
await firstPage.click();
|
|
165
167
|
}
|
|
166
|
-
await this.page.waitForTimeout(
|
|
168
|
+
await this.page.waitForTimeout(1000);
|
|
167
169
|
}
|
|
168
170
|
return (0, test_1.expect)(userCount).toBe(amount);
|
|
169
171
|
}
|
|
170
172
|
async doesUserSectionContainUserWithText(name) {
|
|
171
|
-
await
|
|
173
|
+
return await (0, test_1.expect)(this.userGrid).toContainText(name);
|
|
172
174
|
}
|
|
173
175
|
async filterByStatusName(statusName) {
|
|
174
|
-
await this.click(
|
|
175
|
-
await this.
|
|
176
|
+
await this.statusBtn.click();
|
|
177
|
+
await this.page.locator('label').filter({ hasText: statusName }).click();
|
|
176
178
|
}
|
|
177
179
|
async filterByGroupName(groupName) {
|
|
178
|
-
await this.click(
|
|
179
|
-
await this.
|
|
180
|
+
await this.groupBtn.click();
|
|
181
|
+
await this.page.locator('label').filter({ hasText: groupName }).click();
|
|
180
182
|
}
|
|
181
183
|
async isPasswordUpdatedForUserWithId(userId) {
|
|
182
184
|
await Promise.all([
|
|
@@ -185,46 +187,47 @@ class UserUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
185
187
|
]);
|
|
186
188
|
}
|
|
187
189
|
async clickChooseContainerButton() {
|
|
188
|
-
await this.click(
|
|
190
|
+
await this.chooseContainerBtn.click();
|
|
189
191
|
}
|
|
190
192
|
async selectUserLanguage(language) {
|
|
191
193
|
await this.languageBtn.selectOption(language, { force: true });
|
|
192
194
|
}
|
|
193
195
|
async clickRemoveButtonForContentNodeWithName(name) {
|
|
194
|
-
|
|
195
|
-
await this.
|
|
196
|
+
await this.entityItem.filter({ has: this.page.locator('[name="' + name + '"]') }).hover();
|
|
197
|
+
await this.entityItem.filter({ has: this.page.locator('[name="' + name + '"]') }).getByRole('button', { name: 'Remove' }).click({ force: true });
|
|
196
198
|
}
|
|
197
199
|
async clickRemoveButtonForMediaNodeWithName(name) {
|
|
198
|
-
await this.
|
|
200
|
+
await this.mediaInput.locator('[name="' + name + '"]').locator('[label="Remove"]').click();
|
|
199
201
|
}
|
|
200
202
|
async clickAllowAccessToAllDocumentsToggle() {
|
|
201
|
-
await this.click(
|
|
203
|
+
await this.allowAccessToAllDocumentsToggle.click();
|
|
202
204
|
}
|
|
203
205
|
async clickAllowAccessToAllMediaToggle() {
|
|
204
|
-
await this.click(
|
|
206
|
+
await this.allowAccessToAllMediaToggle.click();
|
|
205
207
|
}
|
|
206
208
|
async isUserDisabledTextVisible() {
|
|
207
|
-
await
|
|
209
|
+
return await (0, test_1.expect)(this.disabledTxt).toBeVisible();
|
|
208
210
|
}
|
|
209
211
|
async isUserActiveTextVisible() {
|
|
210
|
-
await
|
|
212
|
+
return await (0, test_1.expect)(this.activeTxt).toBeVisible();
|
|
211
213
|
}
|
|
212
214
|
async orderByNewestUser() {
|
|
215
|
+
await (0, test_1.expect)(this.orderByBtn).toBeVisible();
|
|
213
216
|
// Force click is needed
|
|
214
|
-
await this.click(
|
|
215
|
-
await this.click(
|
|
217
|
+
await this.orderByBtn.click({ force: true });
|
|
218
|
+
await this.orderByNewestBtn.click();
|
|
216
219
|
}
|
|
217
220
|
async isUserWithNameTheFirstUserInList(name) {
|
|
218
221
|
await (0, test_1.expect)(this.userSectionCard.first()).toContainText(name);
|
|
219
222
|
}
|
|
220
223
|
async doesUserHaveAccessToContentNode(name) {
|
|
221
|
-
await
|
|
224
|
+
return await (0, test_1.expect)(this.documentStartNode.locator('[name="' + name + '"]')).toBeVisible();
|
|
222
225
|
}
|
|
223
226
|
async doesUserHaveAccessToMediaNode(name) {
|
|
224
|
-
await
|
|
227
|
+
return await (0, test_1.expect)(this.mediaStartNode.locator('[name="' + name + '"]')).toBeVisible();
|
|
225
228
|
}
|
|
226
229
|
async clickUsersMenu() {
|
|
227
|
-
await this.click(
|
|
230
|
+
await this.usersMenu.click();
|
|
228
231
|
}
|
|
229
232
|
async goToUsers() {
|
|
230
233
|
await this.goToSection(ConstantHelper_1.ConstantHelper.sections.users);
|
|
@@ -237,13 +240,13 @@ class UserUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
237
240
|
await this.clickUserWithName(name);
|
|
238
241
|
}
|
|
239
242
|
async clickUserButton() {
|
|
240
|
-
await this.click(
|
|
243
|
+
await this.userBtn.click();
|
|
241
244
|
}
|
|
242
245
|
async isGoToProfileButtonVisible(isVisible = true) {
|
|
243
|
-
await
|
|
246
|
+
await (0, test_1.expect)(this.goToProfileBtn).toBeVisible({ visible: isVisible });
|
|
244
247
|
}
|
|
245
248
|
async clickAPIUserButton() {
|
|
246
|
-
await this.click(
|
|
249
|
+
await this.apiUserBtn.click();
|
|
247
250
|
}
|
|
248
251
|
}
|
|
249
252
|
exports.UserUiHelper = UserUiHelper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/UserUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {expect, Locator, Page} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class UserUiHelper extends UiBaseLocators {\n private readonly usersBtn: Locator;\n private readonly createUserBtn: Locator;\n private readonly nameOfTheUserTxt: Locator;\n private readonly userEmailTxt: Locator;\n private readonly addUserGroupsBtn: Locator;\n private readonly openUserGroupsBtn: Locator;\n private readonly updatedNameOfTheUserTxt: Locator;\n private readonly changePasswordBtn: Locator;\n private readonly changePhotoBtn: Locator;\n private readonly removePhotoBtn: Locator;\n private readonly searchInUserSectionTxt: Locator;\n private readonly userSectionCard: Locator;\n private readonly statusBtn: Locator;\n private readonly groupBtn: Locator;\n private readonly chooseUserGroupsBtn: Locator;\n private readonly allowAccessToAllDocumentsToggle: Locator;\n private readonly allowAccessToAllMediaToggle: Locator;\n private readonly mediaInput: Locator;\n private readonly chooseContainerBtn: Locator;\n private readonly languageBtn: Locator;\n private readonly disabledTxt: Locator;\n private readonly activeTxt: Locator;\n private readonly orderByBtn: Locator;\n private readonly orderByNewestBtn: Locator;\n private readonly documentStartNode: Locator;\n private readonly mediaStartNode: Locator;\n private readonly usersMenu: Locator;\n private readonly userBtn: Locator;\n private readonly userGrid: Locator;\n private readonly apiUserBtn: Locator;\n private readonly goToProfileBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.usersBtn = page.getByLabel('Users');\n this.createUserBtn = page.getByLabel('Create user');\n this.nameOfTheUserTxt = page.getByLabel('name', {exact: true});\n this.userEmailTxt = page.getByLabel('email');\n this.addUserGroupsBtn = page.locator('#userGroups').getByLabel('open', {exact: true});\n this.openUserGroupsBtn = page.locator('[label=\"Groups\"]').getByLabel('open', {exact: true});\n this.chooseUserGroupsBtn = page.locator('umb-user-group-input').getByLabel('Choose');\n this.updatedNameOfTheUserTxt = page.locator('umb-workspace-header-name-editable').locator('input');\n this.changePasswordBtn = page.getByLabel('Change your password');\n this.changePhotoBtn = page.getByLabel('Change photo');\n this.removePhotoBtn = page.getByLabel('Remove photo');\n this.searchInUserSectionTxt = page.locator('umb-collection-filter-field #input');\n this.userSectionCard = page.locator('uui-card-user');\n this.statusBtn = page.locator('uui-button', {hasText: 'Status'});\n this.groupBtn = page.locator('uui-button', {hasText: 'Groups'});\n this.allowAccessToAllDocumentsToggle = page.locator('umb-property-layout').filter({hasText: 'Allow access to all documents'}).locator('#toggle');\n this.allowAccessToAllMediaToggle = page.locator('umb-property-layout').filter({hasText: 'Allow access to all media'}).locator('#toggle');\n this.mediaInput = page.locator('umb-input-media');\n this.chooseContainerBtn = page.locator('#container').getByLabel('Choose');\n this.languageBtn = page.locator('[label=\"UI Culture\"] select');\n this.disabledTxt = page.getByText('Disabled', {exact: true});\n this.activeTxt = page.getByText('Active', {exact: true});\n this.orderByBtn = page.getByLabel('order by');\n this.orderByNewestBtn = page.getByLabel('Newest');\n this.documentStartNode = page.locator('umb-user-document-start-node');\n this.mediaStartNode = page.locator('umb-user-media-start-node');\n this.usersMenu = page.locator('umb-menu').getByLabel('Users', {exact: true});\n this.userBtn = page.locator('#collection-action-menu-popover').getByLabel('User', {exact: true});\n this.userGrid = page.locator('#card-grid');\n this.apiUserBtn = page.locator('#collection-action-menu-popover').getByLabel('API User', {exact: true});\n this.goToProfileBtn = page.getByLabel('Go to profile', {exact: true});\n }\n\n async clickUsersButton() {\n await this.click(this.usersBtn);\n }\n\n async clickCreateUserButton() {\n await this.click(this.createUserBtn);\n await this.page.waitForTimeout(ConstantHelper.wait.short);\n }\n\n async enterNameOfTheUser(name: string) {\n await this.enterText(this.nameOfTheUserTxt, name);\n }\n\n async enterUserEmail(email: string) {\n await this.enterText(this.userEmailTxt, email);\n }\n\n async waitForUserToBeCreated() {\n await this.waitForLoadState();\n }\n\n async waitForUserToBeDeleted() {\n await this.waitForLoadState();\n }\n\n async waitForUserToBeRenamed() {\n await this.waitForLoadState();\n }\n \n async clickAddUserGroupsButton() {\n await this.click(this.addUserGroupsBtn);\n // This wait is necessary to avoid the click on the user group button to be ignored\n await this.page.waitForTimeout(ConstantHelper.wait.minimal);\n }\n\n async clickChooseUserGroupsButton() {\n await this.click(this.chooseUserGroupsBtn);\n }\n\n async clickOpenUserGroupsButton() {\n await this.click(this.openUserGroupsBtn);\n }\n\n async enterUpdatedNameOfUser(name: string) {\n await this.enterText(this.updatedNameOfTheUserTxt, name);\n }\n\n async clickUserWithName(name: string) {\n const userNameLocator = this.page.locator('#open-part').getByText(name, {exact: true});\n await this.click(userNameLocator);\n }\n\n async clickChangePasswordButton() {\n await this.click(this.changePasswordBtn);\n }\n\n async updatePassword(newPassword: string) {\n await this.newPasswordTxt.fill(newPassword);\n await this.confirmPasswordTxt.fill(newPassword);\n }\n\n async isUserVisible(name: string, isVisible = true) {\n return await this.isVisible(this.page.getByText(name, {exact: true}), isVisible);\n }\n\n async clickChangePhotoButton() {\n await this.click(this.changePhotoBtn);\n }\n\n async clickRemoveButtonForUserGroupWithName(userGroupName: string) {\n await this.click(this.page.locator('umb-user-group-ref', {hasText: userGroupName}).locator('[label=\"Remove\"]'));\n }\n\n async clickRemovePhotoButton() {\n await this.click(this.removePhotoBtn);\n }\n\n async changePhotoWithFileChooser(filePath: string) {\n const fileChooserPromise = this.page.waitForEvent('filechooser');\n await this.clickChangePhotoButton();\n const fileChooser = await fileChooserPromise;\n await fileChooser.setFiles(filePath);\n }\n\n async searchInUserSection(name: string) {\n await this.searchInUserSectionTxt.fill(name);\n }\n\n async doesUserSectionContainUserAmount(amount: number) {\n let userCount = 0;\n\n while (true) {\n await this.page.waitForTimeout(ConstantHelper.wait.medium);\n userCount += await this.userSectionCard.count();\n\n // Check if pagination exists and next button is enabled\n const nextButton = this.nextPaginationBtn;\n const nextButtonExists = await nextButton.count() > 0;\n\n if (!nextButtonExists) {\n break; // No pagination at all\n }\n\n const isNextEnabled = await nextButton.isEnabled();\n if (!isNextEnabled) {\n break;\n }\n\n await this.clickNextPaginationButton();\n }\n\n // If we actually navigated through the pagination, we should go back\n if (amount > 50) {\n const firstPage = this.firstPaginationBtn;\n const isFirstPageEnabled = await firstPage.isEnabled();\n if (isFirstPageEnabled) {\n await this.click(firstPage);\n }\n\n await this.page.waitForTimeout(ConstantHelper.wait.medium);\n }\n\n return expect(userCount).toBe(amount);\n }\n\n async doesUserSectionContainUserWithText(name: string) {\n await this.containsText(this.userGrid, name);\n }\n\n async filterByStatusName(statusName: string) {\n await this.click(this.statusBtn);\n await this.click(this.page.locator('label').filter({hasText: statusName}));\n }\n\n async filterByGroupName(groupName: string) {\n await this.click(this.groupBtn);\n await this.click(this.page.locator('label').filter({hasText: groupName}));\n }\n\n async isPasswordUpdatedForUserWithId(userId: string) {\n await Promise.all([\n this.page.waitForResponse(resp => resp.url().includes(umbracoConfig.environment.baseUrl + '/umbraco/management/api/v1/user/' + userId + '/change-password') && resp.status() === 200),\n await this.clickConfirmButton()\n ]);\n }\n\n async clickChooseContainerButton() {\n await this.click(this.chooseContainerBtn);\n }\n\n async selectUserLanguage(language: string) {\n await this.languageBtn.selectOption(language, {force: true});\n }\n\n async clickRemoveButtonForContentNodeWithName(name: string) {\n const entityItemLocator = this.entityItem.filter({has: this.page.locator(`[name=\"${name}\"]`)});\n await this.hoverAndClick(entityItemLocator, entityItemLocator.getByRole('button', {name: 'Remove'}), {force: true});\n }\n\n async clickRemoveButtonForMediaNodeWithName(name: string) {\n await this.click(this.mediaInput.locator(`[name=\"${name}\"]`).locator('[label=\"Remove\"]'));\n }\n\n async clickAllowAccessToAllDocumentsToggle() {\n await this.click(this.allowAccessToAllDocumentsToggle);\n }\n\n async clickAllowAccessToAllMediaToggle() {\n await this.click(this.allowAccessToAllMediaToggle);\n }\n\n async isUserDisabledTextVisible() {\n await this.waitForVisible(this.disabledTxt);\n }\n\n async isUserActiveTextVisible() {\n await this.waitForVisible(this.activeTxt);\n }\n\n async orderByNewestUser() {\n // Force click is needed\n await this.click(this.orderByBtn, {force: true});\n await this.click(this.orderByNewestBtn);\n }\n\n async isUserWithNameTheFirstUserInList(name: string) {\n await expect(this.userSectionCard.first()).toContainText(name);\n }\n\n async doesUserHaveAccessToContentNode(name: string) {\n await this.isVisible(this.documentStartNode.locator(`[name=\"${name}\"]`));\n }\n\n async doesUserHaveAccessToMediaNode(name: string) {\n await this.isVisible(this.mediaStartNode.locator(`[name=\"${name}\"]`));\n }\n\n async clickUsersMenu() {\n await this.click(this.usersMenu);\n }\n\n async goToUsers() {\n await this.goToSection(ConstantHelper.sections.users);\n await this.clickUsersMenu();\n }\n\n async goToUserWithName(name: string) {\n await this.goToSection(ConstantHelper.sections.users);\n await this.clickUsersMenu();\n await this.searchInUserSection(name);\n await this.clickUserWithName(name);\n }\n \n async clickUserButton() {\n await this.click(this.userBtn);\n }\n\n async isGoToProfileButtonVisible(isVisible: boolean = true) {\n await this.isVisible(this.goToProfileBtn, isVisible);\n }\n\n async clickAPIUserButton() {\n await this.click(this.apiUserBtn);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"UserUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/UserUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {expect, Locator, Page} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class UserUiHelper extends UiBaseLocators {\n private readonly usersBtn: Locator;\n private readonly createUserBtn: Locator;\n private readonly nameOfTheUserTxt: Locator;\n private readonly userEmailTxt: Locator;\n private readonly addUserGroupsBtn: Locator;\n private readonly openUserGroupsBtn: Locator;\n private readonly updatedNameOfTheUserTxt: Locator;\n private readonly changePasswordBtn: Locator;\n private readonly changePhotoBtn: Locator;\n private readonly removePhotoBtn: Locator;\n private readonly searchInUserSectionTxt: Locator;\n private readonly userSectionCard: Locator;\n private readonly statusBtn: Locator;\n private readonly groupBtn: Locator;\n private readonly chooseUserGroupsBtn: Locator;\n private readonly allowAccessToAllDocumentsToggle: Locator;\n private readonly allowAccessToAllMediaToggle: Locator;\n private readonly mediaInput: Locator;\n private readonly chooseContainerBtn: Locator;\n private readonly languageBtn: Locator;\n private readonly disabledTxt: Locator;\n private readonly activeTxt: Locator;\n private readonly orderByBtn: Locator;\n private readonly orderByNewestBtn: Locator;\n private readonly documentStartNode: Locator;\n private readonly mediaStartNode: Locator;\n private readonly usersMenu: Locator;\n private readonly userBtn: Locator;\n private readonly userGrid: Locator;\n private readonly apiUserBtn: Locator;\n private readonly goToProfileBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.usersBtn = page.getByLabel('Users');\n this.createUserBtn = page.getByLabel('Create user');\n this.nameOfTheUserTxt = page.getByLabel('name', {exact: true});\n this.userEmailTxt = page.getByLabel('email');\n this.addUserGroupsBtn = page.locator('#userGroups').getByLabel('open', {exact: true});\n this.openUserGroupsBtn = page.locator('[label=\"Groups\"]').getByLabel('open', {exact: true});\n this.chooseUserGroupsBtn = page.locator('umb-user-group-input').getByLabel('Choose');\n this.updatedNameOfTheUserTxt = page.locator('umb-workspace-header-name-editable').locator('input');\n this.changePasswordBtn = page.getByLabel('Change your password');\n this.changePhotoBtn = page.getByLabel('Change photo');\n this.removePhotoBtn = page.getByLabel('Remove photo');\n this.searchInUserSectionTxt = page.locator('umb-collection-filter-field #input');\n this.userSectionCard = page.locator('uui-card-user');\n this.statusBtn = page.locator('uui-button', {hasText: 'Status'});\n this.groupBtn = page.locator('uui-button', {hasText: 'Groups'});\n this.allowAccessToAllDocumentsToggle = page.locator('umb-property-layout').filter({hasText: 'Allow access to all documents'}).locator('#toggle');\n this.allowAccessToAllMediaToggle = page.locator('umb-property-layout').filter({hasText: 'Allow access to all media'}).locator('#toggle');\n this.mediaInput = page.locator('umb-input-media');\n this.chooseContainerBtn = page.locator('#container').getByLabel('Choose');\n this.languageBtn = page.locator('[label=\"UI Culture\"] select');\n this.disabledTxt = page.getByText('Disabled', {exact: true});\n this.activeTxt = page.getByText('Active', {exact: true});\n this.orderByBtn = page.getByLabel('order by');\n this.orderByNewestBtn = page.getByLabel('Newest');\n this.documentStartNode = page.locator('umb-user-document-start-node');\n this.mediaStartNode = page.locator('umb-user-media-start-node');\n this.usersMenu = page.locator('umb-menu').getByLabel('Users', {exact: true});\n this.userBtn = page.locator('#collection-action-menu-popover').getByLabel('User', {exact: true});\n this.userGrid = page.locator('#card-grid');\n this.apiUserBtn = page.locator('#collection-action-menu-popover').getByLabel('API User', {exact: true});\n this.goToProfileBtn = page.getByLabel('Go to profile', {exact: true});\n }\n\n async clickUsersButton() {\n await expect(this.usersBtn).toBeVisible();\n await this.usersBtn.click();\n }\n\n async clickCreateUserButton() {\n await this.createUserBtn.click();\n await this.page.waitForTimeout(500);\n }\n\n async enterNameOfTheUser(name: string) {\n await this.nameOfTheUserTxt.fill(name);\n }\n\n async enterUserEmail(email: string) {\n await this.userEmailTxt.fill(email);\n }\n\n async waitForUserToBeCreated() {\n await this.page.waitForLoadState();\n }\n\n async waitForUserToBeDeleted() {\n await this.page.waitForLoadState();\n }\n\n async waitForUserToBeRenamed() {\n await this.page.waitForLoadState();\n }\n \n async clickAddUserGroupsButton() {\n await this.addUserGroupsBtn.click();\n // This wait is necessary to avoid the click on the user group button to be ignored\n await this.page.waitForTimeout(200);\n }\n\n async clickChooseUserGroupsButton() {\n await this.chooseUserGroupsBtn.click();\n }\n\n async clickOpenUserGroupsButton() {\n await this.openUserGroupsBtn.click();\n }\n\n async enterUpdatedNameOfUser(name: string) {\n await this.updatedNameOfTheUserTxt.fill(name);\n }\n\n async clickUserWithName(name: string) {\n const userNameLocator = this.page.locator('#open-part').getByText(name, {exact: true});\n await expect(userNameLocator).toBeVisible();\n await userNameLocator.click();\n }\n\n async clickChangePasswordButton() {\n await this.changePasswordBtn.click();\n }\n\n async updatePassword(newPassword: string) {\n await this.newPasswordTxt.fill(newPassword);\n await this.confirmPasswordTxt.fill(newPassword);\n }\n\n async isUserVisible(name: string, isVisible = true) {\n return await expect(this.page.getByText(name, {exact: true})).toBeVisible({visible: isVisible});\n }\n\n async clickChangePhotoButton() {\n await this.changePhotoBtn.click();\n }\n\n async clickRemoveButtonForUserGroupWithName(userGroupName: string) {\n await this.page.locator('umb-user-group-ref', {hasText: userGroupName}).locator('[label=\"Remove\"]').click();\n }\n\n async clickRemovePhotoButton() {\n await this.removePhotoBtn.click();\n }\n\n async changePhotoWithFileChooser(filePath: string) {\n const fileChooserPromise = this.page.waitForEvent('filechooser');\n await this.clickChangePhotoButton();\n const fileChooser = await fileChooserPromise;\n await fileChooser.setFiles(filePath);\n }\n\n async searchInUserSection(name: string) {\n await this.searchInUserSectionTxt.fill(name);\n }\n\n async doesUserSectionContainUserAmount(amount: number) {\n let userCount = 0;\n\n while (true) {\n await this.page.waitForTimeout(1000);\n userCount += await this.userSectionCard.count();\n\n // Check if pagination exists and next button is enabled\n const nextButton = this.nextPaginationBtn;\n const nextButtonExists = await nextButton.count() > 0;\n\n if (!nextButtonExists) {\n break; // No pagination at all\n }\n\n const isNextEnabled = await nextButton.isEnabled();\n if (!isNextEnabled) {\n break;\n }\n\n await this.clickNextPaginationButton();\n }\n \n // If we actually navigated through the pagination, we should go back\n if (amount > 50) {\n const firstPage = this.firstPaginationBtn;\n const isFirstPageEnabled = await firstPage.isEnabled();\n if (isFirstPageEnabled) {\n await firstPage.click();\n }\n\n await this.page.waitForTimeout(1000);\n }\n \n return expect(userCount).toBe(amount);\n }\n\n async doesUserSectionContainUserWithText(name: string) {\n return await expect(this.userGrid).toContainText(name);\n }\n\n async filterByStatusName(statusName: string) {\n await this.statusBtn.click();\n await this.page.locator('label').filter({hasText: statusName}).click();\n }\n\n async filterByGroupName(groupName: string) {\n await this.groupBtn.click();\n await this.page.locator('label').filter({hasText: groupName}).click();\n }\n\n async isPasswordUpdatedForUserWithId(userId: string) {\n await Promise.all([\n this.page.waitForResponse(resp => resp.url().includes(umbracoConfig.environment.baseUrl + '/umbraco/management/api/v1/user/' + userId + '/change-password') && resp.status() === 200),\n await this.clickConfirmButton()\n ]);\n }\n\n async clickChooseContainerButton() {\n await this.chooseContainerBtn.click();\n }\n\n async selectUserLanguage(language: string) {\n await this.languageBtn.selectOption(language, {force: true});\n }\n\n async clickRemoveButtonForContentNodeWithName(name: string) {\n await this.entityItem.filter({has: this.page.locator('[name=\"' + name + '\"]')}).hover();\n await this.entityItem.filter({has: this.page.locator('[name=\"' + name + '\"]')}).getByRole('button', { name: 'Remove' }).click({force: true});\n }\n\n async clickRemoveButtonForMediaNodeWithName(name: string) {\n await this.mediaInput.locator('[name=\"' + name + '\"]').locator('[label=\"Remove\"]').click();\n }\n\n async clickAllowAccessToAllDocumentsToggle() {\n await this.allowAccessToAllDocumentsToggle.click();\n }\n\n async clickAllowAccessToAllMediaToggle() {\n await this.allowAccessToAllMediaToggle.click();\n }\n\n async isUserDisabledTextVisible() {\n return await expect(this.disabledTxt).toBeVisible();\n }\n\n async isUserActiveTextVisible() {\n return await expect(this.activeTxt).toBeVisible();\n }\n\n async orderByNewestUser() {\n await expect(this.orderByBtn).toBeVisible();\n // Force click is needed\n await this.orderByBtn.click({force: true});\n await this.orderByNewestBtn.click();\n }\n\n async isUserWithNameTheFirstUserInList(name: string) {\n await expect(this.userSectionCard.first()).toContainText(name);\n }\n\n async doesUserHaveAccessToContentNode(name: string) {\n return await expect(this.documentStartNode.locator('[name=\"' + name + '\"]')).toBeVisible();\n }\n\n async doesUserHaveAccessToMediaNode(name: string) {\n return await expect(this.mediaStartNode.locator('[name=\"' + name + '\"]')).toBeVisible();\n }\n\n async clickUsersMenu() {\n await this.usersMenu.click();\n }\n\n async goToUsers() {\n await this.goToSection(ConstantHelper.sections.users);\n await this.clickUsersMenu();\n }\n\n async goToUserWithName(name: string) {\n await this.goToSection(ConstantHelper.sections.users);\n await this.clickUsersMenu();\n await this.searchInUserSection(name);\n await this.clickUserWithName(name);\n }\n \n async clickUserButton() {\n await this.userBtn.click();\n }\n \n async isGoToProfileButtonVisible(isVisible: boolean = true) {\n await expect(this.goToProfileBtn).toBeVisible({visible: isVisible});\n }\n\n async clickAPIUserButton() {\n await this.apiUserBtn.click();\n }\n}"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ApiHelpers } from "./ApiHelpers";
|
|
2
|
+
/**
|
|
3
|
+
* Base class for resources that use variants for name (Member, Document, Media).
|
|
4
|
+
* These resources have `variants[0].name` instead of direct `name` property.
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class VariantBasedApiHelper {
|
|
7
|
+
api: ApiHelpers;
|
|
8
|
+
protected abstract resourcePath: string;
|
|
9
|
+
protected abstract filterPath: string;
|
|
10
|
+
constructor(api: ApiHelpers);
|
|
11
|
+
protected buildUrl(path?: string): string;
|
|
12
|
+
protected buildFilterUrl(path?: string): string;
|
|
13
|
+
protected extractIdFromLocation(response: any, splitPattern?: string): string;
|
|
14
|
+
protected getItemName(item: any): string;
|
|
15
|
+
get(id: string): Promise<any>;
|
|
16
|
+
delete(id: string): Promise<number | undefined>;
|
|
17
|
+
create(data: any): Promise<string | undefined>;
|
|
18
|
+
doesExist(id: string): Promise<boolean>;
|
|
19
|
+
getAll(): Promise<any>;
|
|
20
|
+
getByName(name: string): Promise<any>;
|
|
21
|
+
doesNameExist(name: string): Promise<any>;
|
|
22
|
+
ensureNameNotExists(name: string): Promise<any>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VariantBasedApiHelper = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base class for resources that use variants for name (Member, Document, Media).
|
|
6
|
+
* These resources have `variants[0].name` instead of direct `name` property.
|
|
7
|
+
*/
|
|
8
|
+
class VariantBasedApiHelper {
|
|
9
|
+
api;
|
|
10
|
+
constructor(api) {
|
|
11
|
+
this.api = api;
|
|
12
|
+
}
|
|
13
|
+
// === URL Builder ===
|
|
14
|
+
buildUrl(path = '') {
|
|
15
|
+
return `${this.api.baseUrl}/umbraco/management/api/v1/${this.resourcePath}${path}`;
|
|
16
|
+
}
|
|
17
|
+
buildFilterUrl(path = '') {
|
|
18
|
+
return `${this.api.baseUrl}/umbraco/management/api/v1/${this.filterPath}${path}`;
|
|
19
|
+
}
|
|
20
|
+
// === Utility Methods ===
|
|
21
|
+
extractIdFromLocation(response, splitPattern) {
|
|
22
|
+
const pattern = splitPattern || "/";
|
|
23
|
+
return response.headers().location.split(pattern).pop();
|
|
24
|
+
}
|
|
25
|
+
// Get name from item - override if needed
|
|
26
|
+
getItemName(item) {
|
|
27
|
+
return item.variants?.[0]?.name ?? item.name;
|
|
28
|
+
}
|
|
29
|
+
// === CRUD Operations ===
|
|
30
|
+
async get(id) {
|
|
31
|
+
const response = await this.api.get(this.buildUrl('/' + id));
|
|
32
|
+
return await response.json();
|
|
33
|
+
}
|
|
34
|
+
async delete(id) {
|
|
35
|
+
if (id == null)
|
|
36
|
+
return;
|
|
37
|
+
const response = await this.api.delete(this.buildUrl('/' + id));
|
|
38
|
+
return response.status();
|
|
39
|
+
}
|
|
40
|
+
async create(data) {
|
|
41
|
+
if (data == null)
|
|
42
|
+
return;
|
|
43
|
+
const response = await this.api.post(this.buildUrl(), data);
|
|
44
|
+
return this.extractIdFromLocation(response, `v1/${this.resourcePath}/`);
|
|
45
|
+
}
|
|
46
|
+
async doesExist(id) {
|
|
47
|
+
const response = await this.api.get(this.buildUrl('/' + id));
|
|
48
|
+
return response.status() === 200;
|
|
49
|
+
}
|
|
50
|
+
// === List Operations ===
|
|
51
|
+
async getAll() {
|
|
52
|
+
return await this.api.get(this.buildFilterUrl('?skip=0&take=10000'));
|
|
53
|
+
}
|
|
54
|
+
// === Search & Check ===
|
|
55
|
+
async getByName(name) {
|
|
56
|
+
const response = await this.getAll();
|
|
57
|
+
const json = await response.json();
|
|
58
|
+
for (const item of json.items) {
|
|
59
|
+
if (this.getItemName(item) === name) {
|
|
60
|
+
return await this.get(item.id);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
async doesNameExist(name) {
|
|
66
|
+
return await this.getByName(name);
|
|
67
|
+
}
|
|
68
|
+
// === Cleanup ===
|
|
69
|
+
async ensureNameNotExists(name) {
|
|
70
|
+
const response = await this.getAll();
|
|
71
|
+
const json = await response.json();
|
|
72
|
+
for (const item of json.items) {
|
|
73
|
+
if (this.getItemName(item) === name) {
|
|
74
|
+
return await this.delete(item.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.VariantBasedApiHelper = VariantBasedApiHelper;
|
|
81
|
+
//# sourceMappingURL=VariantBasedApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VariantBasedApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/VariantBasedApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\n/**\n * Base class for resources that use variants for name (Member, Document, Media).\n * These resources have `variants[0].name` instead of direct `name` property.\n */\nexport abstract class VariantBasedApiHelper {\n api: ApiHelpers;\n protected abstract resourcePath: string;\n protected abstract filterPath: string;\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n // === URL Builder ===\n protected buildUrl(path: string = ''): string {\n return `${this.api.baseUrl}/umbraco/management/api/v1/${this.resourcePath}${path}`;\n }\n\n protected buildFilterUrl(path: string = ''): string {\n return `${this.api.baseUrl}/umbraco/management/api/v1/${this.filterPath}${path}`;\n }\n\n // === Utility Methods ===\n protected extractIdFromLocation(response: any, splitPattern?: string): string {\n const pattern = splitPattern || \"/\";\n return response.headers().location.split(pattern).pop();\n }\n\n // Get name from item - override if needed\n protected getItemName(item: any): string {\n return item.variants?.[0]?.name ?? item.name;\n }\n\n // === CRUD Operations ===\n async get(id: string): Promise<any> {\n const response = await this.api.get(this.buildUrl('/' + id));\n return await response.json();\n }\n\n async delete(id: string): Promise<number | undefined> {\n if (id == null) return;\n const response = await this.api.delete(this.buildUrl('/' + id));\n return response.status();\n }\n\n async create(data: any): Promise<string | undefined> {\n if (data == null) return;\n const response = await this.api.post(this.buildUrl(), data);\n return this.extractIdFromLocation(response, `v1/${this.resourcePath}/`);\n }\n\n async doesExist(id: string): Promise<boolean> {\n const response = await this.api.get(this.buildUrl('/' + id));\n return response.status() === 200;\n }\n\n // === List Operations ===\n async getAll(): Promise<any> {\n return await this.api.get(this.buildFilterUrl('?skip=0&take=10000'));\n }\n\n // === Search & Check ===\n async getByName(name: string): Promise<any> {\n const response = await this.getAll();\n const json = await response.json();\n\n for (const item of json.items) {\n if (this.getItemName(item) === name) {\n return await this.get(item.id);\n }\n }\n return false;\n }\n\n async doesNameExist(name: string): Promise<any> {\n return await this.getByName(name);\n }\n\n // === Cleanup ===\n async ensureNameNotExists(name: string): Promise<any> {\n const response = await this.getAll();\n const json = await response.json();\n\n for (const item of json.items) {\n if (this.getItemName(item) === name) {\n return await this.delete(item.id);\n }\n }\n return null;\n }\n}\n"]}
|
|
@@ -5,6 +5,7 @@ export declare class WebhookApiHelper {
|
|
|
5
5
|
page: Page;
|
|
6
6
|
webhookSiteUrl: string;
|
|
7
7
|
constructor(api: ApiHelpers, page: Page);
|
|
8
|
+
private buildUrl;
|
|
8
9
|
get(id: string): Promise<any>;
|
|
9
10
|
doesExist(id: string): Promise<boolean>;
|
|
10
11
|
create(webhookData: any): Promise<string | undefined>;
|
|
@@ -12,34 +12,33 @@ class WebhookApiHelper {
|
|
|
12
12
|
this.api = api;
|
|
13
13
|
this.page = page;
|
|
14
14
|
}
|
|
15
|
+
buildUrl(path = '') {
|
|
16
|
+
return `${this.api.baseUrl}/umbraco/management/api/v1/webhook${path}`;
|
|
17
|
+
}
|
|
15
18
|
async get(id) {
|
|
16
|
-
const response = await this.api.get(this.
|
|
19
|
+
const response = await this.api.get(this.buildUrl('/' + id));
|
|
17
20
|
const json = await response.json();
|
|
18
|
-
|
|
19
|
-
return json;
|
|
20
|
-
}
|
|
21
|
-
return null;
|
|
21
|
+
return json !== null ? json : null;
|
|
22
22
|
}
|
|
23
23
|
async doesExist(id) {
|
|
24
|
-
const response = await this.get(this.
|
|
24
|
+
const response = await this.api.get(this.buildUrl('/' + id));
|
|
25
25
|
return response.status() === 200;
|
|
26
26
|
}
|
|
27
27
|
async create(webhookData) {
|
|
28
28
|
if (webhookData == null) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
const response = await this.api.post(this.
|
|
32
|
-
// Returns the id of the created webhook
|
|
31
|
+
const response = await this.api.post(this.buildUrl(), webhookData);
|
|
33
32
|
return response.headers().location.split("/").pop();
|
|
34
33
|
}
|
|
35
34
|
async delete(id) {
|
|
36
|
-
return await this.api.delete(this.
|
|
35
|
+
return await this.api.delete(this.buildUrl('/' + id));
|
|
37
36
|
}
|
|
38
37
|
async update(webhook) {
|
|
39
|
-
return await this.api.put(this.
|
|
38
|
+
return await this.api.put(this.buildUrl('/'), webhook);
|
|
40
39
|
}
|
|
41
40
|
async getAll() {
|
|
42
|
-
return await this.api.get(this.
|
|
41
|
+
return await this.api.get(this.buildUrl('?pageSize=50&skip=0&take=10000'));
|
|
43
42
|
}
|
|
44
43
|
async doesNameExist(name) {
|
|
45
44
|
return await this.getByName(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebhookApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/WebhookApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {expect, Page} from \"@playwright/test\";\nimport {ApiHelpers} from \"./ApiHelpers\";\nimport {WebhookBuilder} from \"@umbraco/json-models-builders\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class WebhookApiHelper {\n api: ApiHelpers;\n page: Page;\n webhookSiteUrl: string = 'https://webhook.site/';\n\n constructor(api: ApiHelpers, page: Page) {\n this.api = api;\n this.page = page;\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async doesExist(id: string) {\n const response = await this.get(this.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);\n return response.status() === 200;\n }\n\n async create(webhookData) {\n if (webhookData == null) {\n return;\n }\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/webhook', webhookData);\n // Returns the id of the created webhook\n return response.headers().location.split(\"/\").pop();\n }\n\n async delete(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);\n }\n\n async update(webhook: object) {\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/webhook/', webhook);\n }\n\n async getAll() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/webhook?pageSize=50&skip=0&take=10000');\n }\n\n async doesNameExist(name: string) {\n return await this.getByName(name);\n }\n\n async getByName(name: string) {\n const allWebhooks = await this.getAll();\n const jsonWebhooks = await allWebhooks.json();\n\n for (const webhook of jsonWebhooks.items) {\n if (webhook.name === name) {\n return await this.get(webhook.id);\n }\n }\n return null;\n }\n\n async ensureNameNotExists(name: string) {\n const allWebhooks = await this.getAll();\n const jsonWebhooks = await allWebhooks.json();\n\n for (const webhook of jsonWebhooks.items) {\n if (webhook.name === name) {\n return await this.delete(webhook.id);\n }\n }\n return null;\n }\n\n async generateWebhookSiteToken() {\n const createWebhookResponse = await this.page.request.post(this.webhookSiteUrl + 'token', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const webhookData = await createWebhookResponse.json();\n const webhookToken = webhookData.uuid;\n return webhookToken;\n }\n\n async getWebhookSiteRequestResponse(webhookSiteToken: string, timeoutMs: number = 15000, pollInterval: number = 1000) {\n const requestUrl = this.webhookSiteUrl + 'token/' + webhookSiteToken + '/requests';\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n const requestResponse = await this.page.request.get(requestUrl, {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const requestJson = await requestResponse.json();\n if (requestJson.total > 0) {\n return requestJson.data;\n }\n \n // Polling again if there is no webhook received yet\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n return null;\n }\n\n async doesWebhookHaveEvent(webhookName: string, eventName: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.events.find(event => event.eventName === eventName);\n }\n\n async doesWebhookHaveContentTypeId(webhookName: string, contentTypeId: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.contentTypeKeys.includes(contentTypeId);\n }\n\n async doesWebhookHaveHeader(webhookName: string, headerName: string, headerValue: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.headers[headerName] === headerValue;\n }\n\n async doesWebhookHaveUrl(webhookName: string, url: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.url === url;\n }\n\n async isWebhookEnabled(webhookName: string, isEnabled: boolean = true) {\n const webhookData = await this.getByName(webhookName);\n return expect(webhookData.enabled).toBe(isEnabled);\n }\n\n async getEventTypeValue(eventName: string) {\n const eventData = ConstantHelper.webhookEvents.find(event => event.eventName === eventName);\n return eventData?.eventType || '';\n }\n\n async getEventAliasValue(eventName: string) {\n const eventData = ConstantHelper.webhookEvents.find(event => event.eventName === eventName);\n return eventData?.alias || '';\n }\n\n async createDefaultWebhook(webhookName: string, webhookSiteToken: string, eventName: string = 'Content Published', isEnabled: boolean = true) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withEnabled(isEnabled)\n .build();\n\n return await this.create(webhook);\n }\n\n async createWebhookForSpecificContentType(webhookName: string, webhookSiteToken: string, eventName: string, contentTypeName: string) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n const eventType = await this.getEventTypeValue(eventName);\n let contentTypeData;\n if (eventType == 'Content') {\n contentTypeData = await this.api.documentType.getByName(contentTypeName);\n } else {\n contentTypeData = await this.api.mediaType.getByName(contentTypeName);\n }\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withContentTypeKey(contentTypeData.id)\n .build();\n\n return await this.create(webhook);\n }\n\n async createWebhookWithHeader(webhookName: string, webhookSiteToken: string, eventName: string, headerName: string, headerValue: string) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withHeader(headerName, headerValue)\n .build();\n\n return await this.create(webhook);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"WebhookApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/WebhookApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {expect, Page} from \"@playwright/test\";\nimport {ApiHelpers} from \"./ApiHelpers\";\nimport {WebhookBuilder} from \"@umbraco/json-models-builders\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class WebhookApiHelper {\n api: ApiHelpers;\n page: Page;\n webhookSiteUrl: string = 'https://webhook.site/';\n\n constructor(api: ApiHelpers, page: Page) {\n this.api = api;\n this.page = page;\n }\n\n private buildUrl(path: string = ''): string {\n return `${this.api.baseUrl}/umbraco/management/api/v1/webhook${path}`;\n }\n\n async get(id: string) {\n const response = await this.api.get(this.buildUrl('/' + id));\n const json = await response.json();\n return json !== null ? json : null;\n }\n\n async doesExist(id: string) {\n const response = await this.api.get(this.buildUrl('/' + id));\n return response.status() === 200;\n }\n\n async create(webhookData) {\n if (webhookData == null) {\n return;\n }\n const response = await this.api.post(this.buildUrl(), webhookData);\n return response.headers().location.split(\"/\").pop();\n }\n\n async delete(id: string) {\n return await this.api.delete(this.buildUrl('/' + id));\n }\n\n async update(webhook: object) {\n return await this.api.put(this.buildUrl('/'), webhook);\n }\n\n async getAll() {\n return await this.api.get(this.buildUrl('?pageSize=50&skip=0&take=10000'));\n }\n\n async doesNameExist(name: string) {\n return await this.getByName(name);\n }\n\n async getByName(name: string) {\n const allWebhooks = await this.getAll();\n const jsonWebhooks = await allWebhooks.json();\n\n for (const webhook of jsonWebhooks.items) {\n if (webhook.name === name) {\n return await this.get(webhook.id);\n }\n }\n return null;\n }\n\n async ensureNameNotExists(name: string) {\n const allWebhooks = await this.getAll();\n const jsonWebhooks = await allWebhooks.json();\n\n for (const webhook of jsonWebhooks.items) {\n if (webhook.name === name) {\n return await this.delete(webhook.id);\n }\n }\n return null;\n }\n\n async generateWebhookSiteToken() {\n const createWebhookResponse = await this.page.request.post(this.webhookSiteUrl + 'token', {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const webhookData = await createWebhookResponse.json();\n const webhookToken = webhookData.uuid;\n return webhookToken;\n }\n\n async getWebhookSiteRequestResponse(webhookSiteToken: string, timeoutMs: number = 15000, pollInterval: number = 1000) {\n const requestUrl = this.webhookSiteUrl + 'token/' + webhookSiteToken + '/requests';\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n const requestResponse = await this.page.request.get(requestUrl, {\n headers: {\n 'Accept': 'application/json'\n }\n });\n const requestJson = await requestResponse.json();\n if (requestJson.total > 0) {\n return requestJson.data;\n }\n \n // Polling again if there is no webhook received yet\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n return null;\n }\n\n async doesWebhookHaveEvent(webhookName: string, eventName: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.events.find(event => event.eventName === eventName);\n }\n\n async doesWebhookHaveContentTypeId(webhookName: string, contentTypeId: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.contentTypeKeys.includes(contentTypeId);\n }\n\n async doesWebhookHaveHeader(webhookName: string, headerName: string, headerValue: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.headers[headerName] === headerValue;\n }\n\n async doesWebhookHaveUrl(webhookName: string, url: string) {\n const webhookData = await this.getByName(webhookName);\n return webhookData.url === url;\n }\n\n async isWebhookEnabled(webhookName: string, isEnabled: boolean = true) {\n const webhookData = await this.getByName(webhookName);\n return expect(webhookData.enabled).toBe(isEnabled);\n }\n\n async getEventTypeValue(eventName: string) {\n const eventData = ConstantHelper.webhookEvents.find(event => event.eventName === eventName);\n return eventData?.eventType || '';\n }\n\n async getEventAliasValue(eventName: string) {\n const eventData = ConstantHelper.webhookEvents.find(event => event.eventName === eventName);\n return eventData?.alias || '';\n }\n\n async createDefaultWebhook(webhookName: string, webhookSiteToken: string, eventName: string = 'Content Published', isEnabled: boolean = true) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withEnabled(isEnabled)\n .build();\n\n return await this.create(webhook);\n }\n\n async createWebhookForSpecificContentType(webhookName: string, webhookSiteToken: string, eventName: string, contentTypeName: string) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n const eventType = await this.getEventTypeValue(eventName);\n let contentTypeData;\n if (eventType == 'Content') {\n contentTypeData = await this.api.documentType.getByName(contentTypeName);\n } else {\n contentTypeData = await this.api.mediaType.getByName(contentTypeName);\n }\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withContentTypeKey(contentTypeData.id)\n .build();\n\n return await this.create(webhook);\n }\n\n async createWebhookWithHeader(webhookName: string, webhookSiteToken: string, eventName: string, headerName: string, headerValue: string) {\n await this.ensureNameNotExists(webhookName);\n const webhookUrl = this.webhookSiteUrl + webhookSiteToken;\n const eventAlias = await this.getEventAliasValue(eventName);\n\n const webhook = new WebhookBuilder()\n .withName(webhookName)\n .withUrl(webhookUrl)\n .withEventAlias(eventAlias)\n .withHeader(headerName, headerValue)\n .build();\n\n return await this.create(webhook);\n }\n}"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WebhookUiHelper = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
4
5
|
const UiBaseLocators_1 = require("./UiBaseLocators");
|
|
5
6
|
const ConstantHelper_1 = require("./ConstantHelper");
|
|
6
7
|
class WebhookUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
@@ -38,38 +39,53 @@ class WebhookUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
38
39
|
await this.clickTextButtonWithName(name);
|
|
39
40
|
}
|
|
40
41
|
async clickWebhookCreateButton() {
|
|
41
|
-
await
|
|
42
|
+
await (0, test_1.expect)(this.webhookCreateBtn).toBeVisible();
|
|
43
|
+
await this.webhookCreateBtn.click();
|
|
42
44
|
}
|
|
43
45
|
async enterWebhookName(name) {
|
|
44
|
-
await
|
|
46
|
+
await (0, test_1.expect)(this.webhookNameTxt).toBeVisible();
|
|
47
|
+
await this.webhookNameTxt.clear();
|
|
48
|
+
await this.webhookNameTxt.fill(name);
|
|
45
49
|
}
|
|
46
50
|
async enterUrl(url) {
|
|
47
|
-
await
|
|
51
|
+
await (0, test_1.expect)(this.urlTxt).toBeVisible();
|
|
52
|
+
await this.urlTxt.clear();
|
|
53
|
+
await this.urlTxt.fill(url);
|
|
48
54
|
}
|
|
49
55
|
async clickChooseEventButton() {
|
|
50
|
-
await
|
|
56
|
+
await (0, test_1.expect)(this.chooseEventBtn).toBeVisible();
|
|
57
|
+
await this.chooseEventBtn.click();
|
|
51
58
|
}
|
|
52
59
|
async clickChooseContentTypeButton() {
|
|
53
|
-
await
|
|
60
|
+
await (0, test_1.expect)(this.chooseContentTypeBtn).toBeVisible();
|
|
61
|
+
await this.chooseContentTypeBtn.click();
|
|
54
62
|
}
|
|
55
63
|
async clickEnabledToggleButton() {
|
|
56
|
-
await
|
|
64
|
+
await (0, test_1.expect)(this.enabledToggle).toBeVisible();
|
|
65
|
+
await this.enabledToggle.click();
|
|
57
66
|
}
|
|
58
67
|
async clickAddHeadersButton() {
|
|
59
|
-
await
|
|
68
|
+
await (0, test_1.expect)(this.addHeadersBtn).toBeVisible();
|
|
69
|
+
await this.addHeadersBtn.click();
|
|
60
70
|
}
|
|
61
71
|
async enterHeaderName(name) {
|
|
62
|
-
await
|
|
72
|
+
await (0, test_1.expect)(this.headerNameTxt).toBeVisible();
|
|
73
|
+
await this.headerNameTxt.clear();
|
|
74
|
+
await this.headerNameTxt.fill(name);
|
|
63
75
|
}
|
|
64
76
|
async enterHeaderValue(value) {
|
|
65
|
-
await
|
|
77
|
+
await (0, test_1.expect)(this.headerValueTxt).toBeVisible();
|
|
78
|
+
await this.headerValueTxt.clear();
|
|
79
|
+
await this.headerValueTxt.fill(value);
|
|
66
80
|
}
|
|
67
81
|
async clickDeleteWebhookWithName(name) {
|
|
68
82
|
const deleteLocator = this.page.locator('uui-table-row').filter({ has: this.page.getByText(name, { exact: true }) }).locator(this.deleteWebhookEntityAction);
|
|
69
|
-
await
|
|
83
|
+
await (0, test_1.expect)(deleteLocator).toBeVisible();
|
|
84
|
+
await deleteLocator.click();
|
|
70
85
|
}
|
|
71
86
|
async clickHeaderRemoveButton() {
|
|
72
|
-
await
|
|
87
|
+
await (0, test_1.expect)(this.headerRemoveBtn).toBeVisible();
|
|
88
|
+
await this.headerRemoveBtn.click();
|
|
73
89
|
}
|
|
74
90
|
}
|
|
75
91
|
exports.WebhookUiHelper = WebhookUiHelper;
|