@umbraco/playwright-testhelpers 1.0.0

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 (89) hide show
  1. package/dist/lib/helpers/AliasHelper.d.ts +40 -0
  2. package/dist/lib/helpers/AliasHelper.js +64 -0
  3. package/dist/lib/helpers/AliasHelper.js.map +1 -0
  4. package/dist/lib/helpers/ApiHelpers.d.ts +49 -0
  5. package/dist/lib/helpers/ApiHelpers.js +141 -0
  6. package/dist/lib/helpers/ApiHelpers.js.map +1 -0
  7. package/dist/lib/helpers/ConstantHelper.d.ts +33 -0
  8. package/dist/lib/helpers/ConstantHelper.js +38 -0
  9. package/dist/lib/helpers/ConstantHelper.js.map +1 -0
  10. package/dist/lib/helpers/ContentApiHelper.d.ts +13 -0
  11. package/dist/lib/helpers/ContentApiHelper.js +153 -0
  12. package/dist/lib/helpers/ContentApiHelper.js.map +1 -0
  13. package/dist/lib/helpers/DatatypeApiHelper.d.ts +7 -0
  14. package/dist/lib/helpers/DatatypeApiHelper.js +30 -0
  15. package/dist/lib/helpers/DatatypeApiHelper.js.map +1 -0
  16. package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +7 -0
  17. package/dist/lib/helpers/DocumentTypeApiHelper.js +34 -0
  18. package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -0
  19. package/dist/lib/helpers/DomainApiHelper.d.ts +7 -0
  20. package/dist/lib/helpers/DomainApiHelper.js +31 -0
  21. package/dist/lib/helpers/DomainApiHelper.js.map +1 -0
  22. package/dist/lib/helpers/FolderApiHelper.d.ts +6 -0
  23. package/dist/lib/helpers/FolderApiHelper.js +16 -0
  24. package/dist/lib/helpers/FolderApiHelper.js.map +1 -0
  25. package/dist/lib/helpers/JsonHelper.d.ts +12 -0
  26. package/dist/lib/helpers/JsonHelper.js +29 -0
  27. package/dist/lib/helpers/JsonHelper.js.map +1 -0
  28. package/dist/lib/helpers/LanguagesApiHelper.d.ts +9 -0
  29. package/dist/lib/helpers/LanguagesApiHelper.js +57 -0
  30. package/dist/lib/helpers/LanguagesApiHelper.js.map +1 -0
  31. package/dist/lib/helpers/MacroApiHelper.d.ts +9 -0
  32. package/dist/lib/helpers/MacroApiHelper.js +56 -0
  33. package/dist/lib/helpers/MacroApiHelper.js.map +1 -0
  34. package/dist/lib/helpers/MediaApiHelper.d.ts +75 -0
  35. package/dist/lib/helpers/MediaApiHelper.js +268 -0
  36. package/dist/lib/helpers/MediaApiHelper.js.map +1 -0
  37. package/dist/lib/helpers/MediaTypeApiHelper.d.ts +7 -0
  38. package/dist/lib/helpers/MediaTypeApiHelper.js +29 -0
  39. package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -0
  40. package/dist/lib/helpers/MemberApiHelper.d.ts +6 -0
  41. package/dist/lib/helpers/MemberApiHelper.js +22 -0
  42. package/dist/lib/helpers/MemberApiHelper.js.map +1 -0
  43. package/dist/lib/helpers/MemberGroupApiHelper.d.ts +6 -0
  44. package/dist/lib/helpers/MemberGroupApiHelper.js +25 -0
  45. package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -0
  46. package/dist/lib/helpers/MemberTypeApiHelper.d.ts +6 -0
  47. package/dist/lib/helpers/MemberTypeApiHelper.js +28 -0
  48. package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -0
  49. package/dist/lib/helpers/PackageApiHelper.d.ts +8 -0
  50. package/dist/lib/helpers/PackageApiHelper.js +28 -0
  51. package/dist/lib/helpers/PackageApiHelper.js.map +1 -0
  52. package/dist/lib/helpers/PartialViewApiHelper.d.ts +9 -0
  53. package/dist/lib/helpers/PartialViewApiHelper.js +50 -0
  54. package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -0
  55. package/dist/lib/helpers/RelationTypeApiHelper.d.ts +6 -0
  56. package/dist/lib/helpers/RelationTypeApiHelper.js +28 -0
  57. package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -0
  58. package/dist/lib/helpers/ScriptApiHelper.d.ts +11 -0
  59. package/dist/lib/helpers/ScriptApiHelper.js +58 -0
  60. package/dist/lib/helpers/ScriptApiHelper.js.map +1 -0
  61. package/dist/lib/helpers/StylesheetApiHelper.d.ts +7 -0
  62. package/dist/lib/helpers/StylesheetApiHelper.js +28 -0
  63. package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -0
  64. package/dist/lib/helpers/TemplatesApiHelper.d.ts +8 -0
  65. package/dist/lib/helpers/TemplatesApiHelper.js +47 -0
  66. package/dist/lib/helpers/TemplatesApiHelper.js.map +1 -0
  67. package/dist/lib/helpers/UiHelpers.d.ts +23 -0
  68. package/dist/lib/helpers/UiHelpers.js +134 -0
  69. package/dist/lib/helpers/UiHelpers.js.map +1 -0
  70. package/dist/lib/helpers/UserApiHelper.d.ts +9 -0
  71. package/dist/lib/helpers/UserApiHelper.js +44 -0
  72. package/dist/lib/helpers/UserApiHelper.js.map +1 -0
  73. package/dist/lib/helpers/UserGroupApiHelper.d.ts +7 -0
  74. package/dist/lib/helpers/UserGroupApiHelper.js +32 -0
  75. package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -0
  76. package/dist/lib/helpers/index.d.ts +6 -0
  77. package/dist/lib/helpers/index.js +16 -0
  78. package/dist/lib/helpers/index.js.map +1 -0
  79. package/dist/lib/helpers/testExtension.d.ts +7 -0
  80. package/dist/lib/helpers/testExtension.js +17 -0
  81. package/dist/lib/helpers/testExtension.js.map +1 -0
  82. package/dist/lib/index.d.ts +1 -0
  83. package/dist/lib/index.js +5 -0
  84. package/dist/lib/index.js.map +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -0
  86. package/dist/umbraco.config.d.ts +14 -0
  87. package/dist/umbraco.config.js +18 -0
  88. package/dist/umbraco.config.js.map +1 -0
  89. package/package.json +41 -0
