@umbraco/playwright-testhelpers 2.0.0-beta.8 → 2.0.0-beta.81

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 (186) hide show
  1. package/dist/lib/helpers/ApiHelpers.d.ts +41 -4
  2. package/dist/lib/helpers/ApiHelpers.js +168 -4
  3. package/dist/lib/helpers/ApiHelpers.js.map +1 -1
  4. package/dist/lib/helpers/ConstantHelper.js.map +1 -1
  5. package/dist/lib/helpers/ContentUiHelper.d.ts +141 -0
  6. package/dist/lib/helpers/ContentUiHelper.js +429 -0
  7. package/dist/lib/helpers/ContentUiHelper.js.map +1 -0
  8. package/dist/lib/helpers/DataTypeApiHelper.d.ts +93 -14
  9. package/dist/lib/helpers/DataTypeApiHelper.js +765 -132
  10. package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
  11. package/dist/lib/helpers/DataTypeUiHelper.d.ts +266 -0
  12. package/dist/lib/helpers/DataTypeUiHelper.js +850 -0
  13. package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -0
  14. package/dist/lib/helpers/DictionaryApiHelper.d.ts +12 -8
  15. package/dist/lib/helpers/DictionaryApiHelper.js +104 -66
  16. package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
  17. package/dist/lib/helpers/DictionaryUiHelper.d.ts +32 -0
  18. package/dist/lib/helpers/DictionaryUiHelper.js +100 -0
  19. package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -0
  20. package/dist/lib/helpers/DocumentApiHelper.d.ts +35 -0
  21. package/dist/lib/helpers/DocumentApiHelper.js +326 -0
  22. package/dist/lib/helpers/DocumentApiHelper.js.map +1 -1
  23. package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +18 -0
  24. package/dist/lib/helpers/DocumentBlueprintApiHelper.js +126 -0
  25. package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -0
  26. package/dist/lib/helpers/DocumentBlueprintUiHelper.d.ts +18 -0
  27. package/dist/lib/helpers/DocumentBlueprintUiHelper.js +54 -0
  28. package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -0
  29. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +37 -0
  30. package/dist/lib/helpers/DocumentTypeApiHelper.js +464 -0
  31. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -0
  32. package/dist/lib/helpers/DocumentTypeUiHelper.d.ts +35 -0
  33. package/dist/lib/helpers/DocumentTypeUiHelper.js +98 -0
  34. package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -0
  35. package/dist/lib/helpers/ExamineManagementUiHelper.d.ts +15 -0
  36. package/dist/lib/helpers/ExamineManagementUiHelper.js +38 -0
  37. package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -0
  38. package/dist/lib/helpers/HealthCheckApiHelper.d.ts +13 -0
  39. package/dist/lib/helpers/HealthCheckApiHelper.js +47 -0
  40. package/dist/lib/helpers/HealthCheckApiHelper.js.map +1 -0
  41. package/dist/lib/helpers/HealthCheckUiHelper.d.ts +23 -0
  42. package/dist/lib/helpers/HealthCheckUiHelper.js +59 -0
  43. package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -0
  44. package/dist/lib/helpers/IndexerApiHelper.d.ts +7 -0
  45. package/dist/lib/helpers/IndexerApiHelper.js +19 -0
  46. package/dist/lib/helpers/IndexerApiHelper.js.map +1 -0
  47. package/dist/lib/helpers/LanguageApiHelper.d.ts +8 -4
  48. package/dist/lib/helpers/LanguageApiHelper.js +46 -26
  49. package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
  50. package/dist/lib/helpers/LanguageUiHelper.d.ts +23 -0
  51. package/dist/lib/helpers/LanguageUiHelper.js +68 -0
  52. package/dist/lib/helpers/LanguageUiHelper.js.map +1 -0
  53. package/dist/lib/helpers/LogViewerUiHelper.d.ts +37 -0
  54. package/dist/lib/helpers/LogViewerUiHelper.js +102 -0
  55. package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -0
  56. package/dist/lib/helpers/LoginApiHelper.d.ts +15 -0
  57. package/dist/lib/helpers/LoginApiHelper.js +85 -0
  58. package/dist/lib/helpers/LoginApiHelper.js.map +1 -0
  59. package/dist/lib/helpers/LoginUiHelper.d.ts +11 -0
  60. package/dist/lib/helpers/LoginUiHelper.js +30 -0
  61. package/dist/lib/helpers/LoginUiHelper.js.map +1 -0
  62. package/dist/lib/helpers/MediaApiHelper.d.ts +32 -0
  63. package/dist/lib/helpers/MediaApiHelper.js +245 -0
  64. package/dist/lib/helpers/MediaApiHelper.js.map +1 -0
  65. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +32 -0
  66. package/dist/lib/helpers/MediaTypeApiHelper.js +390 -0
  67. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -0
  68. package/dist/lib/helpers/MediaTypeUiHelper.d.ts +14 -0
  69. package/dist/lib/helpers/MediaTypeUiHelper.js +38 -0
  70. package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -0
  71. package/dist/lib/helpers/MediaUiHelper.d.ts +60 -0
  72. package/dist/lib/helpers/MediaUiHelper.js +187 -0
  73. package/dist/lib/helpers/MediaUiHelper.js.map +1 -0
  74. package/dist/lib/helpers/MemberApiHelper.d.ts +16 -0
  75. package/dist/lib/helpers/MemberApiHelper.js +88 -0
  76. package/dist/lib/helpers/MemberApiHelper.js.map +1 -0
  77. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +14 -0
  78. package/dist/lib/helpers/MemberGroupApiHelper.js +62 -0
  79. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -0
  80. package/dist/lib/helpers/MemberGroupUiHelper.d.ts +15 -0
  81. package/dist/lib/helpers/MemberGroupUiHelper.js +40 -0
  82. package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -0
  83. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +17 -0
  84. package/dist/lib/helpers/MemberTypeApiHelper.js +121 -0
  85. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -0
  86. package/dist/lib/helpers/MemberTypeUiHelper.d.ts +13 -0
  87. package/dist/lib/helpers/MemberTypeUiHelper.js +35 -0
  88. package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -0
  89. package/dist/lib/helpers/MemberUiHelper.d.ts +42 -0
  90. package/dist/lib/helpers/MemberUiHelper.js +120 -0
  91. package/dist/lib/helpers/MemberUiHelper.js.map +1 -0
  92. package/dist/lib/helpers/ModelsBuilderApiHelper.d.ts +6 -0
  93. package/dist/lib/helpers/ModelsBuilderApiHelper.js +15 -0
  94. package/dist/lib/helpers/ModelsBuilderApiHelper.js.map +1 -0
  95. package/dist/lib/helpers/ModelsBuilderUiHelper.d.ts +9 -0
  96. package/dist/lib/helpers/ModelsBuilderUiHelper.js +22 -0
  97. package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -0
  98. package/dist/lib/helpers/ObjectTypesApiHelper.d.ts +7 -0
  99. package/dist/lib/helpers/ObjectTypesApiHelper.js +25 -0
  100. package/dist/lib/helpers/ObjectTypesApiHelper.js.map +1 -0
  101. package/dist/lib/helpers/PackageApiHelper.d.ts +3 -2
  102. package/dist/lib/helpers/PackageApiHelper.js +6 -3
  103. package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
  104. package/dist/lib/helpers/PackageUiHelper.d.ts +49 -0
  105. package/dist/lib/helpers/PackageUiHelper.js +134 -0
  106. package/dist/lib/helpers/PackageUiHelper.js.map +1 -0
  107. package/dist/lib/helpers/PartialViewApiHelper.d.ts +5 -4
  108. package/dist/lib/helpers/PartialViewApiHelper.js +36 -30
  109. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
  110. package/dist/lib/helpers/PartialViewUiHelper.d.ts +8 -30
  111. package/dist/lib/helpers/PartialViewUiHelper.js +30 -86
  112. package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -1
  113. package/dist/lib/helpers/ProfilingUiHelper.d.ts +11 -0
  114. package/dist/lib/helpers/ProfilingUiHelper.js +27 -0
  115. package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -0
  116. package/dist/lib/helpers/PublishedCacheApiHelper.d.ts +6 -0
  117. package/dist/lib/helpers/PublishedCacheApiHelper.js +15 -0
  118. package/dist/lib/helpers/PublishedCacheApiHelper.js.map +1 -0
  119. package/dist/lib/helpers/PublishedStatusUiHelper.d.ts +19 -0
  120. package/dist/lib/helpers/PublishedStatusUiHelper.js +47 -0
  121. package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -0
  122. package/dist/lib/helpers/RedirectManagementApiHelper.d.ts +10 -0
  123. package/dist/lib/helpers/RedirectManagementApiHelper.js +30 -0
  124. package/dist/lib/helpers/RedirectManagementApiHelper.js.map +1 -0
  125. package/dist/lib/helpers/RedirectManagementUiHelper.d.ts +17 -0
  126. package/dist/lib/helpers/RedirectManagementUiHelper.js +45 -0
  127. package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -0
  128. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +15 -0
  129. package/dist/lib/helpers/{RelationType.js → RelationTypeApiHelper.js} +45 -58
  130. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -0
  131. package/dist/lib/helpers/RelationTypeUiHelper.d.ts +21 -0
  132. package/dist/lib/helpers/RelationTypeUiHelper.js +55 -0
  133. package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -0
  134. package/dist/lib/helpers/ScriptApiHelper.d.ts +5 -3
  135. package/dist/lib/helpers/ScriptApiHelper.js +44 -26
  136. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
  137. package/dist/lib/helpers/ScriptUiHelper.d.ts +18 -0
  138. package/dist/lib/helpers/ScriptUiHelper.js +59 -0
  139. package/dist/lib/helpers/ScriptUiHelper.js.map +1 -0
  140. package/dist/lib/helpers/StylesheetApiHelper.d.ts +6 -4
  141. package/dist/lib/helpers/StylesheetApiHelper.js +47 -41
  142. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
  143. package/dist/lib/helpers/StylesheetUiHelper.d.ts +22 -28
  144. package/dist/lib/helpers/StylesheetUiHelper.js +72 -75
  145. package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
  146. package/dist/lib/helpers/TelemetryDataUiHelper.d.ts +10 -0
  147. package/dist/lib/helpers/TelemetryDataUiHelper.js +25 -0
  148. package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -0
  149. package/dist/lib/helpers/TemplateApiHelper.d.ts +1 -0
  150. package/dist/lib/helpers/TemplateApiHelper.js +6 -0
  151. package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
  152. package/dist/lib/helpers/TemplateUiHelper.d.ts +25 -0
  153. package/dist/lib/helpers/TemplateUiHelper.js +93 -0
  154. package/dist/lib/helpers/TemplateUiHelper.js.map +1 -0
  155. package/dist/lib/helpers/TemporaryFileApiHelper.d.ts +17 -1
  156. package/dist/lib/helpers/TemporaryFileApiHelper.js +23 -10
  157. package/dist/lib/helpers/TemporaryFileApiHelper.js.map +1 -1
  158. package/dist/lib/helpers/UiBaseLocators.d.ts +228 -0
  159. package/dist/lib/helpers/UiBaseLocators.js +720 -0
  160. package/dist/lib/helpers/UiBaseLocators.js.map +1 -0
  161. package/dist/lib/helpers/UiHelpers.d.ts +56 -9
  162. package/dist/lib/helpers/UiHelpers.js +87 -39
  163. package/dist/lib/helpers/UiHelpers.js.map +1 -1
  164. package/dist/lib/helpers/UserApiHelper.d.ts +16 -9
  165. package/dist/lib/helpers/UserApiHelper.js +64 -19
  166. package/dist/lib/helpers/UserApiHelper.js.map +1 -1
  167. package/dist/lib/helpers/UserGroupApiHelper.d.ts +5 -3
  168. package/dist/lib/helpers/UserGroupApiHelper.js +20 -19
  169. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
  170. package/dist/lib/helpers/UserGroupUiHelper.d.ts +20 -0
  171. package/dist/lib/helpers/UserGroupUiHelper.js +56 -0
  172. package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -0
  173. package/dist/lib/helpers/UserUiHelper.d.ts +73 -0
  174. package/dist/lib/helpers/UserUiHelper.js +202 -0
  175. package/dist/lib/helpers/UserUiHelper.js.map +1 -0
  176. package/dist/lib/helpers/WelcomeDashboardUiHelper.d.ts +9 -0
  177. package/dist/lib/helpers/WelcomeDashboardUiHelper.js +22 -0
  178. package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -0
  179. package/dist/lib/helpers/testExtension.js +2 -0
  180. package/dist/lib/helpers/testExtension.js.map +1 -1
  181. package/dist/tsconfig.tsbuildinfo +1 -1
  182. package/dist/umbraco.config.js +1 -1
  183. package/dist/umbraco.config.js.map +1 -1
  184. package/package.json +9 -11
  185. package/dist/lib/helpers/RelationType.d.ts +0 -15
  186. package/dist/lib/helpers/RelationType.js.map +0 -1
