@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.
Files changed (147) hide show
  1. package/dist/lib/helpers/BaseApiHelper.d.ts +19 -0
  2. package/dist/lib/helpers/BaseApiHelper.js +87 -0
  3. package/dist/lib/helpers/BaseApiHelper.js.map +1 -0
  4. package/dist/lib/helpers/ConstantHelper.d.ts +0 -17
  5. package/dist/lib/helpers/ConstantHelper.js +0 -17
  6. package/dist/lib/helpers/ConstantHelper.js.map +1 -1
  7. package/dist/lib/helpers/ContentRenderUiHelper.js +3 -3
  8. package/dist/lib/helpers/ContentRenderUiHelper.js.map +1 -1
  9. package/dist/lib/helpers/ContentUiHelper.js +487 -353
  10. package/dist/lib/helpers/ContentUiHelper.js.map +1 -1
  11. package/dist/lib/helpers/CurrentUserProfileUiHelper.js +10 -4
  12. package/dist/lib/helpers/CurrentUserProfileUiHelper.js.map +1 -1
  13. package/dist/lib/helpers/DataTypeApiHelper.d.ts +9 -21
  14. package/dist/lib/helpers/DataTypeApiHelper.js +32 -125
  15. package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
  16. package/dist/lib/helpers/DataTypeUiHelper.js +332 -193
  17. package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -1
  18. package/dist/lib/helpers/DictionaryApiHelper.d.ts +8 -15
  19. package/dist/lib/helpers/DictionaryApiHelper.js +49 -77
  20. package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
  21. package/dist/lib/helpers/DictionaryUiHelper.js +23 -17
  22. package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -1
  23. package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +7 -13
  24. package/dist/lib/helpers/DocumentBlueprintApiHelper.js +44 -69
  25. package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -1
  26. package/dist/lib/helpers/DocumentBlueprintUiHelper.js +10 -8
  27. package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -1
  28. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +4 -18
  29. package/dist/lib/helpers/DocumentTypeApiHelper.js +4 -134
  30. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -1
  31. package/dist/lib/helpers/DocumentTypeUiHelper.js +34 -22
  32. package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -1
  33. package/dist/lib/helpers/ExamineManagementUiHelper.js +6 -5
  34. package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -1
  35. package/dist/lib/helpers/FormsUiHelper.js +159 -119
  36. package/dist/lib/helpers/FormsUiHelper.js.map +1 -1
  37. package/dist/lib/helpers/HealthCheckUiHelper.js +7 -7
  38. package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -1
  39. package/dist/lib/helpers/LanguageApiHelper.d.ts +10 -12
  40. package/dist/lib/helpers/LanguageApiHelper.js +34 -35
  41. package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
  42. package/dist/lib/helpers/LanguageUiHelper.js +19 -16
  43. package/dist/lib/helpers/LanguageUiHelper.js.map +1 -1
  44. package/dist/lib/helpers/LogViewerUiHelper.js +31 -22
  45. package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -1
  46. package/dist/lib/helpers/LoginUiHelper.js +7 -4
  47. package/dist/lib/helpers/LoginUiHelper.js.map +1 -1
  48. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +4 -18
  49. package/dist/lib/helpers/MediaTypeApiHelper.js +4 -134
  50. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -1
  51. package/dist/lib/helpers/MediaTypeUiHelper.js +17 -11
  52. package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -1
  53. package/dist/lib/helpers/MediaUiHelper.js +45 -36
  54. package/dist/lib/helpers/MediaUiHelper.js.map +1 -1
  55. package/dist/lib/helpers/MemberApiHelper.d.ts +4 -12
  56. package/dist/lib/helpers/MemberApiHelper.js +6 -54
  57. package/dist/lib/helpers/MemberApiHelper.js.map +1 -1
  58. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +6 -11
  59. package/dist/lib/helpers/MemberGroupApiHelper.js +20 -35
  60. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -1
  61. package/dist/lib/helpers/MemberGroupUiHelper.js +16 -13
  62. package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -1
  63. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +5 -12
  64. package/dist/lib/helpers/MemberTypeApiHelper.js +16 -49
  65. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -1
  66. package/dist/lib/helpers/MemberTypeUiHelper.js +3 -2
  67. package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -1
  68. package/dist/lib/helpers/MemberUiHelper.js +43 -25
  69. package/dist/lib/helpers/MemberUiHelper.js.map +1 -1
  70. package/dist/lib/helpers/ModelsBuilderUiHelper.js +3 -2
  71. package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -1
  72. package/dist/lib/helpers/PackageApiHelper.d.ts +5 -4
  73. package/dist/lib/helpers/PackageApiHelper.js +47 -75
  74. package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
  75. package/dist/lib/helpers/PackageUiHelper.js +36 -30
  76. package/dist/lib/helpers/PackageUiHelper.js.map +1 -1
  77. package/dist/lib/helpers/PartialViewApiHelper.d.ts +5 -20
  78. package/dist/lib/helpers/PartialViewApiHelper.js +12 -146
  79. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
  80. package/dist/lib/helpers/PartialViewUiHelper.js +17 -14
  81. package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -1
  82. package/dist/lib/helpers/PathBasedTreeApiHelper.d.ts +32 -0
  83. package/dist/lib/helpers/PathBasedTreeApiHelper.js +164 -0
  84. package/dist/lib/helpers/PathBasedTreeApiHelper.js.map +1 -0
  85. package/dist/lib/helpers/ProfilingUiHelper.js +5 -3
  86. package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -1
  87. package/dist/lib/helpers/PublishedStatusUiHelper.js +8 -7
  88. package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -1
  89. package/dist/lib/helpers/RedirectManagementUiHelper.js +12 -7
  90. package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -1
  91. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +7 -12
  92. package/dist/lib/helpers/RelationTypeApiHelper.js +28 -49
  93. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -1
  94. package/dist/lib/helpers/RelationTypeUiHelper.js +16 -13
  95. package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -1
  96. package/dist/lib/helpers/ScriptApiHelper.d.ts +6 -22
  97. package/dist/lib/helpers/ScriptApiHelper.js +12 -165
  98. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
  99. package/dist/lib/helpers/ScriptUiHelper.js +13 -9
  100. package/dist/lib/helpers/ScriptUiHelper.js.map +1 -1
  101. package/dist/lib/helpers/StylesheetApiHelper.d.ts +5 -20
  102. package/dist/lib/helpers/StylesheetApiHelper.js +13 -154
  103. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
  104. package/dist/lib/helpers/StylesheetUiHelper.js +14 -9
  105. package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
  106. package/dist/lib/helpers/TelemetryDataUiHelper.js +3 -2
  107. package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -1
  108. package/dist/lib/helpers/TemplateApiHelper.d.ts +8 -15
  109. package/dist/lib/helpers/TemplateApiHelper.js +51 -83
  110. package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
  111. package/dist/lib/helpers/TemplateUiHelper.js +25 -19
  112. package/dist/lib/helpers/TemplateUiHelper.js.map +1 -1
  113. package/dist/lib/helpers/TreeApiHelper.d.ts +15 -0
  114. package/dist/lib/helpers/TreeApiHelper.js +116 -0
  115. package/dist/lib/helpers/TreeApiHelper.js.map +1 -0
  116. package/dist/lib/helpers/UiBaseLocators.d.ts +228 -230
  117. package/dist/lib/helpers/UiBaseLocators.js +871 -832
  118. package/dist/lib/helpers/UiBaseLocators.js.map +1 -1
  119. package/dist/lib/helpers/UserGroupApiHelper.d.ts +3 -13
  120. package/dist/lib/helpers/UserGroupApiHelper.js +3 -69
  121. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
  122. package/dist/lib/helpers/UserGroupUiHelper.js +49 -32
  123. package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -1
  124. package/dist/lib/helpers/UserUiHelper.js +46 -43
  125. package/dist/lib/helpers/UserUiHelper.js.map +1 -1
  126. package/dist/lib/helpers/VariantBasedApiHelper.d.ts +23 -0
  127. package/dist/lib/helpers/VariantBasedApiHelper.js +81 -0
  128. package/dist/lib/helpers/VariantBasedApiHelper.js.map +1 -0
  129. package/dist/lib/helpers/WebhookApiHelper.d.ts +1 -0
  130. package/dist/lib/helpers/WebhookApiHelper.js +10 -11
  131. package/dist/lib/helpers/WebhookApiHelper.js.map +1 -1
  132. package/dist/lib/helpers/WebhookUiHelper.js +27 -11
  133. package/dist/lib/helpers/WebhookUiHelper.js.map +1 -1
  134. package/dist/lib/helpers/WelcomeDashboardUiHelper.js +1 -1
  135. package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -1
  136. package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js +9 -4
  137. package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js.map +1 -1
  138. package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js +10 -5
  139. package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js.map +1 -1
  140. package/dist/lib/helpers/index.d.ts +4 -1
  141. package/dist/lib/helpers/index.js +9 -3
  142. package/dist/lib/helpers/index.js.map +1 -1
  143. package/dist/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +1 -1
  145. package/dist/lib/helpers/BasePage.d.ts +0 -449
  146. package/dist/lib/helpers/BasePage.js +0 -547
  147. 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 this.click(this.usersBtn);
