@umbraco/playwright-testhelpers 2.0.0-beta.7 → 2.0.0-beta.71

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 (183) hide show
  1. package/dist/lib/helpers/ApiHelpers.d.ts +38 -4
  2. package/dist/lib/helpers/ApiHelpers.js +133 -4
  3. package/dist/lib/helpers/ApiHelpers.js.map +1 -1
  4. package/dist/lib/helpers/ConstantHelper.js.map +1 -1
  5. package/dist/lib/helpers/ContentUiHelper.d.ts +105 -0
  6. package/dist/lib/helpers/ContentUiHelper.js +302 -0
  7. package/dist/lib/helpers/ContentUiHelper.js.map +1 -0
  8. package/dist/lib/helpers/DataTypeApiHelper.d.ts +76 -14
  9. package/dist/lib/helpers/DataTypeApiHelper.js +618 -132
  10. package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
  11. package/dist/lib/helpers/DataTypeUiHelper.d.ts +260 -0
  12. package/dist/lib/helpers/DataTypeUiHelper.js +827 -0
  13. package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -0
  14. package/dist/lib/helpers/DictionaryApiHelper.d.ts +12 -8
  15. package/dist/lib/helpers/DictionaryApiHelper.js +104 -66
  16. package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
  17. package/dist/lib/helpers/DictionaryUiHelper.d.ts +32 -0
  18. package/dist/lib/helpers/DictionaryUiHelper.js +100 -0
  19. package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -0
  20. package/dist/lib/helpers/DocumentApiHelper.d.ts +23 -0
  21. package/dist/lib/helpers/DocumentApiHelper.js +240 -0
  22. package/dist/lib/helpers/DocumentApiHelper.js.map +1 -1
  23. package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +18 -0
  24. package/dist/lib/helpers/DocumentBlueprintApiHelper.js +126 -0
  25. package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -0
  26. package/dist/lib/helpers/DocumentBlueprintUiHelper.d.ts +18 -0
  27. package/dist/lib/helpers/DocumentBlueprintUiHelper.js +54 -0
  28. package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -0
  29. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +37 -0
  30. package/dist/lib/helpers/DocumentTypeApiHelper.js +464 -0
  31. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -0
  32. package/dist/lib/helpers/DocumentTypeUiHelper.d.ts +35 -0
  33. package/dist/lib/helpers/DocumentTypeUiHelper.js +98 -0
  34. package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -0
  35. package/dist/lib/helpers/ExamineManagementUiHelper.d.ts +15 -0
  36. package/dist/lib/helpers/ExamineManagementUiHelper.js +38 -0
  37. package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -0
  38. package/dist/lib/helpers/HealthCheckApiHelper.d.ts +13 -0
  39. package/dist/lib/helpers/HealthCheckApiHelper.js +47 -0
  40. package/dist/lib/helpers/HealthCheckApiHelper.js.map +1 -0
  41. package/dist/lib/helpers/HealthCheckUiHelper.d.ts +23 -0
  42. package/dist/lib/helpers/HealthCheckUiHelper.js +59 -0
  43. package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -0
  44. package/dist/lib/helpers/IndexerApiHelper.d.ts +7 -0
  45. package/dist/lib/helpers/IndexerApiHelper.js +19 -0
  46. package/dist/lib/helpers/IndexerApiHelper.js.map +1 -0
  47. package/dist/lib/helpers/LanguageApiHelper.d.ts +8 -4
  48. package/dist/lib/helpers/LanguageApiHelper.js +46 -26
  49. package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
  50. package/dist/lib/helpers/LanguageUiHelper.d.ts +23 -0
  51. package/dist/lib/helpers/LanguageUiHelper.js +68 -0
  52. package/dist/lib/helpers/LanguageUiHelper.js.map +1 -0
  53. package/dist/lib/helpers/LogViewerUiHelper.d.ts +37 -0
  54. package/dist/lib/helpers/LogViewerUiHelper.js +102 -0
  55. package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -0
  56. package/dist/lib/helpers/LoginUiHelper.d.ts +11 -0
  57. package/dist/lib/helpers/LoginUiHelper.js +30 -0
  58. package/dist/lib/helpers/LoginUiHelper.js.map +1 -0
  59. package/dist/lib/helpers/MediaApiHelper.d.ts +22 -0
  60. package/dist/lib/helpers/MediaApiHelper.js +168 -0
  61. package/dist/lib/helpers/MediaApiHelper.js.map +1 -0
  62. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +32 -0
  63. package/dist/lib/helpers/MediaTypeApiHelper.js +390 -0
  64. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -0
  65. package/dist/lib/helpers/MediaTypeUiHelper.d.ts +14 -0
  66. package/dist/lib/helpers/MediaTypeUiHelper.js +38 -0
  67. package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -0
  68. package/dist/lib/helpers/MediaUiHelper.d.ts +36 -0
  69. package/dist/lib/helpers/MediaUiHelper.js +115 -0
  70. package/dist/lib/helpers/MediaUiHelper.js.map +1 -0
  71. package/dist/lib/helpers/MemberApiHelper.d.ts +16 -0
  72. package/dist/lib/helpers/MemberApiHelper.js +88 -0
  73. package/dist/lib/helpers/MemberApiHelper.js.map +1 -0
  74. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +14 -0
  75. package/dist/lib/helpers/MemberGroupApiHelper.js +62 -0
  76. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -0
  77. package/dist/lib/helpers/MemberGroupUiHelper.d.ts +15 -0
  78. package/dist/lib/helpers/MemberGroupUiHelper.js +40 -0
  79. package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -0
  80. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +17 -0
  81. package/dist/lib/helpers/MemberTypeApiHelper.js +121 -0
  82. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -0
  83. package/dist/lib/helpers/MemberTypeUiHelper.d.ts +13 -0
  84. package/dist/lib/helpers/MemberTypeUiHelper.js +35 -0
  85. package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -0
  86. package/dist/lib/helpers/MemberUiHelper.d.ts +40 -0
  87. package/dist/lib/helpers/MemberUiHelper.js +114 -0
  88. package/dist/lib/helpers/MemberUiHelper.js.map +1 -0
  89. package/dist/lib/helpers/ModelsBuilderApiHelper.d.ts +6 -0
  90. package/dist/lib/helpers/ModelsBuilderApiHelper.js +15 -0
  91. package/dist/lib/helpers/ModelsBuilderApiHelper.js.map +1 -0
  92. package/dist/lib/helpers/ModelsBuilderUiHelper.d.ts +9 -0
  93. package/dist/lib/helpers/ModelsBuilderUiHelper.js +22 -0
  94. package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -0
  95. package/dist/lib/helpers/ObjectTypesApiHelper.d.ts +7 -0
  96. package/dist/lib/helpers/ObjectTypesApiHelper.js +25 -0
  97. package/dist/lib/helpers/ObjectTypesApiHelper.js.map +1 -0
  98. package/dist/lib/helpers/PackageApiHelper.d.ts +3 -2
  99. package/dist/lib/helpers/PackageApiHelper.js +6 -3
  100. package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
  101. package/dist/lib/helpers/PackageUiHelper.d.ts +49 -0
  102. package/dist/lib/helpers/PackageUiHelper.js +134 -0
  103. package/dist/lib/helpers/PackageUiHelper.js.map +1 -0
  104. package/dist/lib/helpers/PartialViewApiHelper.d.ts +14 -10
  105. package/dist/lib/helpers/PartialViewApiHelper.js +124 -98
  106. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
  107. package/dist/lib/helpers/PartialViewUiHelper.d.ts +19 -0
  108. package/dist/lib/helpers/PartialViewUiHelper.js +59 -0
  109. package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -0
  110. package/dist/lib/helpers/ProfilingUiHelper.d.ts +11 -0
  111. package/dist/lib/helpers/ProfilingUiHelper.js +27 -0
  112. package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -0
  113. package/dist/lib/helpers/PublishedCacheApiHelper.d.ts +6 -0
  114. package/dist/lib/helpers/PublishedCacheApiHelper.js +15 -0
  115. package/dist/lib/helpers/PublishedCacheApiHelper.js.map +1 -0
  116. package/dist/lib/helpers/PublishedStatusUiHelper.d.ts +19 -0
  117. package/dist/lib/helpers/PublishedStatusUiHelper.js +47 -0
  118. package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -0
  119. package/dist/lib/helpers/RedirectManagementApiHelper.d.ts +10 -0
  120. package/dist/lib/helpers/RedirectManagementApiHelper.js +30 -0
  121. package/dist/lib/helpers/RedirectManagementApiHelper.js.map +1 -0
  122. package/dist/lib/helpers/RedirectManagementUiHelper.d.ts +17 -0
  123. package/dist/lib/helpers/RedirectManagementUiHelper.js +45 -0
  124. package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -0
  125. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +15 -0
  126. package/dist/lib/helpers/{RelationType.js → RelationTypeApiHelper.js} +45 -58
  127. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -0
  128. package/dist/lib/helpers/RelationTypeUiHelper.d.ts +21 -0
  129. package/dist/lib/helpers/RelationTypeUiHelper.js +55 -0
  130. package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -0
  131. package/dist/lib/helpers/ScriptApiHelper.d.ts +5 -3
  132. package/dist/lib/helpers/ScriptApiHelper.js +44 -26
  133. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
  134. package/dist/lib/helpers/ScriptUiHelper.d.ts +18 -0
  135. package/dist/lib/helpers/ScriptUiHelper.js +59 -0
  136. package/dist/lib/helpers/ScriptUiHelper.js.map +1 -0
  137. package/dist/lib/helpers/StylesheetApiHelper.d.ts +6 -4
  138. package/dist/lib/helpers/StylesheetApiHelper.js +47 -41
  139. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
  140. package/dist/lib/helpers/StylesheetUiHelper.d.ts +22 -28
  141. package/dist/lib/helpers/StylesheetUiHelper.js +72 -75
  142. package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
  143. package/dist/lib/helpers/TelemetryDataUiHelper.d.ts +10 -0
  144. package/dist/lib/helpers/TelemetryDataUiHelper.js +25 -0
  145. package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -0
  146. package/dist/lib/helpers/TemplateApiHelper.d.ts +1 -0
  147. package/dist/lib/helpers/TemplateApiHelper.js +6 -0
  148. package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
  149. package/dist/lib/helpers/TemplateUiHelper.d.ts +25 -0
  150. package/dist/lib/helpers/TemplateUiHelper.js +93 -0
  151. package/dist/lib/helpers/TemplateUiHelper.js.map +1 -0
  152. package/dist/lib/helpers/TemporaryFileApiHelper.d.ts +1 -1
  153. package/dist/lib/helpers/TemporaryFileApiHelper.js +6 -10
  154. package/dist/lib/helpers/TemporaryFileApiHelper.js.map +1 -1
  155. package/dist/lib/helpers/UiBaseLocators.d.ts +220 -0
  156. package/dist/lib/helpers/UiBaseLocators.js +698 -0
  157. package/dist/lib/helpers/UiBaseLocators.js.map +1 -0
  158. package/dist/lib/helpers/UiHelpers.d.ts +58 -9
  159. package/dist/lib/helpers/UiHelpers.js +90 -39
  160. package/dist/lib/helpers/UiHelpers.js.map +1 -1
  161. package/dist/lib/helpers/UserApiHelper.d.ts +16 -9
  162. package/dist/lib/helpers/UserApiHelper.js +64 -19
  163. package/dist/lib/helpers/UserApiHelper.js.map +1 -1
  164. package/dist/lib/helpers/UserGroupApiHelper.d.ts +5 -3
  165. package/dist/lib/helpers/UserGroupApiHelper.js +20 -19
  166. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
  167. package/dist/lib/helpers/UserGroupUiHelper.d.ts +20 -0
  168. package/dist/lib/helpers/UserGroupUiHelper.js +56 -0
  169. package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -0
  170. package/dist/lib/helpers/UserUiHelper.d.ts +73 -0
  171. package/dist/lib/helpers/UserUiHelper.js +200 -0
  172. package/dist/lib/helpers/UserUiHelper.js.map +1 -0
  173. package/dist/lib/helpers/WelcomeDashboardUiHelper.d.ts +9 -0
  174. package/dist/lib/helpers/WelcomeDashboardUiHelper.js +22 -0
  175. package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -0
  176. package/dist/lib/helpers/testExtension.js +5 -0
  177. package/dist/lib/helpers/testExtension.js.map +1 -1
  178. package/dist/tsconfig.tsbuildinfo +1 -1
  179. package/dist/umbraco.config.js +1 -1
  180. package/dist/umbraco.config.js.map +1 -1
  181. package/package.json +9 -11
  182. package/dist/lib/helpers/RelationType.d.ts +0 -15
  183. package/dist/lib/helpers/RelationType.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogViewerUiHelper = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const UiBaseLocators_1 = require("./UiBaseLocators");