@@ -1,28 +1,42 @@
1
1
  import { Page } from "@playwright/test";
2
2
  import { ReportHelper } from "./ReportHelper";
3
3
  import { TelemetryDataApiHelper } from "./TelemetryDataApiHelper";
4
- import { LanguagesApiHelper } from "./LanguageApiHelper";
4
+ import { LanguageApiHelper } from "./LanguageApiHelper";
5
5
  import { DictionaryApiHelper } from "./DictionaryApiHelper";
6
- import { RelationTypeApiHelper } from "./RelationType";
6
+ import { RelationTypeApiHelper } from "./RelationTypeApiHelper";
7
7
  import { UserGroupApiHelper } from "./UserGroupApiHelper";
8
8
  import { TemplateApiHelper } from "./TemplateApiHelper";
9
9
  import { AliasHelper } from "./AliasHelper";
10
10
  import { DataTypeApiHelper } from "./DataTypeApiHelper";
11
11
  import { UserApiHelper } from "./UserApiHelper";
12
12
  import { TemporaryFileApiHelper } from "./TemporaryFileApiHelper";
13
- import { DocumentApiHelper } from "./DocumentApiHelper";
14
13
  import { PackageApiHelper } from "./PackageApiHelper";
15
14
  import { ScriptApiHelper } from "./ScriptApiHelper";
16
15
  import { PartialViewApiHelper } from "./PartialViewApiHelper";
17
16
  import { StylesheetApiHelper } from "./StylesheetApiHelper";
18
17
  import { LogViewerApiHelper } from "./LogViewerApiHelper";