75
+ await (0, test_1.expect)(this.usersBtn).toBeVisible();
76
+ await this.usersBtn.click();
76
77
  }
77
78
  async clickCreateUserButton() {
78
- await this.click(this.createUserBtn);
79
- await this.page.waitForTimeout(ConstantHelper_1.ConstantHelper.wait.short);
79
+ await this.createUserBtn.click();
80
+ await this.page.waitForTimeout(500);
80
81
  }
81
82
  async enterNameOfTheUser(name) {
82
- await this.enterText(this.nameOfTheUserTxt, name);
83
+ await this.nameOfTheUserTxt.fill(name);
83
84
  }
84
85
  async enterUserEmail(email) {
85
- await this.enterText(this.userEmailTxt, email);
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(this.addUserGroupsBtn);
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(ConstantHelper_1.ConstantHelper.wait.minimal);
100
+ await this.page.waitForTimeout(200);
100
101
  }
101
102
  async clickChooseUserGroupsButton() {
102
- await this.click(this.chooseUserGroupsBtn);
103
+ await this.chooseUserGroupsBtn.click();
103
104
  }
104
105
  async clickOpenUserGroupsButton() {
105
- await this.click(this.openUserGroupsBtn);
106
+ await this.openUserGroupsBtn.click();
106
107
  }