6
+ class LogViewerUiHelper extends UiBaseLocators_1.UiBaseLocators {
7
+ searchBtn;
8
+ searchLogsTxt;
9
+ selectLogLevelBtn;
10
+ saveSearchHeartIcon;
11
+ searchNameTxt;
12
+ saveSearchBtn;
13
+ overviewBtn;
14
+ sortLogByTimestampBtn;
15
+ firstLogLevelTimestamp;
16
+ firstLogLevelMessage;
17
+ firstLogSearchResult;
18
+ savedSearchesBtn;
19
+ loadingSpinner;
20
+ constructor(page) {
21
+ super(page);
22
+ this.searchBtn = page.locator('uui-tab').filter({ hasText: 'Search' }).locator('svg');
23
+ this.searchLogsTxt = page.getByPlaceholder('Search logs...');
24
+ this.selectLogLevelBtn = page.getByLabel('Select log levels');
25
+ this.saveSearchHeartIcon = page.getByLabel("Save search");
26
+ this.searchNameTxt = page.getByLabel("Search name");
27
+ this.saveSearchBtn = page.locator('uui-dialog-layout').getByLabel("Save search");
28
+ this.overviewBtn = page.getByRole('tab', { name: 'Overview' });
29
+ this.sortLogByTimestampBtn = page.getByLabel('Sort logs');
30
+ this.firstLogLevelTimestamp = page.locator('umb-log-viewer-message #timestamp').first();
31
+ this.firstLogLevelMessage = page.locator('umb-log-viewer-message #message').first();
32
+ this.firstLogSearchResult = page.getByRole('group').locator('#message').first();
33
+ this.savedSearchesBtn = page.getByLabel('Saved searches');
34
+ this.loadingSpinner = page.locator('#empty uui-loader-circle');
35
+ }
36
+ async clickSearchButton() {
37
+ await (0, test_1.expect)(this.searchBtn).toBeVisible();
38
+ await this.searchBtn.click();
39
+ await (0, test_1.expect)(this.searchLogsTxt).toBeVisible();
40
+ }
41
+ async clickOverviewButton() {
42
+ await this.overviewBtn.click({ force: true });
43
+ }
44
+ async enterSearchKeyword(keyword) {
45
+ await this.searchLogsTxt.clear();
46
+ await this.searchLogsTxt.fill(keyword);
47
+ }
48
+ async selectLogLevel(level) {
49
+ await this.selectLogLevelBtn.click({ force: true });
50
+ await this.page.locator('.log-level-menu-item').getByText(level).click({ force: true });
51
+ }
52
+ async doesLogLevelIndicatorDisplay(level) {
53
+ return await (0, test_1.expect)(this.page.locator('.log-level-button-indicator', { hasText: level })).toBeVisible();
54
+ }
55
+ async doesLogLevelCountMatch(level, expectedNumber) {
56
+ return await (0, test_1.expect)(this.page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', { hasText: level })).toHaveCount(expectedNumber);
57
+ }
58
+ async saveSearch(searchName) {
59
+ await this.saveSearchHeartIcon.click({ force: true });
60
+ await this.searchNameTxt.clear();
61
+ await this.searchNameTxt.fill(searchName);
62
+ await this.saveSearchBtn.click();
63
+ }
64
+ checkSavedSearch(searchName) {
65
+ return this.page.locator('#saved-searches').getByLabel(searchName, { exact: true });
66
+ }
67
+ async clickSortLogByTimestampButton() {
68
+ await this.sortLogByTimestampBtn.click();
69
+ }
70
+ async doesFirstLogHaveTimestamp(timestamp) {
71
+ return await (0, test_1.expect)(this.firstLogLevelTimestamp).toContainText(timestamp);
72
+ }
73
+ async clickPageNumber(pageNumber) {
74
+ await this.page.getByLabel('Go to page ' + pageNumber, { exact: true }).click();
75
+ }
76
+ async doesFirstLogHaveMessage(message) {
77
+ await (0, test_1.expect)(this.firstLogLevelMessage).toContainText(message);
78
+ }
79
+ async clickSavedSearchByName(name) {
80
+ await this.page.locator('#saved-searches').getByLabel(name).click();
81
+ }
82
+ async doesSearchBoxHaveValue(searchValue) {
83
+ await (0, test_1.expect)(this.page.getByPlaceholder('Search logs...')).toHaveValue(searchValue);
84
+ }
85
+ async clickFirstLogSearchResult() {
86
+ await this.firstLogSearchResult.click();
87
+ }
88
+ async doesDetailedLogHaveText(text) {
89
+ await (0, test_1.expect)(this.page.locator('details[open] .property-value').getByText(text)).toBeVisible();
90
+ }
91
+ async clickSavedSearchesButton() {
92
+ await this.savedSearchesBtn.click({ force: true });
93
+ }
94
+ async removeSavedSearchByName(name) {
95
+ await this.page.locator('li').filter({ hasText: name }).getByLabel('Remove saved search').click({ force: true });
96
+ }
97
+ async waitUntilLoadingSpinnerInvisible() {
98
+ await (0, test_1.expect)(this.loadingSpinner).toHaveCount(0);
99
+ }
100
+ }
101
+ exports.LogViewerUiHelper = LogViewerUiHelper;
102
+ //# sourceMappingURL=LogViewerUiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogViewerUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LogViewerUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class LogViewerUiHelper extends UiBaseLocators {\n private readonly searchBtn: Locator;\n private readonly searchLogsTxt: Locator;\n private readonly selectLogLevelBtn: Locator;\n private readonly saveSearchHeartIcon: Locator;\n private readonly searchNameTxt: Locator;\n private readonly saveSearchBtn: Locator;\n private readonly overviewBtn: Locator;\n private readonly sortLogByTimestampBtn: Locator;\n private readonly firstLogLevelTimestamp: Locator;\n private readonly firstLogLevelMessage: Locator;\n private readonly firstLogSearchResult: Locator;\n private readonly savedSearchesBtn: Locator;\n private readonly loadingSpinner: Locator;\n\n constructor(page: Page) {\n super(page);\n this.searchBtn = page.locator('uui-tab').filter({hasText: 'Search'}).locator('svg');\n this.searchLogsTxt = page.getByPlaceholder('Search logs...');\n this.selectLogLevelBtn = page.getByLabel('Select log levels');\n this.saveSearchHeartIcon = page.getByLabel(\"Save search\");\n this.searchNameTxt = page.getByLabel(\"Search name\");\n this.saveSearchBtn = page.locator('uui-dialog-layout').getByLabel(\"Save search\");\n this.overviewBtn = page.getByRole('tab', {name: 'Overview'});\n this.sortLogByTimestampBtn = page.getByLabel('Sort logs');\n this.firstLogLevelTimestamp = page.locator('umb-log-viewer-message #timestamp').first();\n this.firstLogLevelMessage = page.locator('umb-log-viewer-message #message').first();\n this.firstLogSearchResult = page.getByRole('group').locator('#message').first();\n this.savedSearchesBtn = page.getByLabel('Saved searches');\n this.loadingSpinner = page.locator('#empty uui-loader-circle');\n }\n\n async clickSearchButton() {\n await expect(this.searchBtn).toBeVisible();\n await this.searchBtn.click();\n await expect(this.searchLogsTxt).toBeVisible();\n }\n\n async clickOverviewButton() {\n await this.overviewBtn.click({force: true});\n }\n\n async enterSearchKeyword(keyword: string) {\n await this.searchLogsTxt.clear();\n await this.searchLogsTxt.fill(keyword);\n }\n\n async selectLogLevel(level: string) {\n await this.selectLogLevelBtn.click({force: true});\n await this.page.locator('.log-level-menu-item').getByText(level).click({force: true});\n }\n\n async doesLogLevelIndicatorDisplay(level: string) {\n return await expect(this.page.locator('.log-level-button-indicator', {hasText: level})).toBeVisible();\n }\n\n async doesLogLevelCountMatch(level: string, expectedNumber: number) {\n return await expect(this.page.locator('umb-log-viewer-message').locator('umb-log-viewer-level-tag', {hasText: level})).toHaveCount(expectedNumber);\n }\n\n async saveSearch(searchName: string) {\n await this.saveSearchHeartIcon.click({force: true});\n await this.searchNameTxt.clear();\n await this.searchNameTxt.fill(searchName);\n await this.saveSearchBtn.click();\n }\n\n checkSavedSearch(searchName: string) {\n return this.page.locator('#saved-searches').getByLabel(searchName, {exact: true});\n }\n\n async clickSortLogByTimestampButton() {\n await this.sortLogByTimestampBtn.click();\n }\n\n async doesFirstLogHaveTimestamp(timestamp: string) {\n return await expect(this.firstLogLevelTimestamp).toContainText(timestamp);\n }\n\n async clickPageNumber(pageNumber: number) {\n await this.page.getByLabel('Go to page ' + pageNumber, {exact: true}).click();\n }\n\n async doesFirstLogHaveMessage(message: string) {\n await expect(this.firstLogLevelMessage).toContainText(message);\n }\n\n async clickSavedSearchByName(name: string) {\n await this.page.locator('#saved-searches').getByLabel(name).click();\n }\n\n async doesSearchBoxHaveValue(searchValue: string) {\n await expect(this.page.getByPlaceholder('Search logs...')).toHaveValue(searchValue);\n }\n\n async clickFirstLogSearchResult() {\n await this.firstLogSearchResult.click();\n }\n\n async doesDetailedLogHaveText(text: string) {\n await expect(this.page.locator('details[open] .property-value').getByText(text)).toBeVisible();\n }\n\n async clickSavedSearchesButton() {\n await this.savedSearchesBtn.click({force: true});\n }\n\n async removeSavedSearchByName(name: string) {\n await this.page.locator('li').filter({hasText: name}).getByLabel('Remove saved search').click({force: true});\n }\n\n async waitUntilLoadingSpinnerInvisible() {\n await expect(this.loadingSpinner).toHaveCount(0); \n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { Page } from "@playwright/test";
2
+ import { UiBaseLocators } from "./UiBaseLocators";
3
+ export declare class LoginUiHelper extends UiBaseLocators {
4
+ private readonly emailTxt;
5
+ private readonly passwordTxt;
6
+ private readonly loginBtn;
7
+ constructor(page: Page);
8
+ enterEmail(email: string): Promise<void>;
9
+ enterPassword(password: string): Promise<void>;
10
+ clickLoginButton(): Promise<void>;
11
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoginUiHelper = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const UiBaseLocators_1 = require("./UiBaseLocators");
6
+ class LoginUiHelper extends UiBaseLocators_1.UiBaseLocators {
7
+ emailTxt;
8
+ passwordTxt;
9
+ loginBtn;
10
+ constructor(page) {
11
+ super(page);
12
+ this.emailTxt = page.locator('[name="username"]');
13
+ this.passwordTxt = page.locator('[name="password"]');
14
+ this.loginBtn = page.getByLabel('Login');
15
+ }
16
+ async enterEmail(email) {
17
+ await (0, test_1.expect)(this.emailTxt).toBeVisible({ timeout: 20000 });
18
+ await this.emailTxt.clear();
19
+ await this.emailTxt.fill(email);
20
+ }
21
+ async enterPassword(password) {
22
+ await this.passwordTxt.clear();
23
+ await this.passwordTxt.fill(password);
24
+ }
25
+ async clickLoginButton() {
26
+ await this.loginBtn.click();
27
+ }
28
+ }
29
+ exports.LoginUiHelper = LoginUiHelper;
30
+ //# sourceMappingURL=LoginUiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LoginUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,aAAc,SAAQ,+BAAc;IAC9B,QAAQ,CAAU;IAClB,WAAW,CAAU;IACrB,QAAQ,CAAU;IAEnC,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF;AA1BD,sCA0BC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class LoginUiHelper extends UiBaseLocators {\n private readonly emailTxt: Locator;\n private readonly passwordTxt: Locator;\n private readonly loginBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.emailTxt = page.locator('[name=\"username\"]');\n this.passwordTxt = page.locator('[name=\"password\"]');\n this.loginBtn = page.getByLabel('Login'); \n }\n\n async enterEmail(email: string) {\n await expect(this.emailTxt).toBeVisible({timeout: 20000});\n await this.emailTxt.clear();\n await this.emailTxt.fill(email);\n }\n\n async enterPassword(password: string) {\n await this.passwordTxt.clear();\n await this.passwordTxt.fill(password);\n }\n\n async clickLoginButton() {\n await this.loginBtn.click();\n }\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class MediaApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ ensureNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
6
+ getAllAtRoot(): Promise<import("playwright-core").APIResponse>;
7
+ private recurseChildren;
8
+ private recurseDeleteChildren;
9
+ get(id: string): Promise<any>;
10
+ delete(id: string): Promise<import("playwright-core").APIResponse>;
11
+ getChildren(id: string): Promise<any>;
12
+ create(media: any): Promise<string | undefined>;
13
+ doesNameExist(name: string): Promise<any>;
14
+ getByName(name: string): Promise<any>;
15
+ getRecycleBinItems(): Promise<import("playwright-core").APIResponse>;
16
+ emptyRecycleBin(): Promise<import("playwright-core").APIResponse>;
17
+ doesMediaItemExistInRecycleBin(mediaItemName: string): Promise<boolean>;
18
+ trashMediaItem(mediaItemName: string): Promise<import("playwright-core").APIResponse>;
19
+ createMediaWithFolderType(mediaFolderName: string, parentId?: string): Promise<string | undefined>;
20
+ createDefaultMedia(mediaName: string, mediaTypeName: string, parentId?: string): Promise<string | undefined>;
21
+ createDefaultMediaFolder(mediaFolderName: string, parentId?: string): Promise<string | undefined>;
22
+ }
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MediaApiHelper = void 0;
4
+ const json_models_builders_1 = require("@umbraco/json-models-builders");
5
+ class MediaApiHelper {
6
+ api;
7
+ constructor(api) {
8
+ this.api = api;
9
+ }
10
+ async ensureNameNotExists(name) {
11
+ const rootMedia = await this.getAllAtRoot();
12
+ const jsonMedia = await rootMedia.json();
13
+ for (const media of jsonMedia.items) {
14
+ if (media.variants[0].name === name) {
15
+ if (media.hasChildren) {
16
+ return await this.recurseDeleteChildren(media);
17
+ }
18
+ return await this.delete(media.id);
19
+ }
20
+ else if (media.hasChildren) {
21
+ await this.recurseChildren(name, media.id, true);
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ async getAllAtRoot() {
27
+ return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/root?skip=0&take=10000');
28
+ }
29
+ async recurseChildren(name, id, toDelete) {
30
+ const items = await this.getChildren(id);
31
+ for (const child of items) {
32
+ if (child.variants[0].name === name) {
33
+ if (!toDelete) {
34
+ return await this.get(child.id);
35
+ }
36
+ if (child.hasChildren) {
37
+ return await this.recurseDeleteChildren(child);
38
+ }
39
+ return await this.delete(child.id);
40
+ }
41
+ else if (child.hasChildren) {
42
+ return await this.recurseChildren(name, child.id, toDelete);
43
+ }
44
+ }
45
+ return false;
46
+ }
47
+ async recurseDeleteChildren(media) {
48
+ if (!media.hasChildren) {
49
+ return await this.delete(media.id);
50
+ }
51
+ const items = await this.getChildren(media.id);
52
+ for (const child of items) {
53
+ if (child.hasChildren) {
54
+ await this.recurseDeleteChildren(child);
55
+ }
56
+ else {
57
+ await this.delete(child.id);
58
+ }
59
+ }
60
+ return await this.delete(media.id);
61
+ }
62
+ async get(id) {
63
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);
64
+ return await response.json();
65
+ }
66
+ async delete(id) {
67
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);
68
+ }
69
+ async getChildren(id) {
70
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/children?parentId=' + id + '&skip=0&take=10000');
71
+ const items = await response.json();
72
+ return items.items;
73
+ }
74
+ async create(media) {
75
+ if (media == null) {
76
+ return;
77
+ }
78
+ const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media', media);
79
+ return response.headers().location.split("/").pop();
80
+ }
81
+ async doesNameExist(name) {
82
+ return await this.getByName(name);
83
+ }
84
+ async getByName(name) {
85
+ const rootMedia = await this.getAllAtRoot();
86
+ const jsonMedia = await rootMedia.json();
87
+ for (const media of jsonMedia.items) {
88
+ if (media.variants[0].name === name) {
89
+ return await this.get(media.id);
90
+ }
91
+ else if (media.hasChildren) {
92
+ await this.recurseChildren(name, media.id, false);
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ async getRecycleBinItems() {
98
+ return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media/root?skip=0&take=10000');
99
+ }
100
+ async emptyRecycleBin() {
101
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media');
102
+ }
103
+ async doesMediaItemExistInRecycleBin(mediaItemName) {
104
+ const recycleBin = await this.getRecycleBinItems();
105
+ const jsonRecycleBin = await recycleBin.json();
106
+ for (const media of jsonRecycleBin.items) {
107
+ if (media.variants[0].name === mediaItemName) {
108
+ return true;
109
+ }
110
+ }
111
+ return false;
112
+ }
113
+ async trashMediaItem(mediaItemName) {
114
+ const media = await this.getByName(mediaItemName);
115
+ return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media/' + media.id + '/move-to-recycle-bin');
116
+ }
117
+ async createMediaWithFolderType(mediaFolderName, parentId) {
118
+ const mediaType = await this.api.mediaType.getByName('Folder');
119
+ const media = new json_models_builders_1.MediaBuilder()
120
+ .withMediaTypeId(mediaType.id)
121
+ .addVariant()
122
+ .withName(mediaFolderName)
123
+ .done()
124
+ .build();
125
+ if (parentId !== undefined) {
126
+ media.parent = { id: parentId };
127
+ }
128
+ return await this.create(media);
129
+ }
130
+ async createDefaultMedia(mediaName, mediaTypeName, parentId) {
131
+ const mediaType = await this.api.mediaType.getByName(mediaTypeName);
132
+ const crypto = require('crypto');
133
+ const temporaryFileId = crypto.randomUUID();
134
+ const fileName = 'File.txt';
135
+ const filePath = './fixtures/mediaLibrary/' + fileName;
136
+ const mimeType = 'text/plain';
137
+ await this.api.temporaryFile.create(temporaryFileId, fileName, mimeType, filePath);
138
+ const media = new json_models_builders_1.MediaBuilder()
139
+ .withMediaTypeId(mediaType.id)
140
+ .addVariant()
141
+ .withName(mediaName)
142
+ .done()
143
+ .addValue()
144
+ .withAlias('umbracoFile')
145
+ .withValue(temporaryFileId)
146
+ .done()
147
+ .build();
148
+ if (parentId !== undefined) {
149
+ media.parent = { id: parentId };
150
+ }
151
+ return await this.create(media);
152
+ }
153
+ async createDefaultMediaFolder(mediaFolderName, parentId) {
154
+ const mediaType = await this.api.mediaType.getByName('Folder');
155
+ const media = new json_models_builders_1.MediaBuilder()
156
+ .withMediaTypeId(mediaType.id)
157
+ .addVariant()
158
+ .withName(mediaFolderName)
159
+ .done()
160
+ .build();
161
+ if (parentId !== undefined) {
162
+ media.parent = { id: parentId };
163
+ }
164
+ return await this.create(media);
165
+ }
166
+ }
167
+ exports.MediaApiHelper = MediaApiHelper;
168
+ //# sourceMappingURL=MediaApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/MediaApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {MediaBuilder} from \"@umbraco/json-models-builders\";\n\nexport class MediaApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureNameNotExists(name: string) {\n const rootMedia = await this.getAllAtRoot();\n const jsonMedia = await rootMedia.json();\n\n for (const media of jsonMedia.items) {\n if (media.variants[0].name === name) {\n if (media.hasChildren) {\n return await this.recurseDeleteChildren(media);\n }\n return await this.delete(media.id);\n } else if (media.hasChildren) {\n await this.recurseChildren(name, media.id, true);\n }\n }\n return null;\n }\n\n async getAllAtRoot() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/root?skip=0&take=10000');\n }\n\n private async recurseChildren(name: string, id: string, toDelete: boolean) {\n const items = await this.getChildren(id);\n\n for (const child of items) {\n if (child.variants[0].name === name) {\n if (!toDelete) {\n return await this.get(child.id);\n }\n if (child.hasChildren) {\n return await this.recurseDeleteChildren(child);\n }\n return await this.delete(child.id);\n } else if (child.hasChildren) {\n return await this.recurseChildren(name, child.id, toDelete);\n }\n }\n return false;\n }\n\n private async recurseDeleteChildren(media) {\n if (!media.hasChildren) {\n return await this.delete(media.id);\n }\n const items = await this.getChildren(media.id);\n\n for (const child of items) {\n if (child.hasChildren) {\n await this.recurseDeleteChildren(child);\n } else {\n await this.delete(child.id);\n }\n }\n return await this.delete(media.id);\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);\n return await response.json();\n }\n\n async delete(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);\n }\n\n async getChildren(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/children?parentId=' + id + '&skip=0&take=10000');\n const items = await response.json();\n return items.items;\n }\n\n async create(media) {\n if (media == null) {\n return;\n }\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media', media);\n return response.headers().location.split(\"/\").pop();\n }\n\n async doesNameExist(name: string) {\n return await this.getByName(name);\n }\n\n async getByName(name: string) {\n const rootMedia = await this.getAllAtRoot();\n const jsonMedia = await rootMedia.json();\n\n for (const media of jsonMedia.items) {\n if (media.variants[0].name === name) {\n return await this.get(media.id);\n } else if (media.hasChildren) {\n await this.recurseChildren(name, media.id, false);\n }\n }\n return null;\n }\n\n async getRecycleBinItems() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media/root?skip=0&take=10000');\n }\n\n async emptyRecycleBin() {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media');\n }\n\n async doesMediaItemExistInRecycleBin(mediaItemName: string) {\n const recycleBin = await this.getRecycleBinItems();\n const jsonRecycleBin = await recycleBin.json();\n for (const media of jsonRecycleBin.items) {\n if (media.variants[0].name === mediaItemName) {\n return true;\n }\n }\n return false;\n }\n\n async trashMediaItem(mediaItemName: string) {\n const media = await this.getByName(mediaItemName);\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media/' + media.id + '/move-to-recycle-bin');\n }\n\n async createMediaWithFolderType(mediaFolderName: string, parentId?: string) {\n const mediaType = await this.api.mediaType.getByName('Folder');\n const media = new MediaBuilder()\n .withMediaTypeId(mediaType.id)\n .addVariant()\n .withName(mediaFolderName)\n .done()\n .build();\n\n if (parentId !== undefined) {\n media.parent = {id: parentId};\n }\n\n return await this.create(media);\n }\n\n async createDefaultMedia(mediaName: string, mediaTypeName: string, parentId?: string) {\n const mediaType = await this.api.mediaType.getByName(mediaTypeName);\n\n const crypto = require('crypto');\n const temporaryFileId = crypto.randomUUID();\n const fileName = 'File.txt';\n const filePath = './fixtures/mediaLibrary/' + fileName;\n const mimeType = 'text/plain';\n await this.api.temporaryFile.create(temporaryFileId, fileName, mimeType, filePath);\n\n const media = new MediaBuilder()\n .withMediaTypeId(mediaType.id)\n .addVariant()\n .withName(mediaName)\n .done()\n .addValue()\n .withAlias('umbracoFile')\n .withValue(temporaryFileId)\n .done()\n .build();\n\n if (parentId !== undefined) {\n media.parent = {id: parentId};\n }\n\n return await this.create(media);\n }\n\n async createDefaultMediaFolder(mediaFolderName: string, parentId?: string) {\n const mediaType = await this.api.mediaType.getByName('Folder');\n const media = new MediaBuilder()\n .withMediaTypeId(mediaType.id)\n .addVariant()\n .withName(mediaFolderName)\n .done()\n .build();\n\n if (parentId !== undefined) {\n media.parent = {id: parentId};\n }\n\n return await this.create(media);\n }\n}"]}
@@ -0,0 +1,32 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class MediaTypeApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ ensureNameNotExists(name: string): Promise<number | import("playwright-core").APIResponse | null | undefined>;
6
+ getAllAtRoot(): Promise<import("playwright-core").APIResponse>;
7
+ private recurseChildren;
8
+ private recurseDeleteChildren;
9
+ getChildren(id: string): Promise<any>;
10
+ create(mediaType: any): Promise<string | undefined>;
11
+ delete(id: string): Promise<number | undefined>;
12
+ getByName(name: string): Promise<any>;
13
+ doesNameExist(name: string): Promise<any>;
14
+ get(id: string): Promise<any>;
15
+ getFolder(id: string): Promise<any>;
16
+ deleteFolder(id: string): Promise<import("playwright-core").APIResponse>;
17
+ createFolder(name: string, parentId?: string): Promise<string | undefined>;
18
+ renameFolder(folderId: string, folderName: string): Promise<import("playwright-core").APIResponse>;
19
+ createDefaultMediaType(mediaTypeName: string): Promise<string | undefined>;
20
+ createMediaTypeWithPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName?: string): Promise<string | undefined>;
21
+ createMediaTypeWithTwoPropertyEditors(mediaTypeName: string, dataTypeNameOne: string, dataTypeIdOne: string, dataTypeNameTwo: string, dataTypeIdTwo: string, groupName?: string): Promise<string | undefined>;
22
+ createMediaTypeWithPropertyEditorInTab(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName?: string, varyByCulture?: boolean): Promise<string | undefined>;
23
+ createMediaTypeWithTwoGroups(mediaTypeName: string, dataType: string, dataTypeId: string, groupNameOne: string, groupNameTwo: string): Promise<string | undefined>;
24
+ createMediaTypeWithTwoTabs(mediaTypeName: string, dataType: string, dataTypeId: string, tabNameOne: string, tabNameTwo: string): Promise<string | undefined>;
25
+ createMediaTypeWithAllowedChildNode(mediaTypeName: string, allowedChildNodeId: string): Promise<string | undefined>;
26
+ doesGroupContainCorrectPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName: string): Promise<any>;
27
+ doesTabContainCorrectPropertyEditorInGroup(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName: string): Promise<any>;
28
+ doesMediaTypeGroupNameContainCorrectSortOrder(mediaTypeName: string, groupName: string, sortOrder: number): Promise<boolean>;
29
+ doesMediaTypeTabNameContainCorrectSortOrder(mediaTypeName: string, tabName: string, sortOrder: number): Promise<boolean>;
30
+ doesTabContainerCorrectPropertyEditor(mediaTypeName: string, tabName: string, dataTypeId: string): Promise<any>;
31
+ doesMediaTypeContainAllowedChildNodeIds(mediaTypeName: string, allowedChildNodeIds: string[]): Promise<any>;
32
+ }