18
+ import { DocumentTypeApiHelper } from "./DocumentTypeApiHelper";
19
+ import { DocumentApiHelper } from "./DocumentApiHelper";
20
+ import { MediaTypeApiHelper } from "./MediaTypeApiHelper";
21
+ import { MediaApiHelper } from "./MediaApiHelper";
22
+ import { ObjectTypesApiHelper } from "./ObjectTypesApiHelper";
23
+ import { ModelsBuilderApiHelper } from "./ModelsBuilderApiHelper";
24
+ import { HealthCheckApiHelper } from "./HealthCheckApiHelper";
25
+ import { IndexerApiHelper } from "./IndexerApiHelper";
26
+ import { PublishedCacheApiHelper } from "./PublishedCacheApiHelper";
27
+ import { RedirectManagementApiHelper } from './RedirectManagementApiHelper';
28
+ import { MemberGroupApiHelper } from './MemberGroupApiHelper';
29
+ import { MemberApiHelper } from './MemberApiHelper';
30
+ import { MemberTypeApiHelper } from "./MemberTypeApiHelper";
31
+ import { DocumentBlueprintApiHelper } from "./DocumentBlueprintApiHelper";
32
+ import { LoginApiHelper } from "./LoginApiHelper";
19
33
  export declare class ApiHelpers {
20
34
  baseUrl: string;
21
35
  page: Page;
22
36
  alias: AliasHelper;
23
37
  report: ReportHelper;
24
38
  telemetry: TelemetryDataApiHelper;
25
- language: LanguagesApiHelper;
39
+ language: LanguageApiHelper;
26
40
  dictionary: DictionaryApiHelper;
27
41
  relationType: RelationTypeApiHelper;
28
42
  userGroup: UserGroupApiHelper;
@@ -30,12 +44,26 @@ export declare class ApiHelpers {
30
44
  dataType: DataTypeApiHelper;
31
45
  user: UserApiHelper;
32
46
  temporaryFile: TemporaryFileApiHelper;
47
+ documentType: DocumentTypeApiHelper;
33
48
  document: DocumentApiHelper;
34
49
  package: PackageApiHelper;
35
50
  script: ScriptApiHelper;
36
51
  partialView: PartialViewApiHelper;
37
52
  stylesheet: StylesheetApiHelper;
38
53
  logViewer: LogViewerApiHelper;
54
+ mediaType: MediaTypeApiHelper;
55
+ media: MediaApiHelper;
56
+ objectTypes: ObjectTypesApiHelper;
57
+ modelsBuilder: ModelsBuilderApiHelper;
58
+ healthCheck: HealthCheckApiHelper;
59
+ indexer: IndexerApiHelper;
60
+ publishedCache: PublishedCacheApiHelper;
61
+ redirectManagement: RedirectManagementApiHelper;
62
+ memberGroup: MemberGroupApiHelper;
63
+ member: MemberApiHelper;
64
+ memberType: MemberTypeApiHelper;
65
+ documentBlueprint: DocumentBlueprintApiHelper;
66
+ login: LoginApiHelper;
39
67
  constructor(page: Page);
40
68
  getBearerToken(): Promise<string>;
41
69
  getCookie(): Promise<string>;
@@ -51,4 +79,13 @@ export declare class ApiHelpers {
51
79
  delete(url: string, data?: object): Promise<import("playwright-core").APIResponse>;
52
80
  put(url: string, data?: object): Promise<import("playwright-core").APIResponse>;
53
81
  postMultiPartForm(url: string, id: any, name: string, mimeType: string, filePath: any): Promise<import("playwright-core").APIResponse>;
82
+ private getTokenIssuedTime;
83
+ private getTokenExpireTime;
84
+ private getRefreshToken;
85
+ isAccessTokenValid(): Promise<void>;
86
+ private currentDateToEpoch;
87
+ private dateToEpoch;
88
+ refreshAccessToken(): Promise<void>;
89
+ private updateLocalStorage;
90
+ private updateCookie;
54
91
  }
@@ -6,20 +6,34 @@ const ReportHelper_1 = require("./ReportHelper");
6
6
  const TelemetryDataApiHelper_1 = require("./TelemetryDataApiHelper");
7
7
  const LanguageApiHelper_1 = require("./LanguageApiHelper");
8
8
  const DictionaryApiHelper_1 = require("./DictionaryApiHelper");
9
- const RelationType_1 = require("./RelationType");
9
+ const RelationTypeApiHelper_1 = require("./RelationTypeApiHelper");
10
10
  const UserGroupApiHelper_1 = require("./UserGroupApiHelper");
11
11
  const TemplateApiHelper_1 = require("./TemplateApiHelper");
12
12
  const AliasHelper_1 = require("./AliasHelper");
13
13
  const DataTypeApiHelper_1 = require("./DataTypeApiHelper");
14
14
  const UserApiHelper_1 = require("./UserApiHelper");
15
15
  const TemporaryFileApiHelper_1 = require("./TemporaryFileApiHelper");
16
- const DocumentApiHelper_1 = require("./DocumentApiHelper");
17
16
  const PackageApiHelper_1 = require("./PackageApiHelper");
18
17
  const ScriptApiHelper_1 = require("./ScriptApiHelper");
19
18
  const PartialViewApiHelper_1 = require("./PartialViewApiHelper");
20
19
  const StylesheetApiHelper_1 = require("./StylesheetApiHelper");
21
20
  const fs = require("fs");
22
21
  const LogViewerApiHelper_1 = require("./LogViewerApiHelper");
22
+ const DocumentTypeApiHelper_1 = require("./DocumentTypeApiHelper");
23
+ const DocumentApiHelper_1 = require("./DocumentApiHelper");
24
+ const MediaTypeApiHelper_1 = require("./MediaTypeApiHelper");
25
+ const MediaApiHelper_1 = require("./MediaApiHelper");
26
+ const ObjectTypesApiHelper_1 = require("./ObjectTypesApiHelper");
27
+ const ModelsBuilderApiHelper_1 = require("./ModelsBuilderApiHelper");
28
+ const HealthCheckApiHelper_1 = require("./HealthCheckApiHelper");
29
+ const IndexerApiHelper_1 = require("./IndexerApiHelper");
30
+ const PublishedCacheApiHelper_1 = require("./PublishedCacheApiHelper");
31
+ const RedirectManagementApiHelper_1 = require("./RedirectManagementApiHelper");
32
+ const MemberGroupApiHelper_1 = require("./MemberGroupApiHelper");
33
+ const MemberApiHelper_1 = require("./MemberApiHelper");
34
+ const MemberTypeApiHelper_1 = require("./MemberTypeApiHelper");
35
+ const DocumentBlueprintApiHelper_1 = require("./DocumentBlueprintApiHelper");
36
+ const LoginApiHelper_1 = require("./LoginApiHelper");
23
37
  class ApiHelpers {
24
38
  baseUrl = umbraco_config_1.umbracoConfig.environment.baseUrl;
25
39
  page;
@@ -34,31 +48,59 @@ class ApiHelpers {
34
48
  dataType;
35
49
  user;
36
50
  temporaryFile;
51
+ documentType;
37
52
  document;
38
53
  package;
39
54
  script;
40
55
  partialView;
41
56
  stylesheet;
42
57
  logViewer;
58
+ mediaType;
59
+ media;
60
+ objectTypes;
61
+ modelsBuilder;
62
+ healthCheck;
63
+ indexer;
64
+ publishedCache;
65
+ redirectManagement;
66
+ memberGroup;
67
+ member;
68
+ memberType;
69
+ documentBlueprint;
70
+ login;
43
71
  constructor(page) {
44
72
  this.page = page;
45
73
  this.alias = new AliasHelper_1.AliasHelper();
46
74
  this.report = new ReportHelper_1.ReportHelper(this);
47
75
  this.telemetry = new TelemetryDataApiHelper_1.TelemetryDataApiHelper(this);
48
- this.language = new LanguageApiHelper_1.LanguagesApiHelper(this);
76
+ this.language = new LanguageApiHelper_1.LanguageApiHelper(this);
49
77
  this.dictionary = new DictionaryApiHelper_1.DictionaryApiHelper(this);
50
- this.relationType = new RelationType_1.RelationTypeApiHelper(this);
78
+ this.relationType = new RelationTypeApiHelper_1.RelationTypeApiHelper(this);
51
79
  this.userGroup = new UserGroupApiHelper_1.UserGroupApiHelper(this);
52
80
  this.template = new TemplateApiHelper_1.TemplateApiHelper(this);
53
81
  this.dataType = new DataTypeApiHelper_1.DataTypeApiHelper(this);
54
82
  this.user = new UserApiHelper_1.UserApiHelper(this);
55
83
  this.temporaryFile = new TemporaryFileApiHelper_1.TemporaryFileApiHelper(this);
84
+ this.documentType = new DocumentTypeApiHelper_1.DocumentTypeApiHelper(this);
56
85
  this.document = new DocumentApiHelper_1.DocumentApiHelper(this);
57
86
  this.package = new PackageApiHelper_1.PackageApiHelper(this);
58
87
  this.script = new ScriptApiHelper_1.ScriptApiHelper(this);
59
88
  this.partialView = new PartialViewApiHelper_1.PartialViewApiHelper(this);
60
89
  this.stylesheet = new StylesheetApiHelper_1.StylesheetApiHelper(this);
61
90
  this.logViewer = new LogViewerApiHelper_1.LogViewerApiHelper(this);
91
+ this.mediaType = new MediaTypeApiHelper_1.MediaTypeApiHelper(this);
92
+ this.media = new MediaApiHelper_1.MediaApiHelper(this);
93
+ this.objectTypes = new ObjectTypesApiHelper_1.ObjectTypesApiHelper(this);
94
+ this.modelsBuilder = new ModelsBuilderApiHelper_1.ModelsBuilderApiHelper(this);
95
+ this.healthCheck = new HealthCheckApiHelper_1.HealthCheckApiHelper(this);
96
+ this.indexer = new IndexerApiHelper_1.IndexerApiHelper(this);
97
+ this.publishedCache = new PublishedCacheApiHelper_1.PublishedCacheApiHelper(this);
98
+ this.redirectManagement = new RedirectManagementApiHelper_1.RedirectManagementApiHelper(this);
99
+ this.memberGroup = new MemberGroupApiHelper_1.MemberGroupApiHelper(this);
100
+ this.member = new MemberApiHelper_1.MemberApiHelper(this);
101
+ this.memberType = new MemberTypeApiHelper_1.MemberTypeApiHelper(this);
102
+ this.documentBlueprint = new DocumentBlueprintApiHelper_1.DocumentBlueprintApiHelper(this);
103
+ this.login = new LoginApiHelper_1.LoginApiHelper(this, this.page);
62
104
  }
63
105
  async getBearerToken() {
64
106
  let someStorage = await this.page.context().storageState();
@@ -132,6 +174,128 @@ class ApiHelpers {
132
174
  };
133
175
  return await this.page.request.post(url, options);
134
176
  }
177
+ async getTokenIssuedTime() {
178
+ let someStorage = await this.page.context().storageState();
179
+ let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);
180
+ return Number(someObject.issued_at);
181
+ }
182
+ async getTokenExpireTime() {
183
+ let someStorage = await this.page.context().storageState();
184
+ let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);
185
+ return Number(someObject.expires_in);
186
+ }
187
+ async getRefreshToken() {
188
+ let someStorage = await this.page.context().storageState();
189
+ let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);
190
+ return someObject.refresh_token;
191
+ }
192
+ async isAccessTokenValid() {
193
+ const tokenTimeIssued = await this.getTokenIssuedTime();
194
+ const tokenExpireTime = await this.getTokenExpireTime();
195
+ // Should use a global value
196
+ const globalTestTimeout = 40;
197
+ // We want to have the date minus the globalTimeout, the reason for this is that while a test is running, the token could expire.
198
+ // The refresh token lasts for 300 seconds, while the access token lasts for 60 seconds (NOT TOTALLY SURE) this is why we add 240 seconds
199
+ const tokenRefreshTime = tokenTimeIssued + tokenExpireTime - (globalTestTimeout + 240);
200
+ // We need the currentTimeInEpoch so we can check if the tokenRefreshTime is close to expiring.
201
+ const currentTimeInEpoch = await this.currentDateToEpoch();
202
+ if (tokenRefreshTime <= currentTimeInEpoch) {
203
+ return await this.refreshAccessToken();
204
+ }
205
+ }
206
+ async currentDateToEpoch() {
207
+ const currentTime = new Date(Date.now());
208
+ return this.dateToEpoch(currentTime);
209
+ }
210
+ async dateToEpoch(date) {
211
+ const dateToEpoch = date.getTime();
212
+ // The epoch is in milliseconds, but we want it to be in seconds(Like it is in the token).
213
+ const millisecondsToSeconds = dateToEpoch / 1000;
214
+ // There is no need to have anything after .
215
+ return Number(millisecondsToSeconds.toString().split('.')[0]);
216
+ }
217
+ async refreshAccessToken() {
218
+ const response = await this.page.context().request.post(umbraco_config_1.umbracoConfig.environment.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {
219
+ headers: {
220
+ 'Content-Type': 'application/x-www-form-urlencoded',
221
+ Cookie: await this.getCookie()
222
+ },
223
+ form: {
224
+ grant_type: 'refresh_token',
225
+ client_id: 'umbraco-back-office',
226
+ redirect_uri: umbraco_config_1.umbracoConfig.environment.baseUrl + '/umbraco/oauth_complete',
227
+ refresh_token: await this.getRefreshToken()
228
+ }
229
+ });
230
+ if (response.status() === 200) {
231
+ const jsonStorageValue = await response.json();
232
+ return this.updateLocalStorage(jsonStorageValue);
233
+ }
234
+ console.log('Error refreshing access token.');
235
+ console.log('Attempting login...');
236
+ const storageStateValues = await this.login.login();
237
+ await this.updateCookie(storageStateValues.cookie);
238
+ await this.updateLocalStorage(storageStateValues.token);
239
+ }
240
+ async updateLocalStorage(localStorageValue) {
241
+ const currentStorageState = await this.page.context().storageState();
242
+ let currentLocalStorageValue = JSON.parse(currentStorageState.origins[0].localStorage[0].value);
243
+ const newIssuedTime = await this.currentDateToEpoch();
244
+ currentLocalStorageValue.access_token = localStorageValue.access_token;
245
+ currentLocalStorageValue.refresh_token = localStorageValue.refresh_token;
246
+ currentLocalStorageValue.issued_at = newIssuedTime;
247
+ currentLocalStorageValue.expires_in = localStorageValue.expires_in.toString();
248
+ const filePath = process.env.STORAGE_STAGE_PATH;
249
+ // Updates the user.json file in our CMS project
250
+ if (filePath) {
251
+ const jsonString = fs.readFileSync(filePath, 'utf-8');
252
+ try {
253
+ const data = JSON.parse(jsonString);
254
+ const localStorage = data.origins[0].localStorage[0];
255
+ if (localStorage.name === 'umb:userAuthTokenResponse') {
256
+ localStorage.value = JSON.stringify(currentLocalStorageValue);
257
+ }
258
+ // Converts the object to JSON string
259
+ const updatedJsonString = JSON.stringify(data, null, 2);
260
+ // Writes the updated JSON content to the file
261
+ fs.writeFileSync(filePath, updatedJsonString, 'utf-8');
262
+ }
263
+ catch (error) {
264
+ console.error('Error updating token:', error);
265
+ }
266
+ }
267
+ }
268
+ async updateCookie(cookieString) {
269
+ const currentStorageState = await this.page.context().storageState();
270
+ let currentCookie = currentStorageState.cookies[0];
271
+ const parts = cookieString.split(';').map(part => part.trim());
272
+ // Extract the main key-value pair
273
+ const [nameValue, ...attributes] = parts;
274
+ const [, value] = nameValue.split('=');
275
+ // Updates the cookie value
276
+ currentCookie.value = value;
277
+ // Process each attribute
278
+ for (const attr of attributes) {
279
+ const [key, val] = attr.split('=');
280
+ if (key.trim().toLowerCase() === 'expires') {
281
+ // Updates the expires value and converts it to Epoch
282
+ currentCookie.expires = await this.dateToEpoch(new Date(val));
283
+ }
284
+ }
285
+ const filePath = process.env.STORAGE_STAGE_PATH;
286
+ if (filePath) {
287
+ try {
288
+ const jsonString = fs.readFileSync(filePath, 'utf-8');
289
+ const data = JSON.parse(jsonString);
290
+ data.cookies[0] = currentCookie;
291
+ const updatedJsonString = JSON.stringify(data, null, 2);
292
+ fs.writeFileSync(filePath, updatedJsonString, 'utf-8');
293
+ }
294
+ catch (error) {
295
+ console.error('Error updating cookie:', error);
296
+ }
297
+ }
298
+ }
135
299
  }