107
108
  async enterUpdatedNameOfUser(name) {
108
- await this.enterText(this.updatedNameOfTheUserTxt, name);
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 this.click(userNameLocator);
113
+ await (0, test_1.expect)(userNameLocator).toBeVisible();
114
+ await userNameLocator.click();
113
115
  }
114
116
  async clickChangePasswordButton() {
115
- await this.click(this.changePasswordBtn);
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 this.isVisible(this.page.getByText(name, { exact: true }), isVisible);
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(this.changePhotoBtn);
127
+ await this.changePhotoBtn.click();
126
128
  }
127
129
  async clickRemoveButtonForUserGroupWithName(userGroupName) {
128
- await this.click(this.page.locator('umb-user-group-ref', { hasText: userGroupName }).locator('[label="Remove"]'));
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(this.removePhotoBtn);
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(ConstantHelper_1.ConstantHelper.wait.medium);
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 this.click(firstPage);
166
+ await firstPage.click();
165
167
  }
166
- await this.page.waitForTimeout(ConstantHelper_1.ConstantHelper.wait.medium);
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 this.containsText(this.userGrid, name);
173
+ return await (0, test_1.expect)(this.userGrid).toContainText(name);
172
174
  }
173
175
  async filterByStatusName(statusName) {
174
- await this.click(this.statusBtn);
175
- await this.click(this.page.locator('label').filter({ hasText: statusName }));
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(this.groupBtn);
179
- await this.click(this.page.locator('label').filter({ hasText: groupName }));
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(this.chooseContainerBtn);
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
- const entityItemLocator = this.entityItem.filter({ has: this.page.locator(`[name="${name}"]`) });
195
- await this.hoverAndClick(entityItemLocator, entityItemLocator.getByRole('button', { name: 'Remove' }), { force: true });
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.click(this.mediaInput.locator(`[name="${name}"]`).locator('[label="Remove"]'));
200
+ await this.mediaInput.locator('[name="' + name + '"]').locator('[label="Remove"]').click();
199
201
  }
200
202
  async clickAllowAccessToAllDocumentsToggle() {
201
- await this.click(this.allowAccessToAllDocumentsToggle);
203
+ await this.allowAccessToAllDocumentsToggle.click();
202
204
  }
