@umbraco/playwright-testhelpers 2.0.0-beta.9 → 15.0.0-beta.1

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 (185) hide show
  1. package/dist/lib/helpers/ApiHelpers.d.ts +44 -4
  2. package/dist/lib/helpers/ApiHelpers.js +212 -7
  3. package/dist/lib/helpers/ApiHelpers.js.map +1 -1
  4. package/dist/lib/helpers/ContentUiHelper.d.ts +186 -0
  5. package/dist/lib/helpers/ContentUiHelper.js +559 -0
  6. package/dist/lib/helpers/ContentUiHelper.js.map +1 -0
  7. package/dist/lib/helpers/DataTypeApiHelper.d.ts +95 -14
  8. package/dist/lib/helpers/DataTypeApiHelper.js +829 -130
  9. package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
  10. package/dist/lib/helpers/DataTypeUiHelper.d.ts +266 -0
  11. package/dist/lib/helpers/DataTypeUiHelper.js +850 -0
  12. package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -0
  13. package/dist/lib/helpers/DictionaryApiHelper.d.ts +2 -1
  14. package/dist/lib/helpers/DictionaryApiHelper.js +17 -4
  15. package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
  16. package/dist/lib/helpers/DictionaryUiHelper.d.ts +7 -9
  17. package/dist/lib/helpers/DictionaryUiHelper.js +33 -33
  18. package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -1
  19. package/dist/lib/helpers/DocumentApiHelper.d.ts +38 -0
  20. package/dist/lib/helpers/DocumentApiHelper.js +365 -0
  21. package/dist/lib/helpers/DocumentApiHelper.js.map +1 -1
  22. package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +18 -0
  23. package/dist/lib/helpers/DocumentBlueprintApiHelper.js +126 -0
  24. package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -0
  25. package/dist/lib/helpers/DocumentBlueprintUiHelper.d.ts +17 -0
  26. package/dist/lib/helpers/DocumentBlueprintUiHelper.js +52 -0
  27. package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -0
  28. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +42 -0
  29. package/dist/lib/helpers/DocumentTypeApiHelper.js +551 -0
  30. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -0
  31. package/dist/lib/helpers/DocumentTypeUiHelper.d.ts +35 -0
  32. package/dist/lib/helpers/DocumentTypeUiHelper.js +98 -0
  33. package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -0
  34. package/dist/lib/helpers/ExamineManagementUiHelper.d.ts +15 -0
  35. package/dist/lib/helpers/ExamineManagementUiHelper.js +38 -0
  36. package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -0
  37. package/dist/lib/helpers/HealthCheckApiHelper.d.ts +13 -0
  38. package/dist/lib/helpers/HealthCheckApiHelper.js +47 -0
  39. package/dist/lib/helpers/HealthCheckApiHelper.js.map +1 -0
  40. package/dist/lib/helpers/HealthCheckUiHelper.d.ts +23 -0
  41. package/dist/lib/helpers/HealthCheckUiHelper.js +59 -0
  42. package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -0
  43. package/dist/lib/helpers/IndexerApiHelper.d.ts +7 -0
  44. package/dist/lib/helpers/IndexerApiHelper.js +19 -0
  45. package/dist/lib/helpers/IndexerApiHelper.js.map +1 -0
  46. package/dist/lib/helpers/LanguageApiHelper.d.ts +8 -4
  47. package/dist/lib/helpers/LanguageApiHelper.js +46 -26
  48. package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
  49. package/dist/lib/helpers/LanguageUiHelper.d.ts +23 -0
  50. package/dist/lib/helpers/LanguageUiHelper.js +68 -0
  51. package/dist/lib/helpers/LanguageUiHelper.js.map +1 -0
  52. package/dist/lib/helpers/LogViewerUiHelper.d.ts +37 -0
  53. package/dist/lib/helpers/LogViewerUiHelper.js +102 -0
  54. package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -0
  55. package/dist/lib/helpers/LoginApiHelper.d.ts +16 -0
  56. package/dist/lib/helpers/LoginApiHelper.js +107 -0
  57. package/dist/lib/helpers/LoginApiHelper.js.map +1 -0
  58. package/dist/lib/helpers/LoginUiHelper.d.ts +11 -0
  59. package/dist/lib/helpers/LoginUiHelper.js +30 -0
  60. package/dist/lib/helpers/LoginUiHelper.js.map +1 -0
  61. package/dist/lib/helpers/MediaApiHelper.d.ts +32 -0
  62. package/dist/lib/helpers/MediaApiHelper.js +245 -0
  63. package/dist/lib/helpers/MediaApiHelper.js.map +1 -0
  64. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +32 -0
  65. package/dist/lib/helpers/MediaTypeApiHelper.js +390 -0
  66. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -0
  67. package/dist/lib/helpers/MediaTypeUiHelper.d.ts +14 -0
  68. package/dist/lib/helpers/MediaTypeUiHelper.js +38 -0
  69. package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -0
  70. package/dist/lib/helpers/MediaUiHelper.d.ts +49 -0
  71. package/dist/lib/helpers/MediaUiHelper.js +144 -0
  72. package/dist/lib/helpers/MediaUiHelper.js.map +1 -0
  73. package/dist/lib/helpers/MemberApiHelper.d.ts +16 -0
  74. package/dist/lib/helpers/MemberApiHelper.js +88 -0
  75. package/dist/lib/helpers/MemberApiHelper.js.map +1 -0
  76. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +14 -0
  77. package/dist/lib/helpers/MemberGroupApiHelper.js +62 -0
  78. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -0
  79. package/dist/lib/helpers/MemberGroupUiHelper.d.ts +20 -0
  80. package/dist/lib/helpers/MemberGroupUiHelper.js +57 -0
  81. package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -0
  82. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +17 -0
  83. package/dist/lib/helpers/MemberTypeApiHelper.js +121 -0
  84. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -0
  85. package/dist/lib/helpers/MemberTypeUiHelper.d.ts +13 -0
  86. package/dist/lib/helpers/MemberTypeUiHelper.js +35 -0
  87. package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -0
  88. package/dist/lib/helpers/MemberUiHelper.d.ts +45 -0
  89. package/dist/lib/helpers/MemberUiHelper.js +130 -0
  90. package/dist/lib/helpers/MemberUiHelper.js.map +1 -0
  91. package/dist/lib/helpers/ModelsBuilderApiHelper.d.ts +6 -0
  92. package/dist/lib/helpers/ModelsBuilderApiHelper.js +15 -0
  93. package/dist/lib/helpers/ModelsBuilderApiHelper.js.map +1 -0
  94. package/dist/lib/helpers/ModelsBuilderUiHelper.d.ts +9 -0
  95. package/dist/lib/helpers/ModelsBuilderUiHelper.js +22 -0
  96. package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -0
  97. package/dist/lib/helpers/ObjectTypesApiHelper.d.ts +7 -0
  98. package/dist/lib/helpers/ObjectTypesApiHelper.js +25 -0
  99. package/dist/lib/helpers/ObjectTypesApiHelper.js.map +1 -0
  100. package/dist/lib/helpers/PackageApiHelper.d.ts +3 -2
  101. package/dist/lib/helpers/PackageApiHelper.js +6 -3
  102. package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
  103. package/dist/lib/helpers/PackageUiHelper.d.ts +49 -0
  104. package/dist/lib/helpers/PackageUiHelper.js +134 -0
  105. package/dist/lib/helpers/PackageUiHelper.js.map +1 -0
  106. package/dist/lib/helpers/PartialViewApiHelper.d.ts +5 -4
  107. package/dist/lib/helpers/PartialViewApiHelper.js +36 -30
  108. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
  109. package/dist/lib/helpers/PartialViewUiHelper.d.ts +7 -11
  110. package/dist/lib/helpers/PartialViewUiHelper.js +27 -36
  111. package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -1
  112. package/dist/lib/helpers/ProfilingUiHelper.d.ts +11 -0
  113. package/dist/lib/helpers/ProfilingUiHelper.js +27 -0
  114. package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -0
  115. package/dist/lib/helpers/PublishedCacheApiHelper.d.ts +6 -0
  116. package/dist/lib/helpers/PublishedCacheApiHelper.js +15 -0
  117. package/dist/lib/helpers/PublishedCacheApiHelper.js.map +1 -0
  118. package/dist/lib/helpers/PublishedStatusUiHelper.d.ts +19 -0
  119. package/dist/lib/helpers/PublishedStatusUiHelper.js +47 -0
  120. package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -0
  121. package/dist/lib/helpers/RedirectManagementApiHelper.d.ts +10 -0
  122. package/dist/lib/helpers/RedirectManagementApiHelper.js +30 -0
  123. package/dist/lib/helpers/RedirectManagementApiHelper.js.map +1 -0
  124. package/dist/lib/helpers/RedirectManagementUiHelper.d.ts +17 -0
  125. package/dist/lib/helpers/RedirectManagementUiHelper.js +45 -0
  126. package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -0
  127. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +15 -0
  128. package/dist/lib/helpers/{RelationType.js → RelationTypeApiHelper.js} +45 -58
  129. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -0
  130. package/dist/lib/helpers/RelationTypeUiHelper.d.ts +21 -0
  131. package/dist/lib/helpers/RelationTypeUiHelper.js +55 -0
  132. package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -0
  133. package/dist/lib/helpers/ScriptApiHelper.d.ts +5 -3
  134. package/dist/lib/helpers/ScriptApiHelper.js +44 -26
  135. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
  136. package/dist/lib/helpers/ScriptUiHelper.d.ts +8 -12
  137. package/dist/lib/helpers/ScriptUiHelper.js +31 -40
  138. package/dist/lib/helpers/ScriptUiHelper.js.map +1 -1
  139. package/dist/lib/helpers/StylesheetApiHelper.d.ts +6 -4
  140. package/dist/lib/helpers/StylesheetApiHelper.js +47 -41
  141. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
  142. package/dist/lib/helpers/StylesheetUiHelper.d.ts +17 -15
  143. package/dist/lib/helpers/StylesheetUiHelper.js +60 -47
  144. package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
  145. package/dist/lib/helpers/TelemetryDataUiHelper.d.ts +10 -0
  146. package/dist/lib/helpers/TelemetryDataUiHelper.js +25 -0
  147. package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -0
  148. package/dist/lib/helpers/TemplateApiHelper.d.ts +1 -0
  149. package/dist/lib/helpers/TemplateApiHelper.js +6 -0
  150. package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
  151. package/dist/lib/helpers/TemplateUiHelper.d.ts +14 -18
  152. package/dist/lib/helpers/TemplateUiHelper.js +65 -59
  153. package/dist/lib/helpers/TemplateUiHelper.js.map +1 -1
  154. package/dist/lib/helpers/TemporaryFileApiHelper.d.ts +17 -1
  155. package/dist/lib/helpers/TemporaryFileApiHelper.js +23 -10
  156. package/dist/lib/helpers/TemporaryFileApiHelper.js.map +1 -1
  157. package/dist/lib/helpers/UiBaseLocators.d.ts +213 -9
  158. package/dist/lib/helpers/UiBaseLocators.js +703 -39
  159. package/dist/lib/helpers/UiBaseLocators.js.map +1 -1
  160. package/dist/lib/helpers/UiHelpers.d.ts +49 -7
  161. package/dist/lib/helpers/UiHelpers.js +75 -21
  162. package/dist/lib/helpers/UiHelpers.js.map +1 -1
  163. package/dist/lib/helpers/UserApiHelper.d.ts +19 -10
  164. package/dist/lib/helpers/UserApiHelper.js +72 -20
  165. package/dist/lib/helpers/UserApiHelper.js.map +1 -1
  166. package/dist/lib/helpers/UserGroupApiHelper.d.ts +5 -3
  167. package/dist/lib/helpers/UserGroupApiHelper.js +20 -19
  168. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
  169. package/dist/lib/helpers/UserGroupUiHelper.d.ts +20 -0
  170. package/dist/lib/helpers/UserGroupUiHelper.js +56 -0
  171. package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -0
  172. package/dist/lib/helpers/UserUiHelper.d.ts +80 -0
  173. package/dist/lib/helpers/UserUiHelper.js +221 -0
  174. package/dist/lib/helpers/UserUiHelper.js.map +1 -0
  175. package/dist/lib/helpers/WelcomeDashboardUiHelper.d.ts +9 -0
  176. package/dist/lib/helpers/WelcomeDashboardUiHelper.js +22 -0
  177. package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -0
  178. package/dist/lib/helpers/testExtension.js +4 -0
  179. package/dist/lib/helpers/testExtension.js.map +1 -1
  180. package/dist/tsconfig.tsbuildinfo +1 -1
  181. package/dist/umbraco.config.js +1 -1
  182. package/dist/umbraco.config.js.map +1 -1
  183. package/package.json +9 -11
  184. package/dist/lib/helpers/RelationType.d.ts +0 -15
  185. package/dist/lib/helpers/RelationType.js.map +0 -1
@@ -1,54 +1,74 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LanguagesApiHelper = void 0;
4
- class LanguagesApiHelper {
3
+ exports.LanguageApiHelper = void 0;
4
+ class LanguageApiHelper {
5
5
  api;
6
6
  constructor(api) {
7
7
  this.api = api;
8
8
  }
9
+ async get(isoCode) {
10
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
11
+ const json = await response.json();
12
+ return json !== null ? json : null;
13
+ }
14
+ async doesExist(isoCode) {
15
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
16
+ return response.status() === 200;
17
+ }
9
18
  async create(name, isDefault = false, isMandatory = false, isoCode, fallbackIsoCode = "en-US") {
10
- const langData = {
19
+ const languageData = {
11
20
  "name": name,
12
21
  "isDefault": isDefault,
13
22
  "isMandatory": isMandatory,
14
23
  "fallbackIsoCode": fallbackIsoCode,
15
24
  "isoCode": isoCode
16
25
  };
17
- const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/language', langData);
26
+ const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/language', languageData);
18
27
  // Returns the id of the created language
19
28
  return response.headers().location.split("/").pop();
20
29
  }
21
- async get(isoCode) {
22
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
23
- const json = await response.json();
24
- if (json !== null) {
25
- return json;
30
+ async update(isoCode, language) {
31
+ return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode, language);
32
+ }
33
+ async delete(isoCode) {
34
+ return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
35
+ }
36
+ async getByName(name) {
37
+ const allLanguages = await this.getAll();
38
+ const jsonLanguages = await allLanguages.json();
39
+ for (const language of jsonLanguages.items) {
40
+ if (language.name === name && language.isoCode !== null) {
41
+ return await this.get(language.isoCode);
42
+ }
26
43
  }
27
44
  return null;
28
45
  }
29
- async getByName(name) {
30
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language?skip=0&take=100000');
31
- const json = await response.json();
32
- for (const sb of json.items) {
33
- if (sb.name === name) {
34
- if (sb.isoCode !== null) {
35
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + sb.isoCode);
36
- return await response.json();
37
- }
46
+ async ensureNameNotExists(name) {
47
+ const allLanguages = await this.getAll();
48
+ const jsonLanguages = await allLanguages.json();
49
+ for (const language of jsonLanguages.items) {
50
+ if (language.name === name && language.isoCode !== null) {
51
+ return await this.delete(language.isoCode);
38
52
  }
39
53
  }
40
54
  return null;
41
55
  }
42
- async exists(isoCode) {
43
- const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
44
- return response.status() === 200;
56
+ async ensureIsoCodeNotExists(isoCode) {
57
+ const allLanguages = await this.getAll();
58
+ const jsonLanguages = await allLanguages.json();
59
+ for (const language of jsonLanguages.items) {
60
+ if (language.isoCode === isoCode) {
61
+ return await this.delete(language.isoCode);
62
+ }
63
+ }
64
+ return null;
45
65
  }
46
- async update(isoCode, language) {
47
- return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode, language);
66
+ async getAll() {
67
+ return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language?skip=0&take=10000');
48
68
  }
49
- async delete(isoCode) {
50
- return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);
69
+ async createDanishLanguage() {
70
+ return await this.create("Danish", false, false, "da");
51
71
  }
52
72
  }
53
- exports.LanguagesApiHelper = LanguagesApiHelper;
73
+ exports.LanguageApiHelper = LanguageApiHelper;
54
74
  //# sourceMappingURL=LanguageApiHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LanguageApiHelper.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;IAC7B,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,SAAS,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,OAAe,EAAE,eAAe,GAAG,OAAO;QAC3G,MAAM,QAAQ,GAAG;YACf,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,WAAW;YAC1B,iBAAiB,EAAE,eAAe;YAClC,SAAS,EAAE,OAAO;SACnB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,qCAAqC,EAAE,QAAQ,CAAC,CAAC;QACzG,yCAAyC;QACzC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,OAAO,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,wDAAwD,CAAC,CAAC;QACjH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE;oBACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC5G,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;iBAC9B;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,OAAO,CAAC,CAAC;QACzG,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,QAAgB;QAC5C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3G,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,OAAO,CAAC,CAAC;IACpG,CAAC;CACF;AAzDD,gDAyDC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class LanguagesApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async create(name: string, isDefault = false, isMandatory = false, isoCode: string, fallbackIsoCode = \"en-US\") {\n const langData = {\n \"name\": name,\n \"isDefault\": isDefault,\n \"isMandatory\": isMandatory,\n \"fallbackIsoCode\": fallbackIsoCode,\n \"isoCode\": isoCode\n };\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/language', langData);\n // Returns the id of the created language\n return response.headers().location.split(\"/\").pop();\n }\n\n async get(isoCode: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async getByName(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language?skip=0&take=100000');\n const json = await response.json();\n\n for (const sb of json.items) {\n if (sb.name === name) {\n if (sb.isoCode !== null) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + sb.isoCode);\n return await response.json();\n }\n }\n }\n return null;\n }\n\n async exists(isoCode: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n return response.status() === 200;\n }\n\n async update(isoCode: string, language: object) {\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode, language);\n }\n\n async delete(isoCode: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n }\n}"]}
1
+ {"version":3,"file":"LanguageApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LanguageApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class LanguageApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async get(isoCode: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n const json = await response.json();\n\n return json !== null ? json : null;\n }\n\n async doesExist(isoCode: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n return response.status() === 200;\n }\n\n async create(name: string, isDefault = false, isMandatory = false, isoCode: string, fallbackIsoCode = \"en-US\") {\n const languageData = {\n \"name\": name,\n \"isDefault\": isDefault,\n \"isMandatory\": isMandatory,\n \"fallbackIsoCode\": fallbackIsoCode,\n \"isoCode\": isoCode\n };\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/language', languageData);\n // Returns the id of the created language\n return response.headers().location.split(\"/\").pop();\n }\n\n async update(isoCode: string, language: object) {\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode, language);\n }\n\n async delete(isoCode: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/language/' + isoCode);\n }\n\n async getByName(name: string) {\n const allLanguages = await this.getAll();\n const jsonLanguages = await allLanguages.json();\n\n for (const language of jsonLanguages.items) {\n if (language.name === name && language.isoCode !== null) {\n return await this.get(language.isoCode);\n }\n }\n return null;\n }\n\n async ensureNameNotExists(name: string) {\n const allLanguages = await this.getAll();\n const jsonLanguages = await allLanguages.json();\n\n for (const language of jsonLanguages.items) {\n if (language.name === name && language.isoCode !== null) { \n return await this.delete(language.isoCode);\n }\n }\n return null;\n }\n \n async ensureIsoCodeNotExists(isoCode: string) {\n const allLanguages = await this.getAll();\n const jsonLanguages = await allLanguages.json();\n\n for (const language of jsonLanguages.items) {\n if (language.isoCode === isoCode) { \n return await this.delete(language.isoCode);\n }\n }\n return null;\n }\n\n async getAll() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/language?skip=0&take=10000');\n }\n \n async createDanishLanguage() {\n return await this.create(\"Danish\", false, false, \"da\");\n }\n}"]}
@@ -0,0 +1,23 @@
1
+ import { Page } from "@playwright/test";
2
+ import { UiBaseLocators } from "./UiBaseLocators";
3
+ export declare class LanguageUiHelper extends UiBaseLocators {
4
+ private readonly languagesMenu;
5
+ private readonly languageDropdown;
6
+ private readonly defaultLanguageToggle;
7
+ private readonly mandatoryLanguageToggle;
8
+ private readonly addFallbackLanguageBtn;
9
+ private readonly languageTable;
10
+ constructor(page: Page);
11
+ clickLanguagesMenu(): Promise<void>;
12
+ goToLanguages(): Promise<void>;
13
+ removeFallbackLanguageByName(name: string): Promise<void>;
14
+ chooseLanguageByName(name: string): Promise<void>;
15
+ clickLanguageByName(name: string): Promise<void>;
16
+ isLanguageNameVisible(name: string, isVisible?: boolean): Promise<void>;
17
+ switchDefaultLanguageOption(): Promise<void>;
18
+ switchMandatoryLanguageOption(): Promise<void>;
19
+ clickAddFallbackLanguageButton(): Promise<void>;
20
+ clickRemoveLanguageByName(name: string): Promise<void>;
21
+ removeLanguageByName(name: string): Promise<void>;
22
+ selectFallbackLanguageByName(name: string): Promise<void>;
23
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LanguageUiHelper = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const UiBaseLocators_1 = require("./UiBaseLocators");
6
+ const ConstantHelper_1 = require("./ConstantHelper");
7
+ class LanguageUiHelper extends UiBaseLocators_1.UiBaseLocators {
8
+ languagesMenu;
9
+ languageDropdown;
10
+ defaultLanguageToggle;
11
+ mandatoryLanguageToggle;
12
+ addFallbackLanguageBtn;
13
+ languageTable;
14
+ constructor(page) {
15
+ super(page);
16
+ this.languagesMenu = page.locator('umb-menu').getByLabel('Languages');
17
+ this.languageDropdown = page.locator('umb-input-culture-select #expand-symbol-wrapper');
18
+ this.defaultLanguageToggle = page.locator('uui-toggle').filter({ hasText: /Default language/ }).locator('#slider');
19
+ this.mandatoryLanguageToggle = page.locator('uui-toggle').filter({ hasText: /Mandatory language/ }).locator('#slider');
20
+ this.addFallbackLanguageBtn = page.locator('#add-button');
21
+ this.languageTable = page.locator('umb-language-table-collection-view');
22
+ }
23
+ async clickLanguagesMenu() {
24
+ await this.languagesMenu.click();
25
+ }
26
+ async goToLanguages() {
27
+ await this.goToSection(ConstantHelper_1.ConstantHelper.sections.settings);
28
+ await this.clickLanguagesMenu();
29
+ await (0, test_1.expect)(this.createLink).toBeVisible();
30
+ }
31
+ async removeFallbackLanguageByName(name) {
32
+ await this.page.locator('uui-ref-node[name="' + name + '"]').getByLabel('Remove').click();
33
+ await this.confirmToRemoveBtn.click();
34
+ }
35
+ async chooseLanguageByName(name) {
36
+ await this.languageDropdown.click();
37
+ await this.page.locator('umb-input-culture-select').getByText(name, { exact: true }).click();
38
+ }
39
+ async clickLanguageByName(name) {
40
+ await this.languageTable.getByText(name, { exact: true }).click();
41
+ }
42
+ async isLanguageNameVisible(name, isVisible = true) {
43
+ return await (0, test_1.expect)(this.languageTable.getByText(name, { exact: true })).toBeVisible({ visible: isVisible });
44
+ }
45
+ async switchDefaultLanguageOption() {
46
+ await this.defaultLanguageToggle.click();
47
+ }
48
+ async switchMandatoryLanguageOption() {
49
+ await this.mandatoryLanguageToggle.click();
50
+ }
51
+ async clickAddFallbackLanguageButton() {
52
+ await this.addFallbackLanguageBtn.click();
53
+ }
54
+ async clickRemoveLanguageByName(name) {
55
+ await this.page.locator('uui-table-row').filter({ has: this.page.getByText(name, { exact: true }) }).locator('uui-symbol-more').click();
56
+ }
57
+ async removeLanguageByName(name) {
58
+ await this.clickRemoveLanguageByName(name);
59
+ await this.deleteBtn.click();
60
+ await this.confirmToDeleteBtn.click();
61
+ }
62
+ async selectFallbackLanguageByName(name) {
63
+ await this.page.locator('umb-language-picker-modal').getByLabel(name).click();
64
+ await this.clickSubmitButton();
65
+ }
66
+ }
67
+ exports.LanguageUiHelper = LanguageUiHelper;
68
+ //# sourceMappingURL=LanguageUiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LanguageUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\nimport { ConstantHelper } from \"./ConstantHelper\";\n\nexport class LanguageUiHelper extends UiBaseLocators{\n private readonly languagesMenu: Locator;\n private readonly languageDropdown: Locator;\n private readonly defaultLanguageToggle: Locator;\n private readonly mandatoryLanguageToggle: Locator;\n private readonly addFallbackLanguageBtn: Locator;\n private readonly languageTable: Locator;\n\n constructor(page: Page) {\n super(page);\n this.languagesMenu = page.locator('umb-menu').getByLabel('Languages');\n this.languageDropdown = page.locator('umb-input-culture-select #expand-symbol-wrapper');\n this.defaultLanguageToggle = page.locator('uui-toggle').filter({ hasText: /Default language/ }).locator('#slider');\n this.mandatoryLanguageToggle = page.locator('uui-toggle').filter({ hasText: /Mandatory language/ }).locator('#slider');\n this.addFallbackLanguageBtn = page.locator('#add-button');\n this.languageTable = page.locator('umb-language-table-collection-view');\n }\n\n async clickLanguagesMenu() {\n await this.languagesMenu.click();\n }\n\n async goToLanguages() {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.clickLanguagesMenu();\n await expect(this.createLink).toBeVisible();\n }\n\n async removeFallbackLanguageByName(name: string) {\n await this.page.locator('uui-ref-node[name=\"' + name + '\"]').getByLabel('Remove').click();\n await this.confirmToRemoveBtn.click();\n }\n\n async chooseLanguageByName(name: string) {\n await this.languageDropdown.click();\n await this.page.locator('umb-input-culture-select').getByText(name, {exact: true}).click();\n }\n\n async clickLanguageByName(name: string) {\n await this.languageTable.getByText(name, {exact: true}).click();\n }\n\n async isLanguageNameVisible(name: string, isVisible = true) {\n return await expect(this.languageTable.getByText(name, {exact: true})).toBeVisible({visible: isVisible});\n }\n \n async switchDefaultLanguageOption() {\n await this.defaultLanguageToggle.click();\n }\n\n async switchMandatoryLanguageOption() {\n await this.mandatoryLanguageToggle.click();\n }\n\n async clickAddFallbackLanguageButton() {\n await this.addFallbackLanguageBtn.click();\n }\n\n async clickRemoveLanguageByName(name: string) {\n await this.page.locator('uui-table-row').filter({has: this.page.getByText(name, {exact: true})}).locator('uui-symbol-more').click();\n }\n\n async removeLanguageByName(name: string) {\n await this.clickRemoveLanguageByName(name);\n await this.deleteBtn.click();\n await this.confirmToDeleteBtn.click();\n }\n\n async selectFallbackLanguageByName(name: string) {\n await this.page.locator('umb-language-picker-modal').getByLabel(name).click();\n await this.clickSubmitButton();\n }\n}"]}
@@ -0,0 +1,37 @@
1
+ import { Page, Locator } from "@playwright/test";
2
+ import { UiBaseLocators } from "./UiBaseLocators";
3
+ export declare class LogViewerUiHelper extends UiBaseLocators {
4
+ private readonly searchBtn;
5
+ private readonly searchLogsTxt;
6
+ private readonly selectLogLevelBtn;
7
+ private readonly saveSearchHeartIcon;
8
+ private readonly searchNameTxt;
9
+ private readonly saveSearchBtn;
10
+ private readonly overviewBtn;
11
+ private readonly sortLogByTimestampBtn;
12
+ private readonly firstLogLevelTimestamp;
13
+ private readonly firstLogLevelMessage;
14
+ private readonly firstLogSearchResult;
15
+ private readonly savedSearchesBtn;
16
+ private readonly loadingSpinner;
17
+ constructor(page: Page);
18
+ clickSearchButton(): Promise<void>;
19
+ clickOverviewButton(): Promise<void>;
20
+ enterSearchKeyword(keyword: string): Promise<void>;
21
+ selectLogLevel(level: string): Promise<void>;
22
+ doesLogLevelIndicatorDisplay(level: string): Promise<void>;
23
+ doesLogLevelCountMatch(level: string, expectedNumber: number): Promise<void>;
24
+ saveSearch(searchName: string): Promise<void>;
25
+ checkSavedSearch(searchName: string): Locator;
26
+ clickSortLogByTimestampButton(): Promise<void>;
27
+ doesFirstLogHaveTimestamp(timestamp: string): Promise<void>;
28
+ clickPageNumber(pageNumber: number): Promise<void>;
29
+ doesFirstLogHaveMessage(message: string): Promise<void>;
30
+ clickSavedSearchByName(name: string): Promise<void>;
31
+ doesSearchBoxHaveValue(searchValue: string): Promise<void>;
32
+ clickFirstLogSearchResult(): Promise<void>;
33
+ doesDetailedLogHaveText(text: string): Promise<void>;
34
+ clickSavedSearchesButton(): Promise<void>;
35
+ removeSavedSearchByName(name: string): Promise<void>;
36
+ waitUntilLoadingSpinnerInvisible(): Promise<void>;
37
+ }
@@ -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, { timeout: 10000 });
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":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,iBAAkB,SAAQ,+BAAc;IAClC,SAAS,CAAU;IACnB,aAAa,CAAU;IACvB,iBAAiB,CAAU;IAC3B,mBAAmB,CAAU;IAC7B,aAAa,CAAU;IACvB,aAAa,CAAU;IACvB,WAAW,CAAU;IACrB,qBAAqB,CAAU;IAC/B,sBAAsB,CAAU;IAChC,oBAAoB,CAAU;IAC9B,oBAAoB,CAAU;IAC9B,gBAAgB,CAAU;IAC1B,cAAc,CAAU;IAEzC,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;QACpF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC;QAChF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,KAAa;QAC9C,OAAO,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxG,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,cAAsB;QAChE,OAAO,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACrJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;QACpD,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,gBAAgB,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,6BAA6B;QACjC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,SAAiB;QAC/C,OAAO,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,UAAU,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAe;QAC3C,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAY;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,WAAmB;QAC9C,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,IAAY;QACxC,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,IAAY;QACxC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,CAAC;IAC/G,CAAC;IAED,KAAK,CAAC,gCAAgC;QACpC,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAlHD,8CAkHC","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, {timeout: 10000});\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,16 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ import { Page } from "@playwright/test";
3
+ export declare class LoginApiHelper {
4
+ api: ApiHelpers;
5
+ page: Page;
6
+ constructor(api: ApiHelpers, page: Page);
7
+ login(): Promise<{
8
+ cookie: string;
9
+ accessToken: any;
10
+ }>;
11
+ getCookie(): Promise<string>;
12
+ createCodeChallenge(codeVerifier: string): Promise<string>;
13
+ getAuthorizationCode(codeChallenge: string, cookie: string, stateValue: string): Promise<string | null>;
14
+ getRefreshToken(cookie: string, codeVerifier: string, authorizationCode: any): Promise<any>;
15
+ getAccessToken(cookie: string, refreshToken: string): Promise<any>;
16
+ }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoginApiHelper = void 0;
4
+ const umbraco_config_1 = require("../../umbraco.config");
5
+ const crypto_1 = require("crypto");
6
+ class LoginApiHelper {
7
+ api;
8
+ page;
9
+ constructor(api, page) {
10
+ this.api = api;
11
+ this.page = page;
12
+ }
13
+ async login() {
14
+ console.log('Attempting login...');
15
+ const codeVerifier = "12345"; // A static state value for testing
16
+ const codeChallenge = await this.createCodeChallenge(codeVerifier);
17
+ const stateValue = 'myStateValue'; // A static state value for testing
18
+ const cookie = await this.getCookie();
19
+ const authorizationCode = await this.getAuthorizationCode(codeChallenge, cookie, stateValue);
20
+ const refreshToken = await this.getRefreshToken(cookie, codeVerifier, authorizationCode);
21
+ const accessToken = await this.getAccessToken(cookie, refreshToken.refresh_token);
22
+ return { cookie, accessToken };
23
+ }
24
+ async getCookie() {
25
+ const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/login', {
26
+ headers: {
27
+ 'Content-Type': 'application/json',
28
+ Referer: this.api.baseUrl,
29
+ Origin: this.api.baseUrl,
30
+ },
31
+ data: {
32
+ username: umbraco_config_1.umbracoConfig.user.login,
33
+ password: umbraco_config_1.umbracoConfig.user.password
34
+ },
35
+ ignoreHTTPSErrors: true
36
+ });
37
+ // Ensure the cookie is properly captured
38
+ return response.headers()['set-cookie'];
39
+ }
40
+ async createCodeChallenge(codeVerifier) {
41
+ return (0, crypto_1.createHash)('sha256').update(codeVerifier, 'utf8').digest('base64').replace(/=/g, '').trim();
42
+ }
43
+ async getAuthorizationCode(codeChallenge, cookie, stateValue) {
44
+ const authorizationUrl = `${this.api.baseUrl}/umbraco/management/api/v1/security/back-office/authorize?client_id=umbraco-back-office&response_type=code&redirect_uri=${encodeURIComponent(this.api.baseUrl + '/umbraco/oauth_complete')}&code_challenge_method=S256&code_challenge=${codeChallenge}&state=${stateValue}&scope=offline_access&prompt=consent&access_type=offline`;
45
+ const response = await this.page.request.get(authorizationUrl, {
46
+ headers: {
47
+ Cookie: cookie,
48
+ Referer: this.api.baseUrl,
49
+ },
50
+ ignoreHTTPSErrors: true,
51
+ maxRedirects: 0
52
+ });
53
+ // Parse the authorization code from the redirect URL
54
+ const locationHeader = response.headers()['location'];
55
+ if (!locationHeader) {
56
+ throw new Error('Authorization redirect location not found');
57
+ }
58
+ // Extract the authorization code from the location header
59
+ return new URLSearchParams(locationHeader.split('?')[1]).get('code');
60
+ }
61
+ async getRefreshToken(cookie, codeVerifier, authorizationCode) {
62
+ const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {
63
+ headers: {
64
+ 'Content-Type': 'application/x-www-form-urlencoded',
65
+ Cookie: cookie,
66
+ Origin: this.api.baseUrl
67
+ },
68
+ form: {
69
+ grant_type: 'authorization_code',
70
+ client_id: 'umbraco-back-office',
71
+ redirect_uri: this.api.baseUrl + '/umbraco/oauth_complete',
72
+ code: authorizationCode,
73
+ code_verifier: codeVerifier
74
+ },
75
+ ignoreHTTPSErrors: true
76
+ });
77
+ if (response.status() !== 200) {
78
+ console.error('Failed to retrieve refresh token');
79
+ }
80
+ return await response.json();
81
+ }
82
+ async getAccessToken(cookie, refreshToken) {
83
+ const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {
84
+ headers: {
85
+ 'Content-Type': 'application/x-www-form-urlencoded',
86
+ Cookie: cookie,
87
+ Origin: this.api.baseUrl
88
+ },
89
+ form: {
90
+ grant_type: 'refresh_token',
91
+ client_id: 'umbraco-back-office',
92
+ redirect_uri: this.api.baseUrl + '/umbraco/oauth_complete',
93
+ refresh_token: refreshToken,
94
+ },
95
+ ignoreHTTPSErrors: true
96
+ });
97
+ if (response.status() === 200) {
98
+ console.log('Login successful');
99
+ }
100
+ else {
101
+ console.error('Login failed');
102
+ }
103
+ return await response.json();
104
+ }
105
+ }
106
+ exports.LoginApiHelper = LoginApiHelper;
107
+ //# sourceMappingURL=LoginApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/LoginApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {Page} from \"@playwright/test\";\nimport {createHash} from \"crypto\";\n\nexport class LoginApiHelper {\n api: ApiHelpers;\n page: Page;\n\n constructor(api: ApiHelpers, page: Page) {\n this.api = api;\n this.page = page;\n }\n\n public async login() {\n console.log('Attempting login...');\n const codeVerifier = \"12345\"; // A static state value for testing\n const codeChallenge = await this.createCodeChallenge(codeVerifier);\n const stateValue = 'myStateValue'; // A static state value for testing\n const cookie = await this.getCookie();\n const authorizationCode = await this.getAuthorizationCode(codeChallenge, cookie, stateValue);\n const refreshToken = await this.getRefreshToken(cookie, codeVerifier, authorizationCode);\n const accessToken = await this.getAccessToken(cookie, refreshToken.refresh_token);\n return {cookie, accessToken};\n }\n\n async getCookie() {\n const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/login', {\n headers: {\n 'Content-Type': 'application/json',\n Referer: this.api.baseUrl,\n Origin: this.api.baseUrl,\n },\n data: {\n username: umbracoConfig.user.login,\n password: umbracoConfig.user.password\n },\n ignoreHTTPSErrors: true\n });\n\n // Ensure the cookie is properly captured\n return response.headers()['set-cookie'];\n }\n\n async createCodeChallenge(codeVerifier: string) {\n return createHash('sha256').update(codeVerifier, 'utf8').digest('base64').replace(/=/g, '').trim();\n }\n\n async getAuthorizationCode(codeChallenge: string, cookie: string, stateValue: string) {\n const authorizationUrl = `${this.api.baseUrl}/umbraco/management/api/v1/security/back-office/authorize?client_id=umbraco-back-office&response_type=code&redirect_uri=${encodeURIComponent(this.api.baseUrl + '/umbraco/oauth_complete')}&code_challenge_method=S256&code_challenge=${codeChallenge}&state=${stateValue}&scope=offline_access&prompt=consent&access_type=offline`;\n const response = await this.page.request.get(authorizationUrl, {\n headers: {\n Cookie: cookie,\n Referer: this.api.baseUrl,\n },\n ignoreHTTPSErrors: true,\n maxRedirects: 0\n });\n\n // Parse the authorization code from the redirect URL\n const locationHeader = response.headers()['location'];\n if (!locationHeader) {\n throw new Error('Authorization redirect location not found');\n }\n // Extract the authorization code from the location header\n return new URLSearchParams(locationHeader.split('?')[1]).get('code');\n }\n\n async getRefreshToken(cookie: string, codeVerifier: string, authorizationCode) {\n const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Cookie: cookie,\n Origin: this.api.baseUrl\n },\n form: {\n grant_type: 'authorization_code',\n client_id: 'umbraco-back-office',\n redirect_uri: this.api.baseUrl + '/umbraco/oauth_complete',\n code: authorizationCode,\n code_verifier: codeVerifier\n },\n ignoreHTTPSErrors: true\n });\n\n if (response.status() !== 200) {\n console.error('Failed to retrieve refresh token');\n }\n return await response.json();\n }\n\n async getAccessToken(cookie: string, refreshToken: string) {\n const response = await this.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Cookie: cookie,\n Origin: this.api.baseUrl\n },\n form: {\n grant_type: 'refresh_token',\n client_id: 'umbraco-back-office',\n redirect_uri: this.api.baseUrl + '/umbraco/oauth_complete',\n refresh_token: refreshToken,\n },\n ignoreHTTPSErrors: true\n });\n\n if (response.status() === 200) {\n console.log('Login successful');\n } else {\n console.error('Login failed');\n }\n return await response.json();\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,32 @@
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
+ getMediaPathByName(name: string): Promise<{
20
+ mediaPath: any;
21
+ fileName: any;
22
+ } | null>;
23
+ createDefaultMediaFile(mediaName: string): Promise<string | undefined>;
24
+ createDefaultMediaFileAndParentId(mediaName: string, parentId: string): Promise<string | undefined>;
25
+ createDefaultMediaFolder(mediaFolderName: string): Promise<string | undefined>;
26
+ createDefaultMediaFolderAndParentId(mediaName: string, parentId: string): Promise<string | undefined>;
27
+ createDefaultMediaWithImage(mediaName: string): Promise<string | undefined>;
28
+ createDefaultMediaWithArticle(mediaName: string): Promise<string | undefined>;
29
+ createDefaultMediaWithImageAndParentId(mediaName: string, parentId: string): Promise<string | undefined>;
30
+ getAllMediaNames(orderBy?: string, orderDirection?: string): Promise<string[]>;
31
+ doesMediaItemHaveChildName(mediaId: string, childName: string): Promise<boolean>;
32
+ }