136
300
  exports.ApiHelpers = ApiHelpers;
137
301
  //# sourceMappingURL=ApiHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiHelpers.js","sourceRoot":"","sources":["../../../lib/helpers/ApiHelpers.ts"],"names":[],"mappings":";;;AACA,yDAAmD;AACnD,iDAA4C;AAC5C,qEAAgE;AAChE,2DAAuD;AACvD,+DAA0D;AAC1D,iDAAqD;AACrD,6DAAwD;AACxD,2DAAsD;AACtD,+CAA0C;AAC1C,2DAAsD;AACtD,mDAA8C;AAC9C,qEAAgE;AAChE,2DAAsD;AACtD,yDAAoD;AACpD,uDAAkD;AAClD,iEAA4D;AAC5D,+DAA0D;AAC1D,yBAAyB;AACzB,6DAAwD;AAExD,MAAa,UAAU;IACnB,OAAO,GAAW,8BAAa,CAAC,WAAW,CAAC,OAAO,CAAC;IACpD,IAAI,CAAO;IACX,KAAK,CAAc;IACnB,MAAM,CAAe;IACrB,SAAS,CAAyB;IAClC,QAAQ,CAAqB;IAC7B,UAAU,CAAsB;IAChC,YAAY,CAAwB;IACpC,SAAS,CAAqB;IAC9B,QAAQ,CAAoB;IAC5B,QAAQ,CAAoB;IAC5B,IAAI,CAAgB;IACpB,aAAa,CAAyB;IACtC,QAAQ,CAAoB;IAC5B,OAAO,CAAmB;IAC1B,MAAM,CAAkB;IACxB,WAAW,CAAuB;IAClC,UAAU,CAAsB;IAChC,SAAS,CAAqB;IAE9B,YAAY,IAAU;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,yBAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,IAAI,+CAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,sCAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,oCAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,uCAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,+CAAsB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,qCAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,mCAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,iCAAe,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,yCAAmB,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,uCAAkB,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,cAAc;QAChB,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC;QAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1E,OAAO,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,SAAS;QACX,IAAI,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC;QAC3D,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE;YACpC,YAAY,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;SAC1D;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO;YACH,eAAe,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;YAC5C,QAAQ,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;SACnC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,MAAsD;QACzE,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,iBAAiB,EAAE,IAAI;SAC1B,CAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAQ;QACvB,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,OAAO;SACV;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,8BAAa,CAAC,WAAW,CAAC,OAAO,GAAG,kDAAkD,EAAE,QAAQ,CAAC,CAAC;IAC7H,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAa;QACjC,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,EAAE,IAAI;YACV,iBAAiB,EAAE,IAAI;SAC1B,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,IAAa;QACnC,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,EAAE,IAAI;YACV,iBAAiB,EAAE,IAAI;SAC1B,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAa;QAChC,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,EAAE,IAAI;YACV,iBAAiB,EAAE,IAAI;SAC1B,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,EAAE,EAAE,IAAY,EAAE,QAAgB,EAAE,QAAQ;QAC7E,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAChC,SAAS,EAAE;gBACP,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE;oBACF,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;iBACpC;aACJ;YACD,iBAAiB,EAAE,IAAI;SAC1B,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACJ;AA1HD,gCA0HC","sourcesContent":["import {Page} from \"@playwright/test\"\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {ReportHelper} from \"./ReportHelper\";\nimport {TelemetryDataApiHelper} from \"./TelemetryDataApiHelper\";\nimport {LanguagesApiHelper} from \"./LanguageApiHelper\";\nimport {DictionaryApiHelper} from \"./DictionaryApiHelper\";\nimport {RelationTypeApiHelper} from \"./RelationType\";\nimport {UserGroupApiHelper} from \"./UserGroupApiHelper\";\nimport {TemplateApiHelper} from \"./TemplateApiHelper\";\nimport {AliasHelper} from \"./AliasHelper\";\nimport {DataTypeApiHelper} from \"./DataTypeApiHelper\";\nimport {UserApiHelper} from \"./UserApiHelper\";\nimport {TemporaryFileApiHelper} from \"./TemporaryFileApiHelper\";\nimport {DocumentApiHelper} from \"./DocumentApiHelper\";\nimport {PackageApiHelper} from \"./PackageApiHelper\";\nimport {ScriptApiHelper} from \"./ScriptApiHelper\";\nimport {PartialViewApiHelper} from \"./PartialViewApiHelper\";\nimport {StylesheetApiHelper} from \"./StylesheetApiHelper\";\nimport * as fs from \"fs\";\nimport {LogViewerApiHelper} from \"./LogViewerApiHelper\";\n\nexport class ApiHelpers {\n baseUrl: string = umbracoConfig.environment.baseUrl;\n page: Page;\n alias: AliasHelper;\n report: ReportHelper;\n telemetry: TelemetryDataApiHelper;\n language: LanguagesApiHelper;\n dictionary: DictionaryApiHelper;\n relationType: RelationTypeApiHelper;\n userGroup: UserGroupApiHelper;\n template: TemplateApiHelper;\n dataType: DataTypeApiHelper;\n user: UserApiHelper;\n temporaryFile: TemporaryFileApiHelper;\n document: DocumentApiHelper;\n package: PackageApiHelper;\n script: ScriptApiHelper;\n partialView: PartialViewApiHelper;\n stylesheet: StylesheetApiHelper;\n logViewer: LogViewerApiHelper;\n\n constructor(page: Page) {\n this.page = page;\n this.alias = new AliasHelper();\n this.report = new ReportHelper(this);\n this.telemetry = new TelemetryDataApiHelper(this);\n this.language = new LanguagesApiHelper(this);\n this.dictionary = new DictionaryApiHelper(this);\n this.relationType = new RelationTypeApiHelper(this);\n this.userGroup = new UserGroupApiHelper(this);\n this.template = new TemplateApiHelper(this);\n this.dataType = new DataTypeApiHelper(this);\n this.user = new UserApiHelper(this);\n this.temporaryFile = new TemporaryFileApiHelper(this);\n this.document = new DocumentApiHelper(this);\n this.package = new PackageApiHelper(this);\n this.script = new ScriptApiHelper(this);\n this.partialView = new PartialViewApiHelper(this);\n this.stylesheet = new StylesheetApiHelper(this);\n this.logViewer = new LogViewerApiHelper(this);\n }\n\n async getBearerToken() {\n let someStorage = await this.page.context().storageState();\n let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);\n return 'Bearer ' + someObject.access_token;\n }\n\n async getCookie() {\n let someStorage = await this.page.context().storageState();\n let cookieString = \"\";\n for (let cookie of someStorage.cookies) {\n cookieString += cookie.name + '=' + cookie.value + ';';\n }\n return cookieString;\n }\n\n async getHeaders() {\n return {\n 'Authorization': await this.getBearerToken(),\n 'Cookie': await this.getCookie(),\n }\n }\n\n async get(url: string, params?: { [key: string]: string | number | boolean; }) {\n const options = {\n headers: await this.getHeaders(),\n params: params,\n ignoreHTTPSErrors: true\n }\n return this.page.request.get(url, options);\n }\n\n async saveCodeFile(codeFile) {\n if (codeFile == null) {\n return;\n }\n return await this.post(umbracoConfig.environment.baseUrl + '/umbraco/backoffice/UmbracoApi/CodeFile/PostSave', codeFile);\n }\n\n async post(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.post(url, options);\n }\n\n async delete(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.delete(url, options);\n }\n\n async put(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.put(url, options);\n }\n\n async postMultiPartForm(url: string, id, name: string, mimeType: string, filePath) {\n const options = {\n headers: await this.getHeaders(),\n multipart: {\n Id: id,\n File: {\n name: name,\n mimeType: mimeType,\n buffer: fs.readFileSync(filePath)\n }\n },\n ignoreHTTPSErrors: true\n }\n return await this.page.request.post(url, options);\n }\n}"]}
