@umbraco/playwright-testhelpers 2.0.0-beta.5 → 2.0.0-beta.50

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 (179) hide show
  1. package/dist/lib/helpers/ApiHelpers.d.ts +36 -4
  2. package/dist/lib/helpers/ApiHelpers.js +130 -4
  3. package/dist/lib/helpers/ApiHelpers.js.map +1 -1
  4. package/dist/lib/helpers/ConstantHelper.d.ts +1 -1
  5. package/dist/lib/helpers/ConstantHelper.js +1 -1
  6. package/dist/lib/helpers/ConstantHelper.js.map +1 -1
  7. package/dist/lib/helpers/ContentUiHelper.d.ts +78 -0
  8. package/dist/lib/helpers/ContentUiHelper.js +216 -0
  9. package/dist/lib/helpers/ContentUiHelper.js.map +1 -0
  10. package/dist/lib/helpers/DataTypeApiHelper.d.ts +14 -14
  11. package/dist/lib/helpers/DataTypeApiHelper.js +114 -133
  12. package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
  13. package/dist/lib/helpers/DataTypeUiHelper.d.ts +159 -0
  14. package/dist/lib/helpers/DataTypeUiHelper.js +509 -0
  15. package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -0
  16. package/dist/lib/helpers/DictionaryApiHelper.d.ts +12 -8
  17. package/dist/lib/helpers/DictionaryApiHelper.js +104 -66
  18. package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
  19. package/dist/lib/helpers/DocumentApiHelper.d.ts +19 -0
  20. package/dist/lib/helpers/DocumentApiHelper.js +177 -0
  21. package/dist/lib/helpers/DocumentApiHelper.js.map +1 -1
  22. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +35 -0
  23. package/dist/lib/helpers/DocumentTypeApiHelper.js +433 -0
  24. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -0
  25. package/dist/lib/helpers/DocumentTypeUiHelper.d.ts +36 -0
  26. package/dist/lib/helpers/DocumentTypeUiHelper.js +100 -0
  27. package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -0
  28. package/dist/lib/helpers/ExamineManagementUiHelper.d.ts +15 -0
  29. package/dist/lib/helpers/ExamineManagementUiHelper.js +38 -0
  30. package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -0
  31. package/dist/lib/helpers/HealthCheckApiHelper.d.ts +13 -0
  32. package/dist/lib/helpers/HealthCheckApiHelper.js +47 -0
  33. package/dist/lib/helpers/HealthCheckApiHelper.js.map +1 -0
  34. package/dist/lib/helpers/HealthCheckUiHelper.d.ts +23 -0
  35. package/dist/lib/helpers/HealthCheckUiHelper.js +59 -0
  36. package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -0
  37. package/dist/lib/helpers/IndexerApiHelper.d.ts +7 -0
  38. package/dist/lib/helpers/IndexerApiHelper.js +19 -0
  39. package/dist/lib/helpers/IndexerApiHelper.js.map +1 -0
  40. package/dist/lib/helpers/LanguageApiHelper.d.ts +8 -4
  41. package/dist/lib/helpers/LanguageApiHelper.js +46 -26
  42. package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
  43. package/dist/lib/helpers/LanguageUiHelper.d.ts +22 -0
  44. package/dist/lib/helpers/LanguageUiHelper.js +62 -0
  45. package/dist/lib/helpers/LanguageUiHelper.js.map +1 -0
  46. package/dist/lib/helpers/LogViewerUiHelper.d.ts +37 -0
  47. package/dist/lib/helpers/LogViewerUiHelper.js +102 -0
  48. package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -0
  49. package/dist/lib/helpers/LoginUiHelper.d.ts +11 -0
  50. package/dist/lib/helpers/LoginUiHelper.js +30 -0
  51. package/dist/lib/helpers/LoginUiHelper.js.map +1 -0
  52. package/dist/lib/helpers/MediaApiHelper.d.ts +22 -0
  53. package/dist/lib/helpers/MediaApiHelper.js +168 -0
  54. package/dist/lib/helpers/MediaApiHelper.js.map +1 -0
  55. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +32 -0
  56. package/dist/lib/helpers/MediaTypeApiHelper.js +390 -0
  57. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -0
  58. package/dist/lib/helpers/MediaTypeUiHelper.d.ts +15 -0
  59. package/dist/lib/helpers/MediaTypeUiHelper.js +39 -0
  60. package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -0
  61. package/dist/lib/helpers/MediaUiHelper.d.ts +37 -0
  62. package/dist/lib/helpers/MediaUiHelper.js +117 -0
  63. package/dist/lib/helpers/MediaUiHelper.js.map +1 -0
  64. package/dist/lib/helpers/MemberApiHelper.d.ts +16 -0
  65. package/dist/lib/helpers/MemberApiHelper.js +88 -0
  66. package/dist/lib/helpers/MemberApiHelper.js.map +1 -0
  67. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +14 -0
  68. package/dist/lib/helpers/MemberGroupApiHelper.js +63 -0
  69. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -0
  70. package/dist/lib/helpers/MemberGroupUiHelper.d.ts +14 -0
  71. package/dist/lib/helpers/MemberGroupUiHelper.js +37 -0
  72. package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -0
  73. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +17 -0
  74. package/dist/lib/helpers/MemberTypeApiHelper.js +121 -0
  75. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -0
  76. package/dist/lib/helpers/MemberTypeUiHelper.d.ts +13 -0
  77. package/dist/lib/helpers/MemberTypeUiHelper.js +35 -0
  78. package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -0
  79. package/dist/lib/helpers/MemberUiHelper.d.ts +40 -0
  80. package/dist/lib/helpers/MemberUiHelper.js +114 -0
  81. package/dist/lib/helpers/MemberUiHelper.js.map +1 -0
  82. package/dist/lib/helpers/ModelsBuilderApiHelper.d.ts +6 -0
  83. package/dist/lib/helpers/ModelsBuilderApiHelper.js +15 -0
  84. package/dist/lib/helpers/ModelsBuilderApiHelper.js.map +1 -0
  85. package/dist/lib/helpers/ModelsBuilderUiHelper.d.ts +9 -0
  86. package/dist/lib/helpers/ModelsBuilderUiHelper.js +22 -0
  87. package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -0
  88. package/dist/lib/helpers/ObjectTypesApiHelper.d.ts +7 -0
  89. package/dist/lib/helpers/ObjectTypesApiHelper.js +25 -0
  90. package/dist/lib/helpers/ObjectTypesApiHelper.js.map +1 -0
  91. package/dist/lib/helpers/PackageApiHelper.d.ts +3 -2
  92. package/dist/lib/helpers/PackageApiHelper.js +6 -3
  93. package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
  94. package/dist/lib/helpers/PackageUiHelper.d.ts +49 -0
  95. package/dist/lib/helpers/PackageUiHelper.js +134 -0
  96. package/dist/lib/helpers/PackageUiHelper.js.map +1 -0
  97. package/dist/lib/helpers/PartialViewApiHelper.d.ts +14 -10
  98. package/dist/lib/helpers/PartialViewApiHelper.js +124 -98
  99. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
  100. package/dist/lib/helpers/PartialViewUiHelper.d.ts +19 -0
  101. package/dist/lib/helpers/PartialViewUiHelper.js +57 -0
  102. package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -0
  103. package/dist/lib/helpers/ProfilingUiHelper.d.ts +11 -0
  104. package/dist/lib/helpers/ProfilingUiHelper.js +27 -0
  105. package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -0
  106. package/dist/lib/helpers/PublishedCacheApiHelper.d.ts +6 -0
  107. package/dist/lib/helpers/PublishedCacheApiHelper.js +15 -0
  108. package/dist/lib/helpers/PublishedCacheApiHelper.js.map +1 -0
  109. package/dist/lib/helpers/PublishedStatusUiHelper.d.ts +19 -0
  110. package/dist/lib/helpers/PublishedStatusUiHelper.js +47 -0
  111. package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -0
  112. package/dist/lib/helpers/RedirectManagementApiHelper.d.ts +10 -0
  113. package/dist/lib/helpers/RedirectManagementApiHelper.js +30 -0
  114. package/dist/lib/helpers/RedirectManagementApiHelper.js.map +1 -0
  115. package/dist/lib/helpers/RedirectManagementUiHelper.d.ts +17 -0
  116. package/dist/lib/helpers/RedirectManagementUiHelper.js +45 -0
  117. package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -0
  118. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +15 -0
  119. package/dist/lib/helpers/{RelationType.js → RelationTypeApiHelper.js} +45 -58
  120. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -0
  121. package/dist/lib/helpers/RelationTypeUiHelper.d.ts +21 -0
  122. package/dist/lib/helpers/RelationTypeUiHelper.js +55 -0
  123. package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -0
  124. package/dist/lib/helpers/ScriptApiHelper.d.ts +15 -10
  125. package/dist/lib/helpers/ScriptApiHelper.js +144 -97
  126. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
  127. package/dist/lib/helpers/ScriptUiHelper.d.ts +18 -0
  128. package/dist/lib/helpers/ScriptUiHelper.js +57 -0
  129. package/dist/lib/helpers/ScriptUiHelper.js.map +1 -0
  130. package/dist/lib/helpers/StylesheetApiHelper.d.ts +14 -10
  131. package/dist/lib/helpers/StylesheetApiHelper.js +131 -105
  132. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
  133. package/dist/lib/helpers/StylesheetUiHelper.d.ts +28 -0
  134. package/dist/lib/helpers/StylesheetUiHelper.js +90 -0
  135. package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -0
  136. package/dist/lib/helpers/TelemetryDataUiHelper.d.ts +10 -0
  137. package/dist/lib/helpers/TelemetryDataUiHelper.js +25 -0
  138. package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -0
  139. package/dist/lib/helpers/TemplateApiHelper.d.ts +1 -0
  140. package/dist/lib/helpers/TemplateApiHelper.js +6 -0
  141. package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
  142. package/dist/lib/helpers/TemplateUiHelper.d.ts +25 -0
  143. package/dist/lib/helpers/TemplateUiHelper.js +91 -0
  144. package/dist/lib/helpers/TemplateUiHelper.js.map +1 -0
  145. package/dist/lib/helpers/TemporaryFileApiHelper.d.ts +1 -1
  146. package/dist/lib/helpers/TemporaryFileApiHelper.js +6 -10
  147. package/dist/lib/helpers/TemporaryFileApiHelper.js.map +1 -1
  148. package/dist/lib/helpers/TranslationUiHelper.d.ts +32 -0
  149. package/dist/lib/helpers/TranslationUiHelper.js +100 -0
  150. package/dist/lib/helpers/TranslationUiHelper.js.map +1 -0
  151. package/dist/lib/helpers/UiBaseLocators.d.ts +212 -0
  152. package/dist/lib/helpers/UiBaseLocators.js +676 -0
  153. package/dist/lib/helpers/UiBaseLocators.js.map +1 -0
  154. package/dist/lib/helpers/UiHelpers.d.ts +60 -8
  155. package/dist/lib/helpers/UiHelpers.js +93 -28
  156. package/dist/lib/helpers/UiHelpers.js.map +1 -1
  157. package/dist/lib/helpers/UserApiHelper.d.ts +7 -3
  158. package/dist/lib/helpers/UserApiHelper.js +35 -13
  159. package/dist/lib/helpers/UserApiHelper.js.map +1 -1
  160. package/dist/lib/helpers/UserGroupApiHelper.d.ts +5 -3
  161. package/dist/lib/helpers/UserGroupApiHelper.js +20 -19
  162. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
  163. package/dist/lib/helpers/UserGroupUiHelper.d.ts +20 -0
  164. package/dist/lib/helpers/UserGroupUiHelper.js +56 -0
  165. package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -0
  166. package/dist/lib/helpers/UserUiHelper.d.ts +41 -0
  167. package/dist/lib/helpers/UserUiHelper.js +116 -0
  168. package/dist/lib/helpers/UserUiHelper.js.map +1 -0
  169. package/dist/lib/helpers/WelcomeDashboardUiHelper.d.ts +9 -0
  170. package/dist/lib/helpers/WelcomeDashboardUiHelper.js +22 -0
  171. package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -0
  172. package/dist/lib/helpers/testExtension.js +5 -0
  173. package/dist/lib/helpers/testExtension.js.map +1 -1
  174. package/dist/tsconfig.tsbuildinfo +1 -1
  175. package/dist/umbraco.config.js +1 -1
  176. package/dist/umbraco.config.js.map +1 -1
  177. package/package.json +8 -6
  178. package/dist/lib/helpers/RelationType.d.ts +0 -15
  179. package/dist/lib/helpers/RelationType.js.map +0 -1
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedirectManagementUiHelper = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const UiBaseLocators_1 = require("./UiBaseLocators");
6
+ class RedirectManagementUiHelper extends UiBaseLocators_1.UiBaseLocators {
7
+ redirectManagementTab;
8
+ enableURLTrackerBtn;
9
+ disableURLTrackerBtn;
10
+ originalUrlTxt;
11
+ searchBtn;
12
+ firstDeleteButton;
13
+ constructor(page) {
14
+ super(page);
15
+ this.redirectManagementTab = page.getByRole('tab', { name: 'Redirect URL Management' });
16
+ this.enableURLTrackerBtn = page.getByLabel('Enable URL tracker');
17
+ this.disableURLTrackerBtn = page.getByLabel('Disable URL tracker');
18
+ this.originalUrlTxt = page.getByLabel('Original URL');
19
+ this.searchBtn = page.getByLabel('Search', { exact: true });
20
+ this.firstDeleteButton = page.locator('uui-button[label="Delete"]').first().locator('svg');
21
+ }
22
+ async clickRedirectManagementTab() {
23
+ await this.redirectManagementTab.click();
24
+ }
25
+ async clickEnableURLTrackerButton() {
26
+ await this.enableURLTrackerBtn.click();
27
+ }
28
+ async clickDisableURLTrackerButton() {
29
+ await this.disableURLTrackerBtn.click();
30
+ }
31
+ async enterOriginalUrl(url) {
32
+ await this.originalUrlTxt.clear();
33
+ await this.originalUrlTxt.fill(url);
34
+ }
35
+ async clickSearchButton() {
36
+ await this.searchBtn.click();
37
+ }
38
+ async deleteFirstRedirectURL() {
39
+ await (0, test_1.expect)(this.firstDeleteButton).toBeVisible();
40
+ await this.firstDeleteButton.click();
41
+ await this.clickConfirmToDeleteButton();
42
+ }
43
+ }
44
+ exports.RedirectManagementUiHelper = RedirectManagementUiHelper;
45
+ //# sourceMappingURL=RedirectManagementUiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedirectManagementUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RedirectManagementUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,0BAA2B,SAAQ,+BAAc;IAC3C,qBAAqB,CAAU;IAC/B,mBAAmB,CAAU;IAC7B,oBAAoB,CAAU;IAC9B,cAAc,CAAU;IACxB,SAAS,CAAU;IACnB,iBAAiB,CAAU;IAE5C,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,yBAAyB,EAAC,CAAC,CAAC;QACtF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,4BAA4B;QAChC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAW;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC1C,CAAC;CACF;AA5CD,gEA4CC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class RedirectManagementUiHelper extends UiBaseLocators {\n private readonly redirectManagementTab: Locator;\n private readonly enableURLTrackerBtn: Locator;\n private readonly disableURLTrackerBtn: Locator;\n private readonly originalUrlTxt: Locator;\n private readonly searchBtn: Locator;\n private readonly firstDeleteButton: Locator;\n\n constructor(page: Page) {\n super(page);\n this.redirectManagementTab = page.getByRole('tab', {name: 'Redirect URL Management'});\n this.enableURLTrackerBtn = page.getByLabel('Enable URL tracker');\n this.disableURLTrackerBtn = page.getByLabel('Disable URL tracker');\n this.originalUrlTxt = page.getByLabel('Original URL');\n this.searchBtn = page.getByLabel('Search', { exact: true });\n this.firstDeleteButton = page.locator('uui-button[label=\"Delete\"]').first().locator('svg');\n }\n\n async clickRedirectManagementTab() {\n await this.redirectManagementTab.click();\n }\n\n async clickEnableURLTrackerButton() {\n await this.enableURLTrackerBtn.click();\n }\n\n async clickDisableURLTrackerButton() {\n await this.disableURLTrackerBtn.click();\n }\n\n async enterOriginalUrl(url: string) {\n await this.originalUrlTxt.clear();\n await this.originalUrlTxt.fill(url);\n }\n\n async clickSearchButton() {\n await this.searchBtn.click();\n }\n\n async deleteFirstRedirectURL() {\n await expect(this.firstDeleteButton).toBeVisible();\n await this.firstDeleteButton.click();\n await this.clickConfirmToDeleteButton();\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class RelationTypeApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ get(id: string): Promise<any>;
6
+ doesExist(id: string): Promise<boolean>;
7
+ create(name: string, isBidirectional: boolean, isDependency: boolean, parentObjectTypeId?: string, childObjectTypeId?: string, id?: string): Promise<string | undefined>;
8
+ update(id: string, relationType: any): Promise<import("playwright-core").APIResponse>;
9
+ delete(id: string): Promise<import("playwright-core").APIResponse>;
10
+ getAllAtRoot(): Promise<import("playwright-core").APIResponse>;
11
+ getItems(ids: any): Promise<any>;
12
+ ensureNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
13
+ getByName(name: string): Promise<any>;
14
+ doesNameExist(name: string): Promise<boolean>;
15
+ }
@@ -6,29 +6,35 @@ class RelationTypeApiHelper {
6
6
  constructor(api) {
7
7
  this.api = api;
8
8
  }
9
- async ensureNameNotExistsAtRoot(name) {
10
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
11
- const json = await response.json();
12
- for (const sb of json.items) {
13
- if (sb.name === name) {
14
- if (sb.id !== null) {
15
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + sb.id);
16
- }
17
- }
18
- }
19
- return null;
9
+ async get(id) {
10
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
11
+ return await response.json();
20
12
  }
21
- async exists(id) {
13
+ async doesExist(id) {
22
14
  const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
23
15
  return response.status() === 200;
24
16
  }
25
- async get(id) {
26
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
27
- const json = await response.json();
28
- if (json !== null) {
29
- return json;
30
- }
31
- return null;
17
+ async create(name, isBidirectional, isDependency, parentObjectTypeId, childObjectTypeId, id) {
18
+ const relationTypeData = {
19
+ "name": name,
20
+ "isBidirectional": isBidirectional,
21
+ "parentObjectType": parentObjectTypeId,
22
+ "childObjectType": childObjectTypeId,
23
+ "isDependency": isDependency,
24
+ "id": id
25
+ };
26
+ const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/relation-type', relationTypeData);
27
+ // Returns the id of the created relationType
28
+ return response.headers().location.split("/").pop();
29
+ }
30
+ async update(id, relationType) {
31
+ return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id, relationType);
32
+ }
33
+ async delete(id) {
34
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
35
+ }
36
+ async getAllAtRoot() {
37
+ return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
32
38
  }
33
39
  async getItems(ids) {
34
40
  let idArray = 'id=' + ids[0];
@@ -43,52 +49,33 @@ class RelationTypeApiHelper {
43
49
  }
44
50
  return null;
45
51
  }
46
- async getAllAtRoot() {
47
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
48
- const json = await response.json();
49
- if (json !== null) {
50
- return json;
52
+ async ensureNameNotExists(name) {
53
+ const rootRelationType = await this.getAllAtRoot();
54
+ const jsonRelationType = await rootRelationType.json();
55
+ for (const relationType of jsonRelationType.items) {
56
+ if (relationType.name === name && relationType.id !== null) {
57
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + relationType.id);
58
+ }
51
59
  }
52
60
  return null;
53
61
  }
54
- async getByNameAtRoot(name) {
55
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
56
- const json = await response.json();
57
- for (const sb of json.items) {
58
- if (sb.name === name) {
59
- if (sb.id !== null) {
60
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + sb.id);
61
- return await response.json();
62
- }
62
+ async getByName(name) {
63
+ const rootRelationType = await this.getAllAtRoot();
64
+ const jsonRelationType = await rootRelationType.json();
65
+ for (const relationType of jsonRelationType.items) {
66
+ if (relationType.name === name && relationType.id !== null) {
67
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + relationType.id);
68
+ return await response.json();
63
69
  }
64
70
  }
65
71
  return null;
66
72
  }
67
- async create(name, id, isBidirectional, isDependency, parentObjectTypeId, childObjectTypeId) {
68
- const relationTypeData = {
69
- "name": name,
70
- "isBidirectional": isBidirectional,
71
- "parentObjectType": parentObjectTypeId,
72
- "childObjectType": childObjectTypeId,
73
- "isDependency": isDependency,
74
- "id": id
75
- };
76
- const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/relation-type', relationTypeData);
77
- // Returns the id of the created relationType
78
- return response.headers().location.split("/").pop();
79
- }
80
- async update(id, relationType) {
81
- return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id, relationType);
82
- }
83
- async delete(id) {
84
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
85
- }
86
- async nameExistsAtRoot(name) {
87
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
88
- const searchBody = await response.json();
73
+ async doesNameExist(name) {
74
+ const rootRelationType = await this.getAllAtRoot();
75
+ const jsonRelationType = await rootRelationType.json();
89
76
  if (name !== null) {
90
- for (const sb of searchBody.items) {
91
- if (sb.name === name) {
77
+ for (const relationType of jsonRelationType.items) {
78
+ if (relationType.name === name) {
92
79
  return true;
93
80
  }
94
81
  }
@@ -97,4 +84,4 @@ class RelationTypeApiHelper {
97
84
  }
98
85
  }
99
86
  exports.RelationTypeApiHelper = RelationTypeApiHelper;
100
- //# sourceMappingURL=RelationType.js.map
87
+ //# sourceMappingURL=RelationTypeApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTypeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RelationTypeApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class RelationTypeApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);\n return await response.json();\n }\n\n async doesExist(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);\n return response.status() === 200;\n }\n\n async create(name: string, isBidirectional: boolean, isDependency: boolean, parentObjectTypeId?: string, childObjectTypeId?: string, id?: string) {\n const relationTypeData = {\n \"name\": name,\n \"isBidirectional\": isBidirectional,\n \"parentObjectType\": parentObjectTypeId,\n \"childObjectType\": childObjectTypeId,\n \"isDependency\": isDependency,\n \"id\": id\n };\n\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/relation-type', relationTypeData);\n // Returns the id of the created relationType\n return response.headers().location.split(\"/\").pop();\n }\n\n async update(id: string, relationType) {\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id, relationType);\n }\n\n async delete(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);\n }\n\n async getAllAtRoot() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');\n }\n\n async getItems(ids) {\n let idArray = 'id=' + ids[0];\n let i: number;\n\n for (i = 1; i < ids.length; ++i) {\n idArray += '&id=' + ids[i];\n }\n\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/item?' + idArray);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async ensureNameNotExists(name: string) {\n const rootRelationType = await this.getAllAtRoot();\n const jsonRelationType = await rootRelationType.json();\n\n for (const relationType of jsonRelationType.items) {\n if (relationType.name === name && relationType.id !== null) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + relationType.id);\n }\n }\n return null;\n }\n\n async getByName(name: string) {\n const rootRelationType = await this.getAllAtRoot();\n const jsonRelationType = await rootRelationType.json();\n\n for (const relationType of jsonRelationType.items) {\n if (relationType.name === name && relationType.id !== null ) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + relationType.id);\n return await response.json();\n }\n }\n return null;\n }\n\n async doesNameExist(name: string) {\n const rootRelationType = await this.getAllAtRoot();\n const jsonRelationType = await rootRelationType.json();\n\n if (name !== null) {\n for (const relationType of jsonRelationType.items) {\n if (relationType.name === name) {\n return true;\n }\n }\n }\n return false;\n }\n}"]}
@@ -0,0 +1,21 @@
1
+ import { Page } from "@playwright/test";
2
+ import { UiBaseLocators } from "./UiBaseLocators";
3
+ export declare class RelationTypeUiHelper extends UiBaseLocators {
4
+ private readonly relationTypeNameTxt;
5
+ private readonly parentToChildRadioBtn;
6
+ private readonly bidirectionalRadioBtn;
7
+ private readonly isDependencySlider;
8
+ private readonly parentDropDownBox;
9
+ private readonly childDropDownBox;
10
+ constructor(page: Page);
11
+ clickActionsMenuForRelationType(name: string): Promise<void>;
12
+ clickRootFolderCaretButton(): Promise<void>;
13
+ clickActionsMenuAtRoot(): Promise<void>;
14
+ openRelationTypeByNameAtRoot(relationTypeName: string): Promise<void>;
15
+ enterRelationTypeName(name: string): Promise<void>;
16
+ clickParentToChildRadioButton(): Promise<void>;
17
+ clickBidirectionalRadioButton(): Promise<void>;
18
+ clickIsDependencySlider(): Promise<void>;
19
+ selectParentOption(option: string): Promise<void>;
20
+ selectChildOption(option: string): Promise<void>;
21
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RelationTypeUiHelper = void 0;
4
+ const UiBaseLocators_1 = require("./UiBaseLocators");
5
+ class RelationTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
6
+ relationTypeNameTxt;
7
+ parentToChildRadioBtn;
8
+ bidirectionalRadioBtn;
9
+ isDependencySlider;
10
+ parentDropDownBox;
11
+ childDropDownBox;
12
+ constructor(page) {
13
+ super(page);
14
+ this.relationTypeNameTxt = page.locator('#name #input');
15
+ this.parentToChildRadioBtn = page.locator("uui-radio[label='Parent to child'] #button");
16
+ this.bidirectionalRadioBtn = page.locator("uui-radio[label='Bidirectional'] #button");
17
+ this.isDependencySlider = page.locator("umb-property-layout[label='Is dependency'] #slider");
18
+ this.parentDropDownBox = page.locator("umb-property-layout[label='Parent'] #native");
19
+ this.childDropDownBox = page.locator("umb-property-layout[label='Child'] #native");
20
+ }
21
+ async clickActionsMenuForRelationType(name) {
22
+ await this.clickActionsMenuForName(name);
23
+ }
24
+ async clickRootFolderCaretButton() {
25
+ await this.clickCaretButtonForName("Relation Types");
26
+ }
27
+ async clickActionsMenuAtRoot() {
28
+ await this.clickActionsMenuForRelationType("Relation Types");
29
+ }
30
+ async openRelationTypeByNameAtRoot(relationTypeName) {
31
+ await this.clickRootFolderCaretButton();
32
+ await this.page.getByLabel(relationTypeName).click();
33
+ }
34
+ async enterRelationTypeName(name) {
35
+ await this.relationTypeNameTxt.clear();
36
+ await this.relationTypeNameTxt.fill(name);
37
+ }
38
+ async clickParentToChildRadioButton() {
39
+ await this.parentToChildRadioBtn.click();
40
+ }
41
+ async clickBidirectionalRadioButton() {
42
+ await this.bidirectionalRadioBtn.click();
43
+ }
44
+ async clickIsDependencySlider() {
45
+ await this.isDependencySlider.click();
46
+ }
47
+ async selectParentOption(option) {
48
+ await this.parentDropDownBox.selectOption({ label: option });
49
+ }
50
+ async selectChildOption(option) {
51
+ await this.childDropDownBox.selectOption({ label: option });
52
+ }
53
+ }
54
+ exports.RelationTypeUiHelper = RelationTypeUiHelper;
55
+ //# sourceMappingURL=RelationTypeUiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationTypeUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RelationTypeUiHelper.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAEhD,MAAa,oBAAqB,SAAQ,+BAAc;IACrC,mBAAmB,CAAU;IAC7B,qBAAqB,CAAU;IAC/B,qBAAqB,CAAU;IAC/B,kBAAkB,CAAU;IAC5B,iBAAiB,CAAU;IAC3B,gBAAgB,CAAU;IAE3C,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;QACxF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;QACtF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAC7F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;QACrF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,+BAA+B,CAAC,IAAY;QAChD,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,gBAAwB;QACzD,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,IAAY;QACtC,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,6BAA6B;QACjC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,6BAA6B;QACjC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAAc;QACrC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AA3DD,oDA2DC","sourcesContent":["import {Locator, Page} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class RelationTypeUiHelper extends UiBaseLocators{\n private readonly relationTypeNameTxt: Locator;\n private readonly parentToChildRadioBtn: Locator;\n private readonly bidirectionalRadioBtn: Locator;\n private readonly isDependencySlider: Locator;\n private readonly parentDropDownBox: Locator;\n private readonly childDropDownBox: Locator;\n\n constructor(page: Page) {\n super(page);\n this.relationTypeNameTxt = page.locator('#name #input');\n this.parentToChildRadioBtn = page.locator(\"uui-radio[label='Parent to child'] #button\");\n this.bidirectionalRadioBtn = page.locator(\"uui-radio[label='Bidirectional'] #button\");\n this.isDependencySlider = page.locator(\"umb-property-layout[label='Is dependency'] #slider\");\n this.parentDropDownBox = page.locator(\"umb-property-layout[label='Parent'] #native\");\n this.childDropDownBox = page.locator(\"umb-property-layout[label='Child'] #native\");\n }\n\n async clickActionsMenuForRelationType(name: string) {\n await this.clickActionsMenuForName(name);\n }\n\n async clickRootFolderCaretButton() {\n await this.clickCaretButtonForName(\"Relation Types\");\n }\n\n async clickActionsMenuAtRoot() {\n await this.clickActionsMenuForRelationType(\"Relation Types\");\n }\n\n async openRelationTypeByNameAtRoot(relationTypeName: string) {\n await this.clickRootFolderCaretButton();\n await this.page.getByLabel(relationTypeName).click();\n }\n\n async enterRelationTypeName(name: string) {\n await this.relationTypeNameTxt.clear();\n await this.relationTypeNameTxt.fill(name);\n }\n\n async clickParentToChildRadioButton() {\n await this.parentToChildRadioBtn.click();\n }\n\n async clickBidirectionalRadioButton() {\n await this.bidirectionalRadioBtn.click();\n }\n\n async clickIsDependencySlider() {\n await this.isDependencySlider.click();\n }\n\n async selectParentOption(option: string) {\n await this.parentDropDownBox.selectOption({ label: option });\n }\n\n async selectChildOption(option: string) {\n await this.childDropDownBox.selectOption({ label: option });\n }\n}"]}
@@ -2,18 +2,23 @@ import { ApiHelpers } from "./ApiHelpers";
2
2
  export declare class ScriptApiHelper {
3
3
  api: ApiHelpers;
4
4
  constructor(api: ApiHelpers);
5
- ensureNameNotExistsAtRoot(name: string): Promise<void | import("playwright-core").APIResponse | null>;
6
- nameExistsAtRoot(name: string): Promise<boolean>;
7
- exists(path: string): Promise<boolean>;
8
5
  get(path: string): Promise<any>;
9
- getByNameAtRoot(name: string): Promise<any>;
10
- create(name: string, content: string, parentPath?: string): Promise<string | undefined>;
11
- update(script: any): Promise<import("playwright-core").APIResponse>;
6
+ doesExist(path: string): Promise<boolean>;
7
+ create(name: string, content: string, parentPath?: string): Promise<string>;
8
+ updateName(path: string, newName: string): Promise<string | undefined>;
9
+ updateContent(path: string, newContent: string): Promise<import("playwright-core").APIResponse>;
12
10
  delete(path: string): Promise<import("playwright-core").APIResponse>;
11
+ getChildren(path: string): Promise<any>;
12
+ getItems(paths: string[]): Promise<any>;
13
+ getAllAtRoot(): Promise<import("playwright-core").APIResponse>;
14
+ doesNameExist(name: string): Promise<any>;
15
+ getByName(name: string): Promise<any>;
16
+ private recurseDeleteChildren;
17
+ private recurseChildren;
18
+ ensureNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
13
19
  getFolder(path: string): Promise<any>;
14
- folderExists(path: string): Promise<boolean>;
15
- getFolderChildren(path: string): Promise<any>;
16
- createFolder(name: string, parentPath?: string): Promise<any>;
20
+ doesFolderExist(path: string): Promise<boolean>;
21
+ createFolder(name: string, parentPath?: string): Promise<string | undefined>;
17
22
  deleteFolder(path: string): Promise<import("playwright-core").APIResponse>;
18
- recurseFolderChildren(path: string): Promise<void>;
23
+ createDefaultScript(name: string): Promise<string>;
19
24
  }
@@ -6,131 +6,178 @@ class ScriptApiHelper {
6
6
  constructor(api) {
7
7
  this.api = api;
8
8
  }
9
- async ensureNameNotExistsAtRoot(name) {
10
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/root?skip=0&take=10000');
11
- const json = await response.json();
12
- for (const sb of json.items) {
13
- if (sb.name === name) {
14
- if (sb.isFolder == false) {
15
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script?path=' + sb.path);
16
- }
17
- else {
18
- if (sb.hasChildren == true) {
19
- return await this.recurseFolderChildren(sb.path);
20
- }
21
- else {
22
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + sb.path);
23
- }
24
- }
25
- }
26
- }
27
- return null;
28
- }
29
- async nameExistsAtRoot(name) {
30
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/root?skip=0&take=10000');
31
- const json = await response.json();
32
- for (const sb of json.items) {
33
- if (sb.name === name) {
34
- return true;
35
- }
36
- }
37
- return false;
38
- }
39
- async exists(path) {
40
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script?path=' + path);
41
- return response.status() === 200;
42
- }
43
9
  async get(path) {
44
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script?path=' + path);
10
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/' + encodeURIComponent(path));
45
11
  return await response.json();
46
12
  }
47
- async getByNameAtRoot(name) {
48
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/root?skip=0&take=10000');
49
- const json = await response.json();
50
- for (const sb of json.items) {
51
- if (sb.name === name) {
52
- if (sb.isFolder === false) {
53
- const script = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script?path=' + sb.path);
54
- return await script.json();
55
- }
56
- else {
57
- const scriptFolder = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + sb.path);
58
- return await scriptFolder.json();
59
- }
60
- }
61
- }
62
- return null;
13
+ async doesExist(path) {
14
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/' + encodeURIComponent(path));
15
+ return response.status() === 200;
63
16
  }
64
- async create(name, content, parentPath = "") {
17
+ async create(name, content, parentPath = "/") {
65
18
  const scriptData = {
66
19
  "name": name,
67
- "content": content,
68
- "parentPath": parentPath
20
+ "parent": {
21
+ "path": parentPath
22
+ },
23
+ "content": content
69
24
  };
70
25
  const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/script', scriptData);
71
26
  // Returns the path of the created Script
72
- return response.headers().location.split("=").pop();
27
+ const path = response.headers().location.split("/v1/script/").pop();
28
+ return decodeURIComponent(path);
73
29
  }
74
- async update(script) {
30
+ async updateName(path, newName) {
75
31
  const scriptData = {
76
- "name": script.name,
77
- "content": script.content,
78
- "existingPath": script.path
32
+ "name": newName
79
33
  };
80
- return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/script', scriptData);
34
+ const response = await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/script/' + encodeURIComponent(path) + '/rename', scriptData);
35
+ // Returns the path of the created Script
36
+ const newPath = response.headers().location.split("/v1/script/").pop();
37
+ if (newPath !== undefined) {
38
+ return decodeURIComponent(newPath);
39
+ }
40
+ return undefined;
81
41
  }
82
- async delete(path) {
83
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script?path=' + path);
42
+ async updateContent(path, newContent) {
43
+ const scriptData = {
44
+ "content": newContent
45
+ };
46
+ return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/script/' + encodeURIComponent(path), scriptData);
84
47
  }
85
- // Folder
86
- async getFolder(path) {
87
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + path);
88
- return await response.json();
48
+ async delete(path) {
49
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/' + encodeURIComponent(path));
89
50
  }
90
- async folderExists(path) {
91
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + path);
92
- return response.status() === 200;
51
+ async getChildren(path) {
52
+ const response = await this.api.get(`${this.api.baseUrl}/umbraco/management/api/v1/tree/script/children?parentPath=${encodeURIComponent(path)}&skip=0&take=10000`);
53
+ const items = await response.json();
54
+ return items.items;
93
55
  }
94
- async getFolderChildren(path) {
95
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/children?path=' + path + '&skip=0&take=10000');
56
+ async getItems(paths) {
57
+ let pathArray = 'path=' + paths[0];
58
+ let i;
59
+ for (i = 1; i < paths.length; ++i) {
60
+ pathArray += '&path=' + paths[i];
61
+ }
62
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/item?' + pathArray);
96
63
  const json = await response.json();
97
64
  if (json !== null) {
98
65
  return json;
99
66
  }
100
67
  return null;
101
68
  }
102
- async createFolder(name, parentPath = "") {
103
- const scriptFolderData = {
104
- "name": name,
105
- "parentPath": parentPath
106
- };
107
- const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/script/folder', scriptFolderData);
108
- // Returns the id of the created scriptFolder
109
- const json = await response.json();
110
- return json.path;
69
+ async getAllAtRoot() {
70
+ return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/root?skip=0&take=10000');
111
71
  }
112
- async deleteFolder(path) {
113
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + path);
114
- }
115
- async recurseFolderChildren(path) {
116
- const parentScript = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/script/children?path=' + path + '&skip=0&take=10000');
117
- const itemsJson = await parentScript.json();
118
- for (const child of itemsJson.items) {
119
- if (child.path !== null) {
120
- if (child.isFolder == true) {
121
- if (child.hasChildren == true) {
122
- await this.recurseFolderChildren(child.path);
123
- }
124
- else {
125
- await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + child.path);
126
- }
72
+ async doesNameExist(name) {
73
+ return await this.getByName(name);
74
+ }
75
+ async getByName(name) {
76
+ const rootScripts = await this.getAllAtRoot();
77
+ const jsonScripts = await rootScripts.json();
78
+ for (const script of jsonScripts.items) {
79
+ if (script.name === name) {
80
+ if (script.isFolder) {
81
+ return this.getFolder(script.path);
127
82
  }
128
83
  else {
129
- await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/?path=' + child.path);
84
+ return this.get(script.path);
85
+ }
86
+ }
87
+ else if (script.isFolder && script.hasChildren) {
88
+ const result = await this.recurseChildren(name, script.path, false);
89
+ if (result) {
90
+ return result;
91
+ }
92
+ }
93
+ }
94
+ return false;
95
+ }
96
+ async recurseDeleteChildren(scriptFolder) {
97
+ if (!scriptFolder.hasChildren) {
98
+ return await this.deleteFolder(scriptFolder.path);
99
+ }
100
+ const items = await this.getChildren(scriptFolder.path);
101
+ for (const child of items) {
102
+ if (child.hasChildren) {
103
+ await this.recurseDeleteChildren(child);
104
+ }
105
+ else if (child.isFolder) {
106
+ await this.deleteFolder(child.path);
107
+ }
108
+ else {
109
+ await this.delete(child.path);
110
+ }
111
+ }
112
+ return await this.deleteFolder(scriptFolder.path);
113
+ }
114
+ async recurseChildren(name, path, toDelete) {
115
+ const items = await this.getChildren(path);
116
+ for (const child of items) {
117
+ if (child.name === name) {
118
+ if (!toDelete) {
119
+ if (child.isFolder) {
120
+ return await this.getFolder(child.path);
121
+ }
122
+ return await this.get(child.path);
123
+ }
124
+ if (child.isFolder) {
125
+ return await this.recurseDeleteChildren(child);
126
+ }
127
+ return await this.delete(child.path);
128
+ }
129
+ else if (child.hasChildren) {
130
+ return await this.recurseChildren(name, child.path, toDelete);
131
+ }
132
+ }
133
+ return false;
134
+ }
135
+ async ensureNameNotExists(name) {
136
+ const rootScripts = await this.getAllAtRoot();
137
+ const jsonScripts = await rootScripts.json();
138
+ for (const script of jsonScripts.items) {
139
+ if (script.name === name) {
140
+ if (script.isFolder) {
141
+ return await this.recurseDeleteChildren(script);
130
142
  }
143
+ return await this.delete(script.path);
144
+ }
145
+ else if (script.hasChildren) {
146
+ await this.recurseChildren(name, script.path, true);
131
147
  }
132
148
  }
133
- await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/folder?path=' + path);
149
+ return null;
150
+ }
151
+ // Folder
152
+ async getFolder(path) {
153
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/folder/' + encodeURIComponent(path));
154
+ return await response.json();
155
+ }
156
+ async doesFolderExist(path) {
157
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/script/folder/' + encodeURIComponent(path));
158
+ return response.status() === 200;
159
+ }
160
+ async createFolder(name, parentPath = "/") {
161
+ const scriptFolderData = {
162
+ "name": name,
163
+ "parent": {
164
+ "path": parentPath
165
+ }
166
+ };
167
+ const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/script/folder', scriptFolderData);
168
+ // Returns the path of the created Stylesheet folder
169
+ const path = response.headers().location.split("/v1/script/folder/").pop();
170
+ if (path !== undefined) {
171
+ return decodeURIComponent(path);
172
+ }
173
+ return undefined;
174
+ }
175
+ async deleteFolder(path) {
176
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/script/folder/' + encodeURIComponent(path));
177
+ }
178
+ async createDefaultScript(name) {
179
+ await this.ensureNameNotExists(name);
180
+ return await this.create(name + ".cshtml", "@inherits Umbraco.Web.Mvc.UmbracoViewPage");
134
181
  }
135
182
  }
136
183
  exports.ScriptApiHelper = ScriptApiHelper;