@@ -0,0 +1,11 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class ScriptApiHelper {
3
+ api: ApiHelpers;
4
+ private folderHelper;
5
+ constructor(api: ApiHelpers);
6
+ ensureNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
7
+ exists(name: string): Promise<boolean>;
8
+ save(script: object): Promise<void>;
9
+ verifyContent(fileName: string, expectedContent: string): Promise<boolean>;
10
+ saveFolder(name: string): Promise<any>;
11
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScriptApiHelper = void 0;
4
+ const umbraco_config_1 = require("../../umbraco.config");
5
+ const JsonHelper_1 = require("./JsonHelper");
6
+ const FolderApiHelper_1 = require("./FolderApiHelper");
7
+ class ScriptApiHelper {
8
+ api;
9
+ folderHelper;
10
+ constructor(api) {
11
+ this.api = api;
12
+ this.folderHelper = new FolderApiHelper_1.FolderApiHelper(api);
13
+ }
14
+ async ensureNameNotExists(name) {
15
+ const response = await this.api.get(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/BackOffice/Api/ScriptsTree/GetNodes?id=-1`);
16
+ const content = await JsonHelper_1.JsonHelper.getBody(response);
17
+ if (content.length > 0) {
18
+ let scriptId = null;
19
+ for (const node of content) {
20
+ if (node.name === name) {
21
+ scriptId = node.id;
22
+ }
23
+ }
24
+ if (scriptId !== null) {
25
+ return this.api.post(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/CodeFile/Delete?type=scripts&virtualPath=${scriptId}`);
26
+ }
27
+ }
28
+ return null;
29
+ }
30
+ async exists(name) {
31
+ const response = await this.api.get(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/BackOffice/Api/ScriptsTree/GetNodes?id=-1`);
32
+ const content = await JsonHelper_1.JsonHelper.getBody(response);
33
+ if (content.length > 0) {
34
+ for (const node of content) {
35
+ if (node.name === name) {
36
+ return true;
37
+ }
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+ async save(script) {
43
+ if (script == null) {
44
+ return;
45
+ }
46
+ await this.api.post(this.api.baseUrl + '/umbraco/backoffice/umbracoapi/codefile/PostSave', script);
47
+ }
48
+ async verifyContent(fileName, expectedContent) {
49
+ const response = await this.api.get(this.api.baseUrl + `/scripts/${fileName}`);
50
+ const content = (await response.body()).toString();
51
+ return content === expectedContent;
52
+ }
53
+ async saveFolder(name) {
54
+ return this.folderHelper.save('scripts', name);
55
+ }
56
+ }
57
+ exports.ScriptApiHelper = ScriptApiHelper;
58
+ //# sourceMappingURL=ScriptApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/ScriptApiHelper.ts"],"names":[],"mappings":";;;AACA,yDAAmD;AACnD,6CAAwC;AACxC,uDAAkD;AAElD,MAAa,eAAe;IAC1B,GAAG,CAAY;IACP,YAAY,CAAiB;IAErC,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,iCAAe,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,oDAAoD,CAAC,CAAC;QAC9H,MAAM,OAAO,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAC;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAI,MAAM,IAAI,IAAI,OAAO,EAAC;gBACxB,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAC;oBACpB,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;iBACpB;aACF;YAED,IAAG,QAAQ,KAAK,IAAI,EAAC;gBACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,2EAA2E,QAAQ,EAAE,CAAC,CAAA;aAChJ;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAa;QAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,oDAAoD,CAAC,CAAA;QAC7H,MAAM,OAAO,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAC;YACpB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAC;gBACzB,IAAG,IAAI,CAAC,IAAI,KAAK,IAAI,EAAC;oBACpB,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QAExB,IAAG,MAAM,IAAI,IAAI,EAAE;YACjB,OAAO;SACR;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,kDAAkD,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB,EAAE,eAAwB;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,YAAY,QAAQ,EAAE,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEnD,OAAO,OAAO,KAAK,eAAe,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACF;AAjED,0CAiEC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {umbracoConfig} from \"../../umbraco.config\";\nimport {JsonHelper} from \"./JsonHelper\";\nimport {FolderApiHelper} from \"./FolderApiHelper\";\n\nexport class ScriptApiHelper {\n api: ApiHelpers\n private folderHelper: FolderApiHelper\n \n constructor(api: ApiHelpers) {\n this.api = api;\n this.folderHelper = new FolderApiHelper(api);\n }\n \n async ensureNameNotExists(name: string) {\n const response = await this.api.get(`${umbracoConfig.environment.baseUrl}/umbraco/BackOffice/Api/ScriptsTree/GetNodes?id=-1`);\n const content = await JsonHelper.getBody(response);\n \n if(content.length > 0){\n let scriptId = null;\n \n for(const node of content){\n if(node.name === name){\n scriptId = node.id;\n }\n }\n \n if(scriptId !== null){\n return this.api.post(`${umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/CodeFile/Delete?type=scripts&virtualPath=${scriptId}`)\n }\n }\n \n return null;\n }\n \n async exists(name : string) : Promise<boolean> {\n \n const response = await this.api.get(`${umbracoConfig.environment.baseUrl}/umbraco/BackOffice/Api/ScriptsTree/GetNodes?id=-1`)\n const content = await JsonHelper.getBody(response);\n \n if(content.length > 0){\n for (const node of content){\n if(node.name === name){\n return true;\n }\n }\n }\n \n return false;\n }\n \n async save(script : object) {\n \n if(script == null) {\n return;\n }\n \n await this.api.post(this.api.baseUrl + '/umbraco/backoffice/umbracoapi/codefile/PostSave', script);\n }\n \n async verifyContent(fileName : string, expectedContent : string){\n const response = await this.api.get(this.api.baseUrl + `/scripts/${fileName}`);\n const content = (await response.body()).toString();\n\n return content === expectedContent;\n }\n\n async saveFolder(name : string){\n return this.folderHelper.save('scripts', name);\n }\n}"]}
@@ -0,0 +1,7 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class StylesheetApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ ensureNameNotExists(name: string): Promise<void>;
6
+ save(stylesheet: any): Promise<void>;
7
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StylesheetApiHelper = void 0;
4
+ const JsonHelper_1 = require("./JsonHelper");
5
+ class StylesheetApiHelper {
6
+ api;
7
+ constructor(api) {
8
+ this.api = api;
9
+ }
10
+ async ensureNameNotExists(name) {
11
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/backOffice/Api/StylesheetsTree/GetNodes?id=-1');
12
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
13
+ let stylesheetId = null;
14
+ for (const sb of searchBody) {
15
+ if (sb.name == name) {
16
+ stylesheetId = sb.id;
17
+ }
18
+ }
19
+ if (stylesheetId !== null) {
20
+ await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/CodeFile/Delete?type=stylesheets&virtualPath=' + stylesheetId);
21
+ }
22
+ }
23
+ async save(stylesheet) {
24
+ await this.api.post(this.api.baseUrl + '/umbraco/backoffice/umbracoapi/codefile/PostSave', stylesheet);
25
+ }
26
+ }
27
+ exports.StylesheetApiHelper = StylesheetApiHelper;
28
+ //# sourceMappingURL=StylesheetApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StylesheetApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/StylesheetApiHelper.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAE1C,MAAa,mBAAmB;IAC9B,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,wDAAwD,CAAC,CAAC;QACjH,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,YAAY,GAAG,IAAI,CAAC;QAExB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE;gBACnB,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC;aACtB;SACF;QAED,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,8EAA8E,GAAG,YAAY,CAAC,CAAC;SACvI;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAAU;QACnB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,kDAAkD,EAAE,UAAU,CAAC,CAAC;IACzG,CAAC;CACF;AA3BD,kDA2BC","sourcesContent":["import { ApiHelpers } from \"./ApiHelpers\";\nimport { JsonHelper } from \"./JsonHelper\";\n\nexport class StylesheetApiHelper{\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureNameNotExists(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/backOffice/Api/StylesheetsTree/GetNodes?id=-1');\n const searchBody = await JsonHelper.getBody(response);\n\n let stylesheetId = null;\n\n for (const sb of searchBody) {\n if (sb.name == name) {\n stylesheetId = sb.id;\n }\n }\n\n if (stylesheetId !== null) {\n await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/CodeFile/Delete?type=stylesheets&virtualPath=' + stylesheetId);\n }\n }\n \n async save(stylesheet){\n await this.api.post(this.api.baseUrl + '/umbraco/backoffice/umbracoapi/codefile/PostSave', stylesheet);\n }\n}"]}
@@ -0,0 +1,8 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class TemplatesApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ edit(name: any, content: any): Promise<import("playwright-core").APIResponse | null>;
6
+ ensureNameNotExists(name: string): Promise<void>;
7
+ saveTemplate(template: any): Promise<void>;
8
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TemplatesApiHelper = void 0;
4
+ const JsonHelper_1 = require("./JsonHelper");
5
+ class TemplatesApiHelper {
6
+ api;
7
+ constructor(api) {
8
+ this.api = api;
9
+ }
10
+ async edit(name, content) {
11
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoTrees/TemplatesTree/GetNodes?id=-1');
12
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
13
+ if (searchBody.length > 0) {
14
+ let templateId = null;
15
+ for (const sb of searchBody) {
16
+ if (sb.name == name) {
17
+ templateId = sb.id;
18
+ }
19
+ }
20
+ if (templateId !== null) {
21
+ const templateResponse = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/GetById?id=' + templateId);
22
+ const template = await JsonHelper_1.JsonHelper.getBody(templateResponse);
23
+ template.content = content;
24
+ return await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/PostSave', template);
25
+ }
26
+ }
27
+ return null;
28
+ }
29
+ async ensureNameNotExists(name) {
30
+ const response = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoTrees/TemplatesTree/GetNodes?id=-1');
31
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
32
+ let templateId = null;
33
+ for (const sb of searchBody) {
34
+ if (sb.name == name) {
35
+ templateId = sb.id;
36
+ }
37
+ }
38
+ if (templateId !== null) {
39
+ await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/DeleteById?id=' + templateId);
40
+ }
41
+ }
42
+ async saveTemplate(template) {
43
+ await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/PostSave', template);
44
+ }
45
+ }
46
+ exports.TemplatesApiHelper = TemplatesApiHelper;
47
+ //# sourceMappingURL=TemplatesApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatesApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemplatesApiHelper.ts"],"names":[],"mappings":";;;AACA,6CAAwC;AAExC,MAAa,kBAAkB;IAC7B,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,+DAA+D,CAAC,CAAC;QACxH,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;gBAC3B,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE;oBACnB,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;iBACpB;aACF;YAED,IAAI,UAAU,KAAK,IAAI,EAAE;gBACvB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,qDAAqD,GAAG,UAAU,CAAC,CAAC;gBACnI,MAAM,QAAQ,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAC5D,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC3B,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,kDAAkD,EAAE,QAAQ,CAAC,CAAC;aAC7G;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,+DAA+D,CAAC,CAAC;QACxH,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,UAAU,GAAG,IAAI,CAAC;QAEtB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE;gBACnB,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;aACpB;SACF;QAED,IAAI,UAAU,KAAK,IAAI,EAAE;YACvB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,wDAAwD,GAAG,UAAU,CAAC,CAAC;SAC/G;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAQ;QACzB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,kDAAkD,EAAE,QAAQ,CAAC,CAAC;IACvG,CAAC;CACF;AAlDD,gDAkDC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {JsonHelper} from \"./JsonHelper\";\n\nexport class TemplatesApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async edit(name, content) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoTrees/TemplatesTree/GetNodes?id=-1');\n const searchBody = await JsonHelper.getBody(response);\n\n if (searchBody.length > 0) {\n let templateId = null;\n for (const sb of searchBody) {\n if (sb.name == name) {\n templateId = sb.id;\n }\n }\n\n if (templateId !== null) {\n const templateResponse = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/GetById?id=' + templateId);\n const template = await JsonHelper.getBody(templateResponse);\n template.content = content;\n return await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/PostSave', template);\n }\n }\n \n return null;\n }\n\n async ensureNameNotExists(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/backoffice/UmbracoTrees/TemplatesTree/GetNodes?id=-1');\n const searchBody = await JsonHelper.getBody(response);\n\n let templateId = null;\n\n for (const sb of searchBody) {\n if (sb.name == name) {\n templateId = sb.id;\n }\n }\n\n if (templateId !== null) {\n await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/DeleteById?id=' + templateId);\n }\n }\n\n async saveTemplate(template) {\n await this.api.post(this.api.baseUrl + '/umbraco/backoffice/UmbracoApi/Template/PostSave', template);\n }\n}"]}
@@ -0,0 +1,23 @@
1
+ import { Page, Locator } from "@playwright/test";
2
+ export declare class UiHelpers {
3
+ page: Page;
4
+ constructor(page: Page);
5
+ getGlobalHelp(): Promise<Locator>;
6
+ getGlobalUser(): Promise<Locator>;
7
+ getButtonByLabelKey(label: string): Promise<Locator>;
8
+ getSuccessNotification(): Promise<Locator>;
9
+ isSuccessNotificationVisible(): Promise<void>;
10
+ isErrorNotificationVisible(): Promise<void>;
11
+ getErrorNotification(): Promise<Locator>;
12
+ clickElement(selector: Promise<Locator>, options?: any): Promise<void>;
13
+ goToSection(sectionAlias: string): Promise<void>;
14
+ waitForTreeLoad(sectionAlias: string): Promise<void>;
15
+ getTreeItem(treeName: string, itemNamePathArray: string[]): Promise<Locator>;
16
+ getContextMenuAction(actionName: string): Promise<Locator>;
17
+ setEditorHeaderName(headerName: string): Promise<void>;
18
+ getEditorHeaderName(typedText: string): Promise<void>;
19
+ clickMultiple(locator: Locator): Promise<void>;
20
+ refreshContentTree(): Promise<void>;
21
+ refreshMediaTree(): Promise<void>;
22
+ fileUploader(path: any): Promise<void>;
23
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UiHelpers = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const AliasHelper_1 = require("./AliasHelper");
6
+ class UiHelpers {
7
+ page;
8
+ constructor(page) {
9
+ this.page = page;
10
+ }
11
+ async getGlobalHelp() {
12
+ return this.page.locator(`[data-element="global-help"]`);
13
+ }
14
+ async getGlobalUser() {
15
+ return this.page.locator(`[data-element="global-user"]`);
16
+ }
17
+ async getButtonByLabelKey(label) {
18
+ return this.page.locator(`umb-button[label-key="${label}"] button:enabled`);
19
+ }
20
+ async getSuccessNotification() {
21
+ return this.page.locator('.umb-notifications__notifications > .alert-success');
22
+ }
23
+ async isSuccessNotificationVisible() {
24
+ await (0, test_1.expect)(await this.getSuccessNotification()).toBeVisible();
25
+ }
26
+ async isErrorNotificationVisible() {
27
+ await (0, test_1.expect)(await this.getErrorNotification()).toBeVisible();
28
+ }
29
+ async getErrorNotification() {
30
+ return this.page.locator('.umb-notifications__notifications > .alert-error');
31
+ }
32
+ async clickElement(selector, options = null) {
33
+ const resolvedSelector = await selector;
34
+ await resolvedSelector.click(options);
35
+ }
36
+ async goToSection(sectionAlias) {
37
+ await this.page.click('[data-element="section-' + sectionAlias + '"]');
38
+ }
39
+ async waitForTreeLoad(sectionAlias) {
40
+ const tree = await this.page.locator('.umb-tree');
41
+ await (0, test_1.expect)(await this.page.locator('.umb-tree')).toBeVisible();
42
+ await (0, test_1.expect)(await tree.locator("a", { hasText: sectionAlias })).toBeVisible();
43
+ }
44
+ async getTreeItem(treeName, itemNamePathArray) {
45
+ await (0, test_1.expect)((await this.page.locator('li > .umb-tree-root a[href*=' + treeName + ']').first())).toBeVisible();
46
+ let finalLocator = await this.page
47
+ .locator('li > .umb-tree-root a[href*=' + treeName + ']')
48
+ .locator("xpath=ancestor::li");
49
+ for (let i = 0; i < itemNamePathArray.length; i++) {
50
+ // We want to find the outer li of the tree item, to be able to search deeper, there may be multiple results
51
+ // for multiple levels of nesting, but it should be okay to pick last, since that should pick the immediate parent
52
+ // the search goes from outer most to inner most (I think)
53
+ finalLocator = await finalLocator
54
+ .locator('.umb-tree-item__label >> text=' + itemNamePathArray[i])
55
+ .locator('xpath=ancestor::li[contains(@class, "umb-tree-item")]')
56
+ .last();
57
+ // We don't want to click the expand option if we're on the last item,
58
+ // since that can cause issues when clicking the "root" items, such as Document Types.
59
+ if (i + 1 == itemNamePathArray.length) {
60
+ break;
61
+ }
62
+ // Get the UL with the collapsed state, if it exists
63
+ const ulObject = await finalLocator.locator(".collapsed");
64
+ const locatorIcon = await finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] }).innerHTML();
65
+ // Check if an element is actually expanded, if not expanded, it will have the "icon-navigation-right"
66
+ if (locatorIcon.includes("icon-navigation-right")) {
67
+ if (await ulObject.count() > 0) {
68
+ // Get the expand button
69
+ const expandButton = finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] });
70
+ // Weirdly if a tree item has no children is still marked as expanded, however, the expand button is hidden
71
+ // So we have to ensure that the button is not hidden before we click.
72
+ if (await expandButton.isHidden() === false) {
73
+ // Click the expand button, if its collapsed
74
+ await finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] }).click();
75
+ }
76
+ }
77
+ }
78
+ }
79
+ return finalLocator;
80
+ }
81
+ async getContextMenuAction(actionName) {
82
+ return this.page.locator('li.umb-action[data-element="' + actionName + '"]');
83
+ }
84
+ async setEditorHeaderName(headerName) {
85
+ const header = await this.page.locator("#headerName");
86
+ await header.type(headerName);
87
+ // We need to wait for the alias to be generated, but only if we can find it
88
+ const aliasField = await this.page.locator('.umb-locked-field__input');
89
+ if (await aliasField.count() > 0) {
90
+ await (0, test_1.expect)(aliasField).toHaveValue(AliasHelper_1.AliasHelper.toAlias(headerName));
91
+ }
92
+ }
93
+ async getEditorHeaderName(typedText) {
94
+ await this.page.locator('#headerName').fill(typedText, { timeout: 10000 });
95
+ let result = await this.page.locator('.umb-editor-header__name-wrapper').locator('input[name="lockedField"]');
96
+ const alias = AliasHelper_1.AliasHelper.toAlias(typedText);
97
+ await (0, test_1.expect)(result).toHaveValue(alias);
98
+ }
99
+ async clickMultiple(locator) {
100
+ // TODO: Remove this
101
+ // We're calling nth.IsEnabled to initialize the array, because locator is lazy
102
+ // and count will then always return 0, hopefully this will be fixed in a future version of playwright
103
+ await locator.nth(0).isEnabled();
104
+ if (await locator.count() > 0) {
105
+ let selects = await locator.elementHandles();
106
+ for (const index in selects) {
107
+ await selects[index].click();
108
+ }
109
+ }
110
+ }
111
+ async refreshContentTree() {
112
+ const contentHeader = await this.page.locator('li .umb-tree-root >> text="Content"');
113
+ await (0, test_1.expect)(contentHeader).toBeVisible();
114
+ await contentHeader.click({ button: "right" });
115
+ await this.clickElement(this.getContextMenuAction("action-refreshNode"));
116
+ await (0, test_1.expect)(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();
117
+ }
118
+ async refreshMediaTree() {
119
+ const mediaHeader = await this.page.locator('li .umb-tree-root >> text="Media"');
120
+ await (0, test_1.expect)(mediaHeader).toBeVisible();
121
+ await mediaHeader.click({ button: "right" });
122
+ await this.clickElement(this.getContextMenuAction("action-refreshNode"));
123
+ await (0, test_1.expect)(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();
124
+ }
125
+ async fileUploader(path) {
126
+ this.page.on("filechooser", async (fileChooser) => {
127
+ await fileChooser.setFiles(path);
128
+ });
129
+ await this.page.locator('[property-alias="umbracoFile"]').click();
130
+ await this.page.locator('[alias="save"]').click();
131
+ }
132
+ }
133
+ exports.UiHelpers = UiHelpers;
134
+ //# sourceMappingURL=UiHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiHelpers.js","sourceRoot":"","sources":["../../../lib/helpers/UiHelpers.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AACtD,+CAA0C;AAE1C,MAAa,SAAS;IAEpB,IAAI,CAAO;IAEX,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,KAAK,mBAAmB,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,4BAA4B;QAChC,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAA0B,EAAE,UAAe,IAAI;QAChE,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC;QACxC,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAAoB;QACpC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAC,OAAO,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,iBAA2B;QAE7D,MAAM,IAAA,aAAM,EAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/G,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI;aAC/B,OAAO,CAAC,8BAA8B,GAAG,QAAQ,GAAG,GAAG,CAAC;aACxD,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,4GAA4G;YAC5G,kHAAkH;YAClH,0DAA0D;YAC1D,YAAY,GAAG,MAAM,YAAY;iBAC9B,OAAO,CAAC,gCAAgC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;iBAChE,OAAO,CAAC,uDAAuD,CAAC;iBAChE,IAAI,EAAE,CAAC;YAEV,uEAAuE;YACvE,sFAAsF;YACtF,IAAI,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE;gBACrC,MAAM;aACP;YAED,oDAAoD;YACpD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAEjI,sGAAsG;YACtG,IAAG,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAC;gBAC/C,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;oBAC9B,wBAAwB;oBACxB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;oBAChH,2GAA2G;oBAC3G,sEAAsE;oBACtE,IAAI,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;wBAC3C,4CAA4C;wBAC5C,MAAM,YAAY,CAAC,OAAO,CAAC,mCAAmC,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC1G;iBACF;aACF;SACF;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,UAAkB;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACrD,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE9B,4EAA4E;QAC5E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACvE,IAAI,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAChC,MAAM,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,WAAW,CAAC,yBAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SACvE;IAEH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,SAAiB;QACzC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QAEzE,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC9G,MAAM,KAAK,GAAG,yBAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,oBAAoB;QACpB,+EAA+E;QAC/E,sGAAsG;QACtG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,MAAM,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC7B,IAAI,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;aAC9B;SACF;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACrF,MAAM,IAAA,aAAM,EAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,aAAa,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;QAE7C,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC,CAAA;QAExE,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACjF,MAAM,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,OAAO,EAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzE,MAAM,IAAA,aAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAI;QACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YAChD,MAAM,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;CACF;AA9JD,8BA8JC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\"\nimport {AliasHelper} from \"./AliasHelper\";\n\nexport class UiHelpers {\n\n page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n\n async getGlobalHelp() {\n return this.page.locator(`[data-element=\"global-help\"]`);\n }\n\n async getGlobalUser() {\n return this.page.locator(`[data-element=\"global-user\"]`);\n }\n\n async getButtonByLabelKey(label: string) {\n return this.page.locator(`umb-button[label-key=\"${label}\"] button:enabled`);\n }\n\n async getSuccessNotification() {\n return this.page.locator('.umb-notifications__notifications > .alert-success');\n }\n\n async isSuccessNotificationVisible() {\n await expect(await this.getSuccessNotification()).toBeVisible();\n }\n\n async isErrorNotificationVisible() {\n await expect(await this.getErrorNotification()).toBeVisible();\n }\n\n async getErrorNotification() {\n return this.page.locator('.umb-notifications__notifications > .alert-error');\n }\n\n async clickElement(selector: Promise<Locator>, options: any = null) {\n const resolvedSelector = await selector;\n await resolvedSelector.click(options);\n }\n\n async goToSection(sectionAlias: string) {\n await this.page.click('[data-element=\"section-' + sectionAlias + '\"]');\n }\n\n async waitForTreeLoad(sectionAlias: string) {\n const tree = await this.page.locator('.umb-tree');\n await expect(await this.page.locator('.umb-tree')).toBeVisible();\n await expect(await tree.locator(\"a\", {hasText: sectionAlias})).toBeVisible();\n }\n\n async getTreeItem(treeName: string, itemNamePathArray: string[]) {\n\n await expect((await this.page.locator('li > .umb-tree-root a[href*=' + treeName + ']').first())).toBeVisible();\n let finalLocator = await this.page\n .locator('li > .umb-tree-root a[href*=' + treeName + ']')\n .locator(\"xpath=ancestor::li\");\n\n for (let i = 0; i < itemNamePathArray.length; i++) {\n // We want to find the outer li of the tree item, to be able to search deeper, there may be multiple results\n // for multiple levels of nesting, but it should be okay to pick last, since that should pick the immediate parent\n // the search goes from outer most to inner most (I think)\n finalLocator = await finalLocator\n .locator('.umb-tree-item__label >> text=' + itemNamePathArray[i])\n .locator('xpath=ancestor::li[contains(@class, \"umb-tree-item\")]')\n .last();\n\n // We don't want to click the expand option if we're on the last item, \n // since that can cause issues when clicking the \"root\" items, such as Document Types.\n if (i + 1 == itemNamePathArray.length) {\n break;\n }\n\n // Get the UL with the collapsed state, if it exists\n const ulObject = await finalLocator.locator(\".collapsed\");\n const locatorIcon = await finalLocator.locator('[data-element=\"tree-item-expand\"]', {hasText: itemNamePathArray[i]}).innerHTML();\n \n // Check if an element is actually expanded, if not expanded, it will have the \"icon-navigation-right\"\n if(locatorIcon.includes(\"icon-navigation-right\")){\n if (await ulObject.count() > 0) {\n // Get the expand button\n const expandButton = finalLocator.locator('[data-element=\"tree-item-expand\"]', {hasText: itemNamePathArray[i]});\n // Weirdly if a tree item has no children is still marked as expanded, however, the expand button is hidden\n // So we have to ensure that the button is not hidden before we click.\n if (await expandButton.isHidden() === false) {\n // Click the expand button, if its collapsed\n await finalLocator.locator('[data-element=\"tree-item-expand\"]', {hasText: itemNamePathArray[i]}).click();\n }\n }\n }\n }\n\n return finalLocator;\n }\n\n async getContextMenuAction(actionName: string) {\n return this.page.locator('li.umb-action[data-element=\"' + actionName + '\"]');\n }\n\n async setEditorHeaderName(headerName: string) {\n const header = await this.page.locator(\"#headerName\")\n await header.type(headerName);\n\n // We need to wait for the alias to be generated, but only if we can find it\n const aliasField = await this.page.locator('.umb-locked-field__input');\n if (await aliasField.count() > 0) {\n await expect(aliasField).toHaveValue(AliasHelper.toAlias(headerName));\n }\n\n }\n\n async getEditorHeaderName(typedText: string) {\n await this.page.locator('#headerName').fill(typedText, {timeout: 10000});\n\n let result = await this.page.locator('.umb-editor-header__name-wrapper').locator('input[name=\"lockedField\"]');\n const alias = AliasHelper.toAlias(typedText);\n await expect(result).toHaveValue(alias);\n }\n\n async clickMultiple(locator: Locator) {\n // TODO: Remove this\n // We're calling nth.IsEnabled to initialize the array, because locator is lazy\n // and count will then always return 0, hopefully this will be fixed in a future version of playwright\n await locator.nth(0).isEnabled();\n\n if (await locator.count() > 0) {\n let selects = await locator.elementHandles();\n for (const index in selects) {\n await selects[index].click();\n }\n }\n }\n\n async refreshContentTree() {\n const contentHeader = await this.page.locator('li .umb-tree-root >> text=\"Content\"');\n await expect(contentHeader).toBeVisible();\n await contentHeader.click({button: \"right\"});\n\n await this.clickElement(this.getContextMenuAction(\"action-refreshNode\"))\n\n await expect(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();\n }\n \n async refreshMediaTree() {\n const mediaHeader = await this.page.locator('li .umb-tree-root >> text=\"Media\"');\n await expect(mediaHeader).toBeVisible();\n await mediaHeader.click({button: \"right\"});\n await this.clickElement(this.getContextMenuAction(\"action-refreshNode\"));\n await expect(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();\n }\n \n async fileUploader(path){\n this.page.on(\"filechooser\", async (fileChooser) => {\n await fileChooser.setFiles(path);\n });\n await this.page.locator('[property-alias=\"umbracoFile\"]').click();\n await this.page.locator('[alias=\"save\"]').click();\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class UserApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ ensureEmailNotExits(email: string): Promise<void>;
6
+ setCurrentLanguage(language: any): Promise<void>;
7
+ deleteContentById(id: any): Promise<void>;
8
+ postCreateUser(user: any): Promise<void>;
9
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserApiHelper = void 0;
4
+ const JsonHelper_1 = require("./JsonHelper");
5
+ const umbraco_config_1 = require("../../umbraco.config");
6
+ class UserApiHelper {
7
+ api;
8
+ constructor(api) {
9
+ this.api = api;
10
+ }
11
+ async ensureEmailNotExits(email) {
12
+ let response = await this.api.get(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Users/GetPagedUsers?pageNumber=1&pageSize=1&orderBy=Name&orderDirection=Ascending&filter=${email}`);
13
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
14
+ if (searchBody.totalItems >= 1) {
15
+ const userId = searchBody.items[0].id;
16
+ await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=${userId}`);
17
+ }
18
+ }
19
+ async setCurrentLanguage(language) {
20
+ let response = await this.api.get(`${this.api.baseUrl}/umbraco/backoffice/umbracoapi/authentication/GetCurrentUser`);
21
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
22
+ const user = {
23
+ id: searchBody.id,
24
+ parentId: -1,
25
+ name: searchBody.name,
26
+ username: searchBody.email,
27
+ culture: language,
28
+ email: searchBody.email,
29
+ startContentIds: [],
30
+ startMediaIds: [],
31
+ userGroups: searchBody.userGroups
32
+ };
33
+ await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/umbracoapi/users/PostSaveUser`, user);
34
+ }
35
+ async deleteContentById(id) {
36
+ await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Content/DeleteById?id=${id}`);
37
+ }
38
+ async postCreateUser(user) {
39
+ await this.api.post(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/backoffice/umbracoapi/users/PostCreateUser`, user);
40
+ }
41
+ ;
42
+ }
43
+ exports.UserApiHelper = UserApiHelper;
44
+ //# sourceMappingURL=UserApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/UserApiHelper.ts"],"names":[],"mappings":";;;AACA,6CAAwC;AACxC,yDAAmD;AAEnD,MAAa,aAAa;IACxB,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,2HAA2H,KAAK,EAAE,CAAC,CAAA;QACxL,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,qEAAqE,MAAM,EAAE,CAAC,CAAA;SACtH;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAQ;QAC/B,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,8DAA8D,CAAC,CAAA;QACpH,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,QAAQ,EAAE,CAAC,CAAC;YACZ,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC1B,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,EAAE;YACjB,UAAU,EAAE,UAAU,CAAC,UAAU;SAClC,CAAA;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,mDAAmD,EAAE,IAAI,CAAC,CAAA;IACnG,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAE;QACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,wDAAwD,EAAE,EAAE,CAAC,CAAA;IACtG,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAI;QACrB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,qDAAqD,EAAE,IAAI,CAAC,CAAA;IACtH,CAAC;IAAA,CAAC;CAIL;AA3CD,sCA2CC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {JsonHelper} from \"./JsonHelper\";\nimport {umbracoConfig} from \"../../umbraco.config\";\n\nexport class UserApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureEmailNotExits(email: string) {\n let response = await this.api.get(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Users/GetPagedUsers?pageNumber=1&pageSize=1&orderBy=Name&orderDirection=Ascending&filter=${email}`)\n const searchBody = await JsonHelper.getBody(response);\n if (searchBody.totalItems >= 1) {\n const userId = searchBody.items[0].id;\n await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=${userId}`)\n }\n }\n\n async setCurrentLanguage(language) {\n let response = await this.api.get(`${this.api.baseUrl}/umbraco/backoffice/umbracoapi/authentication/GetCurrentUser`)\n const searchBody = await JsonHelper.getBody(response);\n const user = {\n id: searchBody.id,\n parentId: -1,\n name: searchBody.name,\n username: searchBody.email,\n culture: language,\n email: searchBody.email,\n startContentIds: [],\n startMediaIds: [],\n userGroups: searchBody.userGroups\n }\n await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/umbracoapi/users/PostSaveUser`, user)\n }\n\n async deleteContentById(id) {\n await this.api.post(`${this.api.baseUrl}/umbraco/backoffice/UmbracoApi/Content/DeleteById?id=${id}`)\n }\n \n async postCreateUser(user){\n await this.api.post(`${umbracoConfig.environment.baseUrl}/umbraco/backoffice/umbracoapi/users/PostCreateUser`, user)\n };\n \n \n \n}"]}
@@ -0,0 +1,7 @@
1
+ import { ApiHelpers } from "./ApiHelpers";
2
+ export declare class UserGroupApiHelper {
3
+ api: ApiHelpers;
4
+ constructor(api: ApiHelpers);
5
+ ensureNameNotExits(name: string): Promise<void>;
6
+ save(userGroup: any): Promise<void>;
7
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserGroupApiHelper = void 0;
4
+ const JsonHelper_1 = require("./JsonHelper");
5
+ const umbraco_config_1 = require("../../umbraco.config");
6
+ class UserGroupApiHelper {
7
+ api;
8
+ constructor(api) {
9
+ this.api = api;
10
+ }
11
+ async ensureNameNotExits(name) {
12
+ let response = await this.api.get(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/UserGroups/GetUserGroups?onlyCurrentUserGroups=false`);
13
+ const searchBody = await JsonHelper_1.JsonHelper.getBody(response);
14
+ if (searchBody.length > 0) {
15
+ let userGroupId = null;
16
+ for (const sb of searchBody) {
17
+ if (sb.name === name) {
18
+ userGroupId = sb.id;
19
+ }
20
+ }
21
+ if (userGroupId !== null) {
22
+ await this.api.post(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/UserGroups/PostDeleteUserGroups?userGroupIds=${userGroupId}`);
23
+ return;
24
+ }
25
+ }
26
+ }
27
+ async save(userGroup) {
28
+ await this.api.post(`${umbraco_config_1.umbracoConfig.environment.baseUrl}/umbraco/backoffice/umbracoapi/usergroups/PostSaveUserGroup`, userGroup);
29
+ }
30
+ }
31
+ exports.UserGroupApiHelper = UserGroupApiHelper;
32
+ //# sourceMappingURL=UserGroupApiHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserGroupApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/UserGroupApiHelper.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAC1C,yDAAqD;AAErD,MAAa,kBAAkB;IAC7B,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,IAAW;QAClC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,qFAAqF,CAAC,CAAC;QAC7J,MAAM,UAAU,GAAG,MAAM,uBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;gBAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;oBACpB,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC;iBACrB;aACF;YAED,IAAI,WAAW,KAAK,IAAI,EAAE;gBACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,+EAA+E,WAAW,EAAE,CAAC,CAAC;gBACtJ,OAAO;aACR;SACF;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAS;QAClB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,8BAAa,CAAC,WAAW,CAAC,OAAO,6DAA6D,EAAE,SAAS,CAAC,CAAA;IACnI,CAAC;CACF;AA5BD,gDA4BC","sourcesContent":["import { ApiHelpers } from \"./ApiHelpers\";\nimport { JsonHelper } from \"./JsonHelper\";\nimport { umbracoConfig } from \"../../umbraco.config\";\n\nexport class UserGroupApiHelper{\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureNameNotExits(name:string){\n let response = await this.api.get(`${umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/UserGroups/GetUserGroups?onlyCurrentUserGroups=false`);\n const searchBody = await JsonHelper.getBody(response);\n if (searchBody.length > 0) {\n let userGroupId = null;\n for (const sb of searchBody) {\n if (sb.name === name) {\n userGroupId = sb.id;\n }\n }\n\n if (userGroupId !== null) {\n await this.api.post(`${umbracoConfig.environment.baseUrl}/umbraco/backoffice/UmbracoApi/UserGroups/PostDeleteUserGroups?userGroupIds=${userGroupId}`);\n return;\n }\n }\n }\n \n async save(userGroup){\n await this.api.post(`${umbracoConfig.environment.baseUrl}/umbraco/backoffice/umbracoapi/usergroups/PostSaveUserGroup`, userGroup)\n }\n}"]}
@@ -0,0 +1,6 @@
1
+ export { JsonHelper } from './JsonHelper';
2
+ export { ApiHelpers } from './ApiHelpers';
3
+ export { UiHelpers } from './UiHelpers';
4
+ export { test } from './testExtension';
5
+ export { ConstantHelper } from './ConstantHelper';
6
+ export { AliasHelper } from './AliasHelper';
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasHelper = exports.ConstantHelper = exports.test = exports.UiHelpers = exports.ApiHelpers = exports.JsonHelper = void 0;
4
+ var JsonHelper_1 = require("./JsonHelper");
5
+ Object.defineProperty(exports, "JsonHelper", { enumerable: true, get: function () { return JsonHelper_1.JsonHelper; } });
6
+ var ApiHelpers_1 = require("./ApiHelpers");
7
+ Object.defineProperty(exports, "ApiHelpers", { enumerable: true, get: function () { return ApiHelpers_1.ApiHelpers; } });
8
+ var UiHelpers_1 = require("./UiHelpers");
9
+ Object.defineProperty(exports, "UiHelpers", { enumerable: true, get: function () { return UiHelpers_1.UiHelpers; } });
10
+ var testExtension_1 = require("./testExtension");
11
+ Object.defineProperty(exports, "test", { enumerable: true, get: function () { return testExtension_1.test; } });
12
+ var ConstantHelper_1 = require("./ConstantHelper");
13
+ Object.defineProperty(exports, "ConstantHelper", { enumerable: true, get: function () { return ConstantHelper_1.ConstantHelper; } });
14
+ var AliasHelper_1 = require("./AliasHelper");
15
+ Object.defineProperty(exports, "AliasHelper", { enumerable: true, get: function () { return AliasHelper_1.AliasHelper; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/helpers/index.ts"],"names":[],"mappings":";;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,iDAAuC;AAA9B,qGAAA,IAAI,OAAA;AACb,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA","sourcesContent":["export { JsonHelper} from './JsonHelper';\nexport { ApiHelpers } from './ApiHelpers';\nexport { UiHelpers } from './UiHelpers';\nexport { test } from './testExtension';\nexport { ConstantHelper } from './ConstantHelper';\nexport { AliasHelper } from './AliasHelper';"]}
@@ -0,0 +1,7 @@
1
+ import { ApiHelpers, UiHelpers } from ".";
2
+ declare const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & {
3
+ umbracoApi: ApiHelpers;
4
+ } & {
5
+ umbracoUi: UiHelpers;
6
+ }, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
7
+ export { test };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.test = void 0;
4
+ const test_1 = require("@playwright/test");
5
+ const _1 = require(".");
6
+ const test = test_1.test.extend({
7
+ umbracoApi: async ({ page }, use) => {
8
+ const umbracoApi = new _1.ApiHelpers(page);
9
+ await use(umbracoApi);
10
+ },
11
+ umbracoUi: async ({ page }, use) => {
12
+ const umbracoApi = new _1.UiHelpers(page);
13
+ await use(umbracoApi);
14
+ }
15
+ });
16
+ exports.test = test;
17
+ //# sourceMappingURL=testExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testExtension.js","sourceRoot":"","sources":["../../../lib/helpers/testExtension.ts"],"names":[],"mappings":";;;AAAA,2CAA8C;AAC9C,wBAA0C;AAE1C,MAAM,IAAI,GAAG,WAAI,CAAC,MAAM,CAAqD;IAC3E,UAAU,EAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,UAAU,GAAG,IAAI,aAAU,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAED,SAAS,EAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QAClC,MAAM,UAAU,GAAG,IAAI,YAAS,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;CACF,CAAC,CAAA;AAEM,oBAAI","sourcesContent":["import { test as base} from \"@playwright/test\"\nimport { ApiHelpers, UiHelpers } from \".\";\n\nconst test = base.extend<{umbracoApi: ApiHelpers} & {umbracoUi : UiHelpers}>({\n umbracoApi : async ({ page }, use) => {\n const umbracoApi = new ApiHelpers(page);\n await use(umbracoApi);\n },\n\n umbracoUi : async ({ page }, use) => {\n const umbracoApi = new UiHelpers(page);\n await use(umbracoApi);\n }\n})\n\nexport {test};"]}
@@ -0,0 +1 @@
1
+ export * from './helpers';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./helpers"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B","sourcesContent":["export * from './helpers';"]}