1
+ {"version":3,"file":"ApiHelpers.js","sourceRoot":"","sources":["../../../lib/helpers/ApiHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page} from \"@playwright/test\"\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {ReportHelper} from \"./ReportHelper\";\nimport {TelemetryDataApiHelper} from \"./TelemetryDataApiHelper\";\nimport {LanguageApiHelper} from \"./LanguageApiHelper\";\nimport {DictionaryApiHelper} from \"./DictionaryApiHelper\";\nimport {RelationTypeApiHelper} from \"./RelationTypeApiHelper\";\nimport {UserGroupApiHelper} from \"./UserGroupApiHelper\";\nimport {TemplateApiHelper} from \"./TemplateApiHelper\";\nimport {AliasHelper} from \"./AliasHelper\";\nimport {DataTypeApiHelper} from \"./DataTypeApiHelper\";\nimport {UserApiHelper} from \"./UserApiHelper\";\nimport {TemporaryFileApiHelper} from \"./TemporaryFileApiHelper\";\nimport {PackageApiHelper} from \"./PackageApiHelper\";\nimport {ScriptApiHelper} from \"./ScriptApiHelper\";\nimport {PartialViewApiHelper} from \"./PartialViewApiHelper\";\nimport {StylesheetApiHelper} from \"./StylesheetApiHelper\";\nimport * as fs from \"fs\";\nimport {LogViewerApiHelper} from \"./LogViewerApiHelper\";\nimport {DocumentTypeApiHelper} from \"./DocumentTypeApiHelper\";\nimport {DocumentApiHelper} from \"./DocumentApiHelper\";\nimport {MediaTypeApiHelper} from \"./MediaTypeApiHelper\";\nimport {MediaApiHelper} from \"./MediaApiHelper\";\nimport {ObjectTypesApiHelper} from \"./ObjectTypesApiHelper\";\nimport {ModelsBuilderApiHelper} from \"./ModelsBuilderApiHelper\";\nimport {HealthCheckApiHelper} from \"./HealthCheckApiHelper\";\nimport {IndexerApiHelper} from \"./IndexerApiHelper\";\nimport {PublishedCacheApiHelper} from \"./PublishedCacheApiHelper\";\nimport {RedirectManagementApiHelper} from './RedirectManagementApiHelper';\nimport {MemberGroupApiHelper} from './MemberGroupApiHelper';\nimport {MemberApiHelper} from './MemberApiHelper';\nimport {MemberTypeApiHelper} from \"./MemberTypeApiHelper\";\nimport {DocumentBlueprintApiHelper} from \"./DocumentBlueprintApiHelper\";\nimport {LoginApiHelper} from \"./LoginApiHelper\";\n\nexport class ApiHelpers {\n baseUrl: string = umbracoConfig.environment.baseUrl;\n page: Page;\n alias: AliasHelper;\n report: ReportHelper;\n telemetry: TelemetryDataApiHelper;\n language: LanguageApiHelper;\n dictionary: DictionaryApiHelper;\n relationType: RelationTypeApiHelper;\n userGroup: UserGroupApiHelper;\n template: TemplateApiHelper;\n dataType: DataTypeApiHelper;\n user: UserApiHelper;\n temporaryFile: TemporaryFileApiHelper;\n documentType: DocumentTypeApiHelper;\n document: DocumentApiHelper;\n package: PackageApiHelper;\n script: ScriptApiHelper;\n partialView: PartialViewApiHelper;\n stylesheet: StylesheetApiHelper;\n logViewer: LogViewerApiHelper;\n mediaType: MediaTypeApiHelper;\n media: MediaApiHelper;\n objectTypes: ObjectTypesApiHelper;\n modelsBuilder: ModelsBuilderApiHelper;\n healthCheck: HealthCheckApiHelper;\n indexer: IndexerApiHelper;\n publishedCache: PublishedCacheApiHelper;\n redirectManagement: RedirectManagementApiHelper;\n memberGroup: MemberGroupApiHelper;\n member: MemberApiHelper;\n memberType: MemberTypeApiHelper;\n documentBlueprint: DocumentBlueprintApiHelper;\n login: LoginApiHelper;\n\n constructor(page: Page) {\n this.page = page;\n this.alias = new AliasHelper();\n this.report = new ReportHelper(this);\n this.telemetry = new TelemetryDataApiHelper(this);\n this.language = new LanguageApiHelper(this);\n this.dictionary = new DictionaryApiHelper(this);\n this.relationType = new RelationTypeApiHelper(this);\n this.userGroup = new UserGroupApiHelper(this);\n this.template = new TemplateApiHelper(this);\n this.dataType = new DataTypeApiHelper(this);\n this.user = new UserApiHelper(this);\n this.temporaryFile = new TemporaryFileApiHelper(this);\n this.documentType = new DocumentTypeApiHelper(this);\n this.document = new DocumentApiHelper(this);\n this.package = new PackageApiHelper(this);\n this.script = new ScriptApiHelper(this);\n this.partialView = new PartialViewApiHelper(this);\n this.stylesheet = new StylesheetApiHelper(this);\n this.logViewer = new LogViewerApiHelper(this);\n this.mediaType = new MediaTypeApiHelper(this);\n this.media = new MediaApiHelper(this);\n this.objectTypes = new ObjectTypesApiHelper(this);\n this.modelsBuilder = new ModelsBuilderApiHelper(this);\n this.healthCheck = new HealthCheckApiHelper(this);\n this.indexer = new IndexerApiHelper(this);\n this.publishedCache = new PublishedCacheApiHelper(this);\n this.redirectManagement = new RedirectManagementApiHelper(this);\n this.memberGroup = new MemberGroupApiHelper(this);\n this.member = new MemberApiHelper(this);\n this.memberType = new MemberTypeApiHelper(this);\n this.documentBlueprint = new DocumentBlueprintApiHelper(this);\n this.login = new LoginApiHelper(this, this.page);\n }\n\n async getBearerToken() {\n let someStorage = await this.page.context().storageState();\n let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);\n return 'Bearer ' + someObject.access_token;\n }\n\n async getCookie() {\n let someStorage = await this.page.context().storageState();\n let cookieString = \"\";\n for (let cookie of someStorage.cookies) {\n cookieString += cookie.name + '=' + cookie.value + ';';\n }\n return cookieString;\n }\n\n async getHeaders() {\n return {\n 'Authorization': await this.getBearerToken(),\n 'Cookie': await this.getCookie(),\n }\n }\n\n async get(url: string, params?: { [key: string]: string | number | boolean; }) {\n const options = {\n headers: await this.getHeaders(),\n params: params,\n ignoreHTTPSErrors: true\n }\n return this.page.request.get(url, options);\n }\n\n async saveCodeFile(codeFile) {\n if (codeFile == null) {\n return;\n }\n return await this.post(umbracoConfig.environment.baseUrl + '/umbraco/backoffice/UmbracoApi/CodeFile/PostSave', codeFile);\n }\n\n async post(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.post(url, options);\n }\n\n async delete(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.delete(url, options);\n }\n\n async put(url: string, data?: object) {\n const options = {\n headers: await this.getHeaders(),\n data: data,\n ignoreHTTPSErrors: true\n }\n return await this.page.request.put(url, options);\n }\n\n async postMultiPartForm(url: string, id, name: string, mimeType: string, filePath) {\n const options = {\n headers: await this.getHeaders(),\n multipart: {\n Id: id,\n File: {\n name: name,\n mimeType: mimeType,\n buffer: fs.readFileSync(filePath)\n }\n },\n ignoreHTTPSErrors: true\n }\n return await this.page.request.post(url, options);\n }\n\n private async getTokenIssuedTime() {\n let someStorage = await this.page.context().storageState();\n let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);\n return Number(someObject.issued_at);\n }\n\n private async getTokenExpireTime() {\n let someStorage = await this.page.context().storageState();\n let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);\n return Number(someObject.expires_in);\n }\n\n private async getRefreshToken() {\n let someStorage = await this.page.context().storageState();\n let someObject = JSON.parse(someStorage.origins[0].localStorage[0].value);\n return someObject.refresh_token;\n }\n\n async isAccessTokenValid() {\n const tokenTimeIssued = await this.getTokenIssuedTime();\n const tokenExpireTime = await this.getTokenExpireTime();\n // Should use a global value\n const globalTestTimeout: number = 40;\n // We want to have the date minus the globalTimeout, the reason for this is that while a test is running, the token could expire.\n // The refresh token lasts for 300 seconds, while the access token lasts for 60 seconds (NOT TOTALLY SURE) this is why we add 240 seconds\n const tokenRefreshTime = tokenTimeIssued + tokenExpireTime - (globalTestTimeout + 240);\n // We need the currentTimeInEpoch so we can check if the tokenRefreshTime is close to expiring.\n const currentTimeInEpoch = await this.currentDateToEpoch();\n\n if (tokenRefreshTime <= currentTimeInEpoch) {\n return await this.refreshAccessToken();\n }\n }\n\n private async currentDateToEpoch() {\n const currentTime = new Date(Date.now());\n return this.dateToEpoch(currentTime);\n }\n\n private async dateToEpoch(date: Date) {\n const dateToEpoch = date.getTime();\n // The epoch is in milliseconds, but we want it to be in seconds(Like it is in the token).\n const millisecondsToSeconds = dateToEpoch / 1000;\n // There is no need to have anything after .\n return Number(millisecondsToSeconds.toString().split('.')[0]);\n }\n\n async refreshAccessToken() {\n const response = await this.page.context().request.post(umbracoConfig.environment.baseUrl + '/umbraco/management/api/v1/security/back-office/token', {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Cookie: await this.getCookie()\n },\n form:\n {\n grant_type: 'refresh_token',\n client_id: 'umbraco-back-office',\n redirect_uri: umbracoConfig.environment.baseUrl + '/umbraco/oauth_complete',\n refresh_token: await this.getRefreshToken()\n }\n });\n\n if (response.status() === 200) {\n const jsonStorageValue = await response.json();\n return this.updateLocalStorage(jsonStorageValue);\n }\n\n console.log('Error refreshing access token.');\n console.log('Attempting login...');\n const storageStateValues = await this.login.login();\n await this.updateCookie(storageStateValues.cookie);\n await this.updateLocalStorage(storageStateValues.token);\n }\n\n private async updateLocalStorage(localStorageValue) {\n const currentStorageState = await this.page.context().storageState();\n let currentLocalStorageValue = JSON.parse(currentStorageState.origins[0].localStorage[0].value);\n const newIssuedTime = await this.currentDateToEpoch();\n\n currentLocalStorageValue.access_token = localStorageValue.access_token;\n currentLocalStorageValue.refresh_token = localStorageValue.refresh_token;\n currentLocalStorageValue.issued_at = newIssuedTime;\n currentLocalStorageValue.expires_in = localStorageValue.expires_in.toString();\n\n const filePath = process.env.STORAGE_STAGE_PATH;\n // Updates the user.json file in our CMS project\n if (filePath) {\n const jsonString = fs.readFileSync(filePath, 'utf-8');\n try {\n const data = JSON.parse(jsonString);\n const localStorage = data.origins[0].localStorage[0];\n if (localStorage.name === 'umb:userAuthTokenResponse') {\n localStorage.value = JSON.stringify(currentLocalStorageValue);\n }\n\n // Converts the object to JSON string\n const updatedJsonString = JSON.stringify(data, null, 2);\n // Writes the updated JSON content to the file\n fs.writeFileSync(filePath, updatedJsonString, 'utf-8');\n } catch (error) {\n console.error('Error updating token:', error);\n }\n }\n }\n\n private async updateCookie(cookieString: string) {\n const currentStorageState = await this.page.context().storageState();\n let currentCookie = currentStorageState.cookies[0];\n\n const parts = cookieString.split(';').map(part => part.trim());\n // Extract the main key-value pair\n const [nameValue, ...attributes] = parts;\n const [, value] = nameValue.split('=');\n // Updates the cookie value\n currentCookie.value = value;\n // Process each attribute\n for (const attr of attributes) {\n const [key, val] = attr.split('=');\n if (key.trim().toLowerCase() === 'expires') {\n // Updates the expires value and converts it to Epoch\n currentCookie.expires = await this.dateToEpoch(new Date(val));\n }\n }\n\n const filePath = process.env.STORAGE_STAGE_PATH;\n\n if (filePath) {\n try {\n const jsonString = fs.readFileSync(filePath, 'utf-8');\n const data = JSON.parse(jsonString);\n data.cookies[0] = currentCookie;\n const updatedJsonString = JSON.stringify(data, null, 2);\n fs.writeFileSync(filePath, updatedJsonString, 'utf-8');\n } catch (error) {\n console.error('Error updating cookie:', error);\n }\n }\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConstantHelper.js","sourceRoot":"","sources":["../../../lib/helpers/ConstantHelper.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAEhB,MAAM,CAAU,QAAQ,GAAG;QAC9B,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,OAAO;KACjB,CAAA;;AAVL,wCAWC","sourcesContent":["export class ConstantHelper {\n\n public static readonly sections = {\n content: \"Content\",\n media: \"Media\",\n settings: \"Settings\",\n packages: \"Packages\",\n members: \"Members\",\n dictionary: \"Dictionary\",\n users: \"Users\"\n }\n}"]}
1
+ {"version":3,"file":"ConstantHelper.js","sourceRoot":"","sources":["../../../lib/helpers/ConstantHelper.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;IAElB,MAAM,CAAU,QAAQ,GAAG;QAChC,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,YAAY;QACxB,KAAK,EAAE,OAAO;KACf,CAAA;;AAVH,wCAWC","sourcesContent":["export class ConstantHelper {\n\n public static readonly sections = {\n content: \"Content\",\n media: \"Media\",\n settings: \"Settings\",\n packages: \"Packages\",\n members: \"Members\",\n dictionary: \"Dictionary\",\n users: \"Users\"\n }\n}"]}
@@ -0,0 +1,141 @@
1
+ import { Page } from "@playwright/test";
2
+ import { UiBaseLocators } from "./UiBaseLocators";
3
+ export declare class ContentUiHelper extends UiBaseLocators {
4
+ private readonly contentNameTxt;
5
+ private readonly saveAndPublishBtn;
6
+ private readonly actionsBtn;
7
+ private readonly publishBtn;
8
+ private readonly unpublishBtn;
9
+ private readonly actionMenuForContentBtn;
10
+ private readonly openedModal;
11
+ private readonly textstringTxt;
12
+ private readonly infoTab;
13
+ private readonly linkContent;
14
+ private readonly historyItems;
15
+ private readonly generalItem;
16
+ private readonly publicationStatus;
17
+ private readonly createdDate;
18
+ private readonly editDocumentTypeBtn;
19
+ private readonly addTemplateBtn;
20
+ private readonly id;
21
+ private readonly cultureAndHostnamesBtn;
22
+ private readonly cultureLanguageDropdownBox;
23
+ private readonly addNewDomainBtn;
24
+ private readonly domainTxt;
25
+ private readonly domainLanguageDropdownBox;
26
+ private readonly deleteDomainBtn;
27
+ private readonly reloadChildrenThreeDotsBtn;
28
+ private readonly contentTree;
29
+ private readonly richTextAreaTxt;
30
+ private readonly textAreaTxt;
31
+ private readonly plusIconBtn;
32
+ private readonly enterTagTxt;
33
+ private readonly menuItemTree;
34
+ private readonly domainComboBox;
35
+ private readonly confirmToUnpublishBtn;
36
+ private readonly saveModalBtn;
37
+ private readonly createDocumentBlueprintBtn;
38
+ private readonly dropdown;
39
+ private readonly setADateTxt;
40
+ private readonly chooseMediaPickerBtn;
41
+ private readonly chooseMemberPickerBtn;
42
+ private readonly numericTxt;
43
+ private readonly resetFocalPointBtn;
44
+ private readonly addMultiURLPickerBtn;
45
+ private readonly linkTxt;
46
+ private readonly anchorQuerystringTxt;
47
+ private readonly linkTitleTxt;
48
+ private readonly tagItems;
49
+ private readonly removeFilesBtn;
50
+ private readonly toggleBtn;
51
+ private readonly toggleInput;
52
+ private readonly documentTypeWorkspace;
53
+ private readonly addMultipleTextStringBtn;
54
+ private readonly multipleTextStringValueTxt;
55
+ private readonly markdownTxt;
56
+ private readonly codeEditorTxt;
57
+ private readonly sliderInput;
58
+ constructor(page: Page);
59
+ enterContentName(name: string): Promise<void>;
60
+ clickSaveAndPublishButton(): Promise<void>;
61
+ clickActionsButton(): Promise<void>;
62
+ clickPublishButton(): Promise<void>;
63
+ clickUnpublishButton(): Promise<void>;
64
+ clickReloadChildrenThreeDotsButton(): Promise<void>;
65
+ clickActionsMenuAtRoot(): Promise<void>;
66
+ goToContentWithName(contentName: string): Promise<void>;
67
+ clickActionsMenuForContent(name: string): Promise<void>;
68
+ clickCaretButtonForContentName(name: string): Promise<void>;
69
+ waitForModalVisible(): Promise<void>;
70
+ waitForModalHidden(): Promise<void>;
71
+ enterTextstring(text: string): Promise<void>;
72
+ doesContentTreeHaveName(contentName: string): Promise<void>;
73
+ enterRichTextArea(value: string): Promise<void>;
74
+ enterTextArea(value: string): Promise<void>;
75
+ clickConfirmToUnpublishButton(): Promise<void>;
76
+ clickCreateDocumentBlueprintButton(): Promise<void>;
77
+ clickInfoTab(): Promise<void>;
78
+ doesLinkHaveText(text: string): Promise<void>;
79
+ doesHistoryHaveText(text: string): Promise<void>;
80
+ doesPublicationStatusHaveText(text: string): Promise<void>;
81
+ doesCreatedDateHaveText(text: string): Promise<void>;
82
+ doesIdHaveText(text: string): Promise<void>;
83
+ clickEditDocumentTypeButton(): Promise<void>;
84
+ clickAddTemplateButton(): Promise<void>;
85
+ clickDocumentTypeByName(documentTypeName: string): Promise<void>;
86
+ clickTemplateByName(templateName: string): Promise<void>;
87
+ isDocumentTypeModalVisible(documentTypeName: string): Promise<void>;
88
+ isTemplateModalVisible(templateName: string): Promise<void>;
89
+ clickEditTemplateByName(templateName: string): Promise<void>;
90
+ changeTemplate(oldTemplate: string, newTemplate: string): Promise<void>;
91
+ isTemplateNameDisabled(templateName: string): Promise<void>;
92
+ clickCultureAndHostnamesButton(): Promise<void>;
93
+ selectCultureLanguageOption(option: string): Promise<void>;
94
+ selectDomainLanguageOption(option: string, index?: number): Promise<void>;
95
+ clickAddNewDomainButton(): Promise<void>;
96
+ enterDomain(value: string, index?: number): Promise<void>;
97
+ clickDeleteDomainButton(): Promise<void>;
98
+ clickSaveModalButton(): Promise<void>;
99
+ chooseDocumentType(documentTypeName: string): Promise<void>;
100
+ clickApprovedColorByValue(value: string): Promise<void>;
101
+ chooseCheckboxListOption(optionValue: string): Promise<void>;
102
+ addContentPicker(contentName: string): Promise<void>;
103
+ isOpenButtonVisibleInContentPicker(contentPickerName: string, isVisible?: boolean): Promise<void>;
104
+ clickContentPickerOpenButton(contentPickerName: string): Promise<void>;
105
+ isNodeOpenForContentPicker(contentPickerName: string): Promise<void>;
106
+ isContentNameVisible(contentName: string, isVisible?: boolean): Promise<void>;
107
+ removeContentPicker(contentPickerName: string): Promise<void>;
108
+ chooseDropdownOption(optionValues: string[]): Promise<void>;
109
+ enterADate(date: string): Promise<void>;
110
+ clickChooseMediaPickerButton(): Promise<void>;
111
+ clickMediaByNameInMediaPicker(mediaName: string): Promise<void>;
112
+ selectMediaByName(mediaName: string): Promise<void>;
113
+ removeMediaPickerByName(mediaPickerName: string): Promise<void>;
114
+ isMediaNameVisible(mediaName: string, isVisible?: boolean): Promise<void>;
115
+ clickResetFocalPointButton(): Promise<void>;
116
+ setFocalPoint(widthPercentage?: number, heightPercentage?: number): Promise<void>;
117
+ clickChooseMemberPickerButton(): Promise<void>;
118
+ selectMemberByName(memberName: string): Promise<void>;
119
+ removeMemberPickerByName(memberName: string): Promise<void>;
120
+ enterNumeric(number: number): Promise<void>;
121
+ chooseRadioboxOption(optionValue: string): Promise<void>;
122
+ clickPlusIconButton(): Promise<void>;
123
+ enterTag(tagName: string): Promise<void>;
124
+ removeTagByName(tagName: string): Promise<void>;
125
+ clickAddMultiURLPickerButton(): Promise<void>;
126
+ selectLinkByName(linkName: string): Promise<void>;
127
+ enterLink(value: string): Promise<void>;
128
+ enterAnchorOrQuerystring(value: string): Promise<void>;
129
+ enterLinkTitle(value: string): Promise<void>;
130
+ removeUrlPickerByName(linkName: string): Promise<void>;
131
+ clickEditUrlPickerButtonByName(linkName: string): Promise<void>;
132
+ clickRemoveFilesButton(): Promise<void>;
133
+ clickToggleButton(): Promise<void>;
134
+ doesToggleHaveLabel(label: string): Promise<void>;
135
+ clickAddMultipleTextStringButton(): Promise<void>;
136
+ enterMultipleTextStringValue(value: string): Promise<void>;
137
+ addMultipleTextStringItem(value: string): Promise<void>;
138
+ enterCodeEditorValue(value: string): Promise<void>;
139
+ enterMarkdownEditorValue(value: string): Promise<void>;
140
+ changeSliderValue(value: string): Promise<void>;
141
+ }