203
205
  async clickAllowAccessToAllMediaToggle() {
204
- await this.click(this.allowAccessToAllMediaToggle);
206
+ await this.allowAccessToAllMediaToggle.click();
205
207
  }
206
208
  async isUserDisabledTextVisible() {
207
- await this.waitForVisible(this.disabledTxt);
209
+ return await (0, test_1.expect)(this.disabledTxt).toBeVisible();
208
210
  }
209
211
  async isUserActiveTextVisible() {
210
- await this.waitForVisible(this.activeTxt);
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(this.orderByBtn, { force: true });
215
- await this.click(this.orderByNewestBtn);
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 this.isVisible(this.documentStartNode.locator(`[name="${name}"]`));
224
+ return await (0, test_1.expect)(this.documentStartNode.locator('[name="' + name + '"]')).toBeVisible();
222
225
  }
223
226
  async doesUserHaveAccessToMediaNode(name) {
224
- await this.isVisible(this.mediaStartNode.locator(`[name="${name}"]`));
227
+ return await (0, test_1.expect)(this.mediaStartNode.locator('[name="' + name + '"]')).toBeVisible();
225
228
  }
226
229
  async clickUsersMenu() {
227
- await this.click(this.usersMenu);
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(this.userBtn);
243
+ await this.userBtn.click();
241
244
  }
242
245
  async isGoToProfileButtonVisible(isVisible = true) {
243
- await this.isVisible(this.goToProfileBtn, isVisible);
246
+ await (0, test_1.expect)(this.goToProfileBtn).toBeVisible({ visible: isVisible });
244
247
  }
245
248
  async clickAPIUserButton() {
246
- await this.click(this.apiUserBtn);
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.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);
19
+ const response = await this.api.get(this.buildUrl('/' + id));
17
20
  const json = await response.json();
18
- if (json !== null) {
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.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);
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.api.baseUrl + '/umbraco/management/api/v1/webhook', webhookData);
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.api.baseUrl + '/umbraco/management/api/v1/webhook/' + id);
35
+ return await this.api.delete(this.buildUrl('/' + id));
37
36
  }
38
37
  async update(webhook) {
39
- return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/webhook/', webhook);
38
+ return await this.api.put(this.buildUrl('/'), webhook);
40
39
  }
41
40
  async getAll() {
42
- return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/webhook?pageSize=50&skip=0&take=10000');
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 this.click(this.webhookCreateBtn);
42
+ await (0, test_1.expect)(this.webhookCreateBtn).toBeVisible();
43
+ await this.webhookCreateBtn.click();
42
44
  }
43
45
  async enterWebhookName(name) {
44
- await this.enterText(this.webhookNameTxt, name);
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 this.enterText(this.urlTxt, url);
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 this.click(this.chooseEventBtn);
56
+ await (0, test_1.expect)(this.chooseEventBtn).toBeVisible();
57
+ await this.chooseEventBtn.click();
51
58
  }
52
59
  async clickChooseContentTypeButton() {
53
- await this.click(this.chooseContentTypeBtn);
60
+ await (0, test_1.expect)(this.chooseContentTypeBtn).toBeVisible();
61
+ await this.chooseContentTypeBtn.click();
54
62
  }
55
63
  async clickEnabledToggleButton() {
56
- await this.click(this.enabledToggle);
64
+ await (0, test_1.expect)(this.enabledToggle).toBeVisible();
65
+ await this.enabledToggle.click();
57
66
  }
58
67
  async clickAddHeadersButton() {
59
- await this.click(this.addHeadersBtn);
68
+ await (0, test_1.expect)(this.addHeadersBtn).toBeVisible();
69
+ await this.addHeadersBtn.click();
60
70
  }
61
71
  async enterHeaderName(name) {
62
- await this.enterText(this.headerNameTxt, name);
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 this.enterText(this.headerValueTxt, value);
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 this.click(deleteLocator);
83
+ await (0, test_1.expect)(deleteLocator).toBeVisible();
84
+ await deleteLocator.click();
70
85
  }
71
86
  async clickHeaderRemoveButton() {
72
- await this.click(this.headerRemoveBtn);
87
+ await (0, test_1.expect)(this.headerRemoveBtn).toBeVisible();
88
+ await this.headerRemoveBtn.click();
73
89
  }
74
90
  }
75
91
  exports.WebhookUiHelper = WebhookUiHelper;