@umbraco/playwright-testhelpers 1.0.21 → 2.0.0-beta
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.
- package/dist/lib/helpers/ApiHelpers.d.ts +31 -40
- package/dist/lib/helpers/ApiHelpers.js +64 -100
- package/dist/lib/helpers/ApiHelpers.js.map +1 -1
- package/dist/lib/helpers/DataTypeApiHelper.d.ts +28 -0
- package/dist/lib/helpers/DataTypeApiHelper.js +194 -0
- package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -0
- package/dist/lib/helpers/DictionaryApiHelper.d.ts +19 -0
- package/dist/lib/helpers/DictionaryApiHelper.js +103 -0
- package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -0
- package/dist/lib/helpers/{FolderApiHelper.d.ts → DocumentApiHelper.d.ts} +1 -2
- package/dist/lib/helpers/DocumentApiHelper.js +11 -0
- package/dist/lib/helpers/DocumentApiHelper.js.map +1 -0
- package/dist/lib/helpers/LanguageApiHelper.d.ts +12 -0
- package/dist/lib/helpers/LanguageApiHelper.js +71 -0
- package/dist/lib/helpers/LanguageApiHelper.js.map +1 -0
- package/dist/lib/helpers/PackageApiHelper.d.ts +9 -4
- package/dist/lib/helpers/PackageApiHelper.js +86 -24
- package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
- package/dist/lib/helpers/PartialViewApiHelper.d.ts +12 -4
- package/dist/lib/helpers/PartialViewApiHelper.js +101 -23
- package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
- package/dist/lib/helpers/RelationType.d.ts +14 -0
- package/dist/lib/helpers/RelationType.js +94 -0
- package/dist/lib/helpers/RelationType.js.map +1 -0
- package/dist/lib/helpers/ScriptApiHelper.d.ts +12 -6
- package/dist/lib/helpers/ScriptApiHelper.js +101 -35
- package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
- package/dist/lib/helpers/StylesheetApiHelper.d.ts +13 -2
- package/dist/lib/helpers/StylesheetApiHelper.js +113 -12
- package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
- package/dist/lib/helpers/TelemetryDataApiHelper.d.ts +7 -0
- package/dist/lib/helpers/TelemetryDataApiHelper.js +22 -0
- package/dist/lib/helpers/TelemetryDataApiHelper.js.map +1 -0
- package/dist/lib/helpers/TemplateApiHelper.d.ts +16 -0
- package/dist/lib/helpers/TemplateApiHelper.js +104 -0
- package/dist/lib/helpers/TemplateApiHelper.js.map +1 -0
- package/dist/lib/helpers/TemporaryFileApiHelper.d.ts +10 -0
- package/dist/lib/helpers/TemporaryFileApiHelper.js +50 -0
- package/dist/lib/helpers/TemporaryFileApiHelper.js.map +1 -0
- package/dist/lib/helpers/UiHelpers.d.ts +1 -33
- package/dist/lib/helpers/UiHelpers.js +0 -196
- package/dist/lib/helpers/UiHelpers.js.map +1 -1
- package/dist/lib/helpers/UserApiHelper.d.ts +16 -5
- package/dist/lib/helpers/UserApiHelper.js +115 -44
- package/dist/lib/helpers/UserApiHelper.js.map +1 -1
- package/dist/lib/helpers/UserGroupApiHelper.d.ts +8 -2
- package/dist/lib/helpers/UserGroupApiHelper.js +66 -15
- package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
- package/dist/lib/helpers/index.d.ts +1 -3
- package/dist/lib/helpers/index.js +3 -7
- package/dist/lib/helpers/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/lib/helpers/ConstantHelper.d.ts +0 -40
- package/dist/lib/helpers/ConstantHelper.js +0 -45
- package/dist/lib/helpers/ConstantHelper.js.map +0 -1
- package/dist/lib/helpers/ContentApiHelper.d.ts +0 -12
- package/dist/lib/helpers/ContentApiHelper.js +0 -126
- package/dist/lib/helpers/ContentApiHelper.js.map +0 -1
- package/dist/lib/helpers/DatatypeApiHelper.d.ts +0 -8
- package/dist/lib/helpers/DatatypeApiHelper.js +0 -42
- package/dist/lib/helpers/DatatypeApiHelper.js.map +0 -1
- package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +0 -8
- package/dist/lib/helpers/DocumentTypeApiHelper.js +0 -52
- package/dist/lib/helpers/DocumentTypeApiHelper.js.map +0 -1
- package/dist/lib/helpers/DomainApiHelper.d.ts +0 -7
- package/dist/lib/helpers/DomainApiHelper.js +0 -31
- package/dist/lib/helpers/DomainApiHelper.js.map +0 -1
- package/dist/lib/helpers/FolderApiHelper.js +0 -16
- package/dist/lib/helpers/FolderApiHelper.js.map +0 -1
- package/dist/lib/helpers/JsonHelper.d.ts +0 -12
- package/dist/lib/helpers/JsonHelper.js +0 -29
- package/dist/lib/helpers/JsonHelper.js.map +0 -1
- package/dist/lib/helpers/LanguagesApiHelper.d.ts +0 -10
- package/dist/lib/helpers/LanguagesApiHelper.js +0 -67
- package/dist/lib/helpers/LanguagesApiHelper.js.map +0 -1
- package/dist/lib/helpers/MacroApiHelper.d.ts +0 -9
- package/dist/lib/helpers/MacroApiHelper.js +0 -56
- package/dist/lib/helpers/MacroApiHelper.js.map +0 -1
- package/dist/lib/helpers/MediaApiHelper.d.ts +0 -75
- package/dist/lib/helpers/MediaApiHelper.js +0 -267
- package/dist/lib/helpers/MediaApiHelper.js.map +0 -1
- package/dist/lib/helpers/MediaTypeApiHelper.d.ts +0 -7
- package/dist/lib/helpers/MediaTypeApiHelper.js +0 -29
- package/dist/lib/helpers/MediaTypeApiHelper.js.map +0 -1
- package/dist/lib/helpers/MemberApiHelper.d.ts +0 -6
- package/dist/lib/helpers/MemberApiHelper.js +0 -22
- package/dist/lib/helpers/MemberApiHelper.js.map +0 -1
- package/dist/lib/helpers/MemberGroupApiHelper.d.ts +0 -6
- package/dist/lib/helpers/MemberGroupApiHelper.js +0 -25
- package/dist/lib/helpers/MemberGroupApiHelper.js.map +0 -1
- package/dist/lib/helpers/MemberTypeApiHelper.d.ts +0 -6
- package/dist/lib/helpers/MemberTypeApiHelper.js +0 -28
- package/dist/lib/helpers/MemberTypeApiHelper.js.map +0 -1
- package/dist/lib/helpers/RelationTypeApiHelper.d.ts +0 -6
- package/dist/lib/helpers/RelationTypeApiHelper.js +0 -28
- package/dist/lib/helpers/RelationTypeApiHelper.js.map +0 -1
- package/dist/lib/helpers/TemplatesApiHelper.d.ts +0 -8
- package/dist/lib/helpers/TemplatesApiHelper.js +0 -47
- package/dist/lib/helpers/TemplatesApiHelper.js.map +0 -1
- package/dist/lib/helpers/TranslationApiHelper.d.ts +0 -6
- package/dist/lib/helpers/TranslationApiHelper.js +0 -25
- package/dist/lib/helpers/TranslationApiHelper.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TelemetryDataApiHelper = void 0;
|
|
4
|
+
class TelemetryDataApiHelper {
|
|
5
|
+
api;
|
|
6
|
+
constructor(api) {
|
|
7
|
+
this.api = api;
|
|
8
|
+
}
|
|
9
|
+
async setTelemetryLevel(level) {
|
|
10
|
+
const data = {
|
|
11
|
+
"telemetryLevel": level
|
|
12
|
+
};
|
|
13
|
+
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/telemetry/level', data);
|
|
14
|
+
}
|
|
15
|
+
async checkTelemetryLevel(level) {
|
|
16
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/telemetry/level');
|
|
17
|
+
const json = await response.json();
|
|
18
|
+
return level === json.telemetryLevel;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.TelemetryDataApiHelper = TelemetryDataApiHelper;
|
|
22
|
+
//# sourceMappingURL=TelemetryDataApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelemetryDataApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TelemetryDataApiHelper.ts"],"names":[],"mappings":";;;AAEA,MAAa,sBAAsB;IACjC,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa;QACnC,MAAM,IAAI,GAAG;YACX,gBAAgB,EAAE,KAAK;SACxB,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,EAAE,IAAI,CAAC,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAa;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,4CAA4C,CAAC,CAAC;QACrG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,OAAO,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC;IACvC,CAAC;CACF;AApBD,wDAoBC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class TelemetryDataApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async setTelemetryLevel(level: string) {\n const data = {\n \"telemetryLevel\": level\n }\n return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/telemetry/level', data);\n }\n\n async checkTelemetryLevel(level: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/telemetry/level');\n const json = await response.json();\n\n return level === json.telemetryLevel;\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ApiHelpers } from "./ApiHelpers";
|
|
2
|
+
export declare class TemplateApiHelper {
|
|
3
|
+
api: ApiHelpers;
|
|
4
|
+
constructor(api: ApiHelpers);
|
|
5
|
+
ensureTemplateNameNotExistsAtRoot(name: string): Promise<import("playwright-core").APIResponse | null>;
|
|
6
|
+
getTemplateById(id: string): Promise<any>;
|
|
7
|
+
getTemplateByNameAtRoot(name: string): Promise<any>;
|
|
8
|
+
createTemplate(name: string, alias: string, content: string): Promise<import("playwright-core").APIResponse>;
|
|
9
|
+
deleteTemplateById(id: string): Promise<import("playwright-core").APIResponse>;
|
|
10
|
+
deleteTemplateByNameAtRoot(name: string): Promise<import("playwright-core").APIResponse | null>;
|
|
11
|
+
updateTemplateById(id: string, template: object): Promise<import("playwright-core").APIResponse>;
|
|
12
|
+
getChildrenTemplatesById(id: string): Promise<any>;
|
|
13
|
+
getTemplateItemsByIds(ids: string[]): Promise<any>;
|
|
14
|
+
getTemplatesAtRoot(): Promise<import("playwright-core").APIResponse>;
|
|
15
|
+
doesTemplateWithNameExistAtRoot(name: string): Promise<boolean>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemplateApiHelper = void 0;
|
|
4
|
+
class TemplateApiHelper {
|
|
5
|
+
api;
|
|
6
|
+
constructor(api) {
|
|
7
|
+
this.api = api;
|
|
8
|
+
}
|
|
9
|
+
async ensureTemplateNameNotExistsAtRoot(name) {
|
|
10
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');
|
|
11
|
+
const json = await response.json();
|
|
12
|
+
for (const sb of json.items) {
|
|
13
|
+
if (sb.name === name) {
|
|
14
|
+
if (sb.id !== null) {
|
|
15
|
+
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
async getTemplateById(id) {
|
|
22
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/template/' + id);
|
|
23
|
+
const json = await response.json();
|
|
24
|
+
if (json !== null) {
|
|
25
|
+
return json;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
async getTemplateByNameAtRoot(name) {
|
|
30
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');
|
|
31
|
+
const json = await response.json();
|
|
32
|
+
for (const sb of json.items) {
|
|
33
|
+
if (sb.name === name) {
|
|
34
|
+
if (sb.id !== null) {
|
|
35
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);
|
|
36
|
+
return await response.json();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
async createTemplate(name, alias, content) {
|
|
43
|
+
const templateData = {
|
|
44
|
+
"name": name,
|
|
45
|
+
"alias": alias,
|
|
46
|
+
"content": content
|
|
47
|
+
};
|
|
48
|
+
return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/template', templateData);
|
|
49
|
+
}
|
|
50
|
+
async deleteTemplateById(id) {
|
|
51
|
+
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/dictionary/' + id);
|
|
52
|
+
}
|
|
53
|
+
async deleteTemplateByNameAtRoot(name) {
|
|
54
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');
|
|
55
|
+
const json = await response.json();
|
|
56
|
+
for (const sb of json.items) {
|
|
57
|
+
if (sb.name === name) {
|
|
58
|
+
if (sb.id !== null) {
|
|
59
|
+
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
async updateTemplateById(id, template) {
|
|
66
|
+
return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/template/' + id, template);
|
|
67
|
+
}
|
|
68
|
+
async getChildrenTemplatesById(id) {
|
|
69
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/children?skip=0&take=10000' + id);
|
|
70
|
+
const json = await response.json();
|
|
71
|
+
if (json !== null) {
|
|
72
|
+
return json;
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
async getTemplateItemsByIds(ids) {
|
|
77
|
+
let idArray = 'id=' + ids[0];
|
|
78
|
+
let i;
|
|
79
|
+
for (i = 1; i < ids.length; ++i) {
|
|
80
|
+
idArray += '&id=' + ids[i];
|
|
81
|
+
}
|
|
82
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/item?' + idArray);
|
|
83
|
+
const json = await response.json();
|
|
84
|
+
if (json !== null) {
|
|
85
|
+
return json;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
async getTemplatesAtRoot() {
|
|
90
|
+
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');
|
|
91
|
+
}
|
|
92
|
+
async doesTemplateWithNameExistAtRoot(name) {
|
|
93
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');
|
|
94
|
+
const json = await response.json();
|
|
95
|
+
for (const sb of json.items) {
|
|
96
|
+
if (sb.name === name) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.TemplateApiHelper = TemplateApiHelper;
|
|
104
|
+
//# sourceMappingURL=TemplateApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemplateApiHelper.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAC5B,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,iCAAiC,CAAC,IAAY;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,iEAAiE,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;oBAClB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjG;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACpG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,IAAY;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,iEAAiE,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACvG,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;iBAC9B;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe;QAC/D,MAAM,YAAY,GAAG;YACnB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,OAAO;SACnB,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,qCAAqC,EAAE,YAAY,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU;QACjC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,wCAAwC,GAAG,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,IAAY;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,iEAAiE,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE;oBAClB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjG;aACF;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,QAAgB;QACnD,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,sCAAsC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,EAAU;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,qEAAqE,GAAG,EAAE,CAAC,CAAC;QACnI,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAA;SACZ;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,GAAa;QACvC,IAAI,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAS,CAAC;QAEd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/B,OAAO,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5B;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,gDAAgD,GAAG,OAAO,CAAC,CAAC;QACnH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,iEAAiE,CAAC,CAAC;IAClH,CAAC;IAED,KAAK,CAAC,+BAA+B,CAAC,IAAY;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,iEAAiE,CAAC,CAAC;QAC1H,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAvHD,8CAuHC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\nexport class TemplateApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureTemplateNameNotExistsAtRoot(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');\n const json = await response.json();\n\n for (const sb of json.items) {\n if (sb.name === name) {\n if (sb.id !== null) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);\n }\n }\n }\n return null;\n }\n\n async getTemplateById(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/template/' + id);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async getTemplateByNameAtRoot(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');\n const json = await response.json();\n\n for (const sb of json.items) {\n if (sb.name === name) {\n if (sb.id !== null) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);\n return await response.json();\n }\n }\n }\n return null;\n }\n\n async createTemplate(name: string, alias: string, content: string) {\n const templateData = {\n \"name\": name,\n \"alias\": alias,\n \"content\": content\n };\n return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/template', templateData);\n }\n\n async deleteTemplateById(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/dictionary/' + id);\n }\n\n async deleteTemplateByNameAtRoot(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');\n const json = await response.json();\n\n for (const sb of json.items) {\n if (sb.name === name) {\n if (sb.id !== null) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/template/' + sb.id);\n }\n }\n }\n return null;\n }\n\n async updateTemplateById(id: string, template: object) {\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/template/' + id, template);\n }\n\n async getChildrenTemplatesById(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/children?skip=0&take=10000' + id);\n const json = await response.json();\n\n if (json !== null) {\n return json\n }\n return null;\n }\n\n async getTemplateItemsByIds(ids: string[]) {\n let idArray = 'id=' + ids[0];\n let i: number;\n\n for (i = 1; i < ids.length; ++i) {\n idArray += '&id=' + ids[i];\n }\n\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/item?' + idArray);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async getTemplatesAtRoot() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');\n }\n\n async doesTemplateWithNameExistAtRoot(name: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/template/root?skip=0&take=10000');\n const json = await response.json();\n\n for (const sb of json.items) {\n if (sb.name === name) {\n return true;\n }\n }\n return false;\n }\n}"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ApiHelpers } from "./ApiHelpers";
|
|
2
|
+
export declare class TemporaryFileApiHelper {
|
|
3
|
+
api: ApiHelpers;
|
|
4
|
+
constructor(api: ApiHelpers);
|
|
5
|
+
ensureTemporaryFileWithIdNotExists(id: string): Promise<any>;
|
|
6
|
+
createTemporaryFile(id: string, name: string, mimeType: any, filePath: any): Promise<string>;
|
|
7
|
+
getTemporaryFileById(id: string): Promise<any>;
|
|
8
|
+
deleteTemporaryFileById(id: string): Promise<import("playwright-core").APIResponse>;
|
|
9
|
+
doesTemporaryFileWithIdExist(id: string): Promise<boolean>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemporaryFileApiHelper = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
class TemporaryFileApiHelper {
|
|
6
|
+
api;
|
|
7
|
+
constructor(api) {
|
|
8
|
+
this.api = api;
|
|
9
|
+
}
|
|
10
|
+
async ensureTemporaryFileWithIdNotExists(id) {
|
|
11
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);
|
|
12
|
+
const json = await response.json();
|
|
13
|
+
if (json !== null) {
|
|
14
|
+
return json.id;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
async createTemporaryFile(id, name, mimeType, filePath) {
|
|
19
|
+
const response = await this.api.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile', {
|
|
20
|
+
ignoreHTTPSErrors: true,
|
|
21
|
+
multipart: {
|
|
22
|
+
Id: id,
|
|
23
|
+
File: {
|
|
24
|
+
name: name,
|
|
25
|
+
mimeType: mimeType,
|
|
26
|
+
buffer: fs.readFileSync(filePath)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return await response.text();
|
|
31
|
+
}
|
|
32
|
+
async getTemporaryFileById(id) {
|
|
33
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);
|
|
34
|
+
const json = await response.json();
|
|
35
|
+
if (json !== null) {
|
|
36
|
+
return json;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
async deleteTemporaryFileById(id) {
|
|
41
|
+
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);
|
|
42
|
+
}
|
|
43
|
+
async doesTemporaryFileWithIdExist(id) {
|
|
44
|
+
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);
|
|
45
|
+
const json = await response.json();
|
|
46
|
+
return json.id == id;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.TemporaryFileApiHelper = TemporaryFileApiHelper;
|
|
50
|
+
//# sourceMappingURL=TemporaryFileApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemporaryFileApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemporaryFileApiHelper.ts"],"names":[],"mappings":";;;AACA,yBAAyB;AAEzB,MAAa,sBAAsB;IACjC,GAAG,CAAY;IAEf,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,kCAAkC,CAAC,EAAU;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,GAAG,EAAE,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC,EAAE,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,IAAY,EAAE,QAAQ,EAAE,QAAQ;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,0CAA0C,EAAE;YAC/G,iBAAiB,EAAE,IAAI;YACvB,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE;gBACN,IAAI,EAAE;oBACJ,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAClC;aACF;SACF,CAAC,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,GAAG,EAAE,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,EAAU;QACtC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,GAAG,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,EAAU;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,2CAA2C,GAAG,EAAE,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;CACF;AAlDD,wDAkDC","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport * as fs from \"fs\";\n\nexport class TemporaryFileApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureTemporaryFileWithIdNotExists(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);\n const json = await response.json();\n if (json !== null) {\n return json.id;\n }\n return null;\n }\n\n async createTemporaryFile(id: string, name: string, mimeType, filePath) {\n const response = await this.api.page.request.post(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile', {\n ignoreHTTPSErrors: true,\n multipart: {\n Id: id,\n File: {\n name: name,\n mimeType: mimeType,\n buffer: fs.readFileSync(filePath)\n }\n }\n });\n return await response.text();\n }\n\n async getTemporaryFileById(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);\n const json = await response.json();\n\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n async deleteTemporaryFileById(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);\n }\n\n async doesTemporaryFileWithIdExist(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/temporaryfile/' + id);\n const json = await response.json();\n return json.id == id;\n }\n}"]}
|
|
@@ -1,37 +1,5 @@
|
|
|
1
|
-
import { Page
|
|
1
|
+
import { Page } from "@playwright/test";
|
|
2
2
|
export declare class UiHelpers {
|
|
3
3
|
page: Page;
|
|
4
4
|
constructor(page: Page);
|
|
5
|
-
getGlobalHelp(): Promise<Locator>;
|
|
6
|
-
getGlobalUser(): Promise<Locator>;
|
|
7
|
-
getDataElementByElementName(name: string): Promise<Locator>;
|
|
8
|
-
getButtonByText(text: string): Promise<Locator>;
|
|
9
|
-
getButtonByLabelKey(label: string): Promise<Locator>;
|
|
10
|
-
getButtonByKey(label: string): Promise<Locator>;
|
|
11
|
-
getSuccessNotification(): Promise<Locator>;
|
|
12
|
-
isSuccessNotificationVisible(options?: any): Promise<void>;
|
|
13
|
-
isErrorNotificationVisible(options?: any): Promise<void>;
|
|
14
|
-
getErrorNotification(): Promise<Locator>;
|
|
15
|
-
clickElement(selector: Promise<Locator>, options?: any): Promise<void>;
|
|
16
|
-
clickDataElementByElementName(name: string, options?: any): Promise<void>;
|
|
17
|
-
clickButtonByText(text: string): Promise<void>;
|
|
18
|
-
goToSection(sectionAlias: string): Promise<void>;
|
|
19
|
-
waitForTreeLoad(sectionAlias: string): Promise<void>;
|
|
20
|
-
getTreeItem(treeName: string, itemNamePathArray: string[]): Promise<Locator>;
|
|
21
|
-
getContextMenuAction(actionName: string): Promise<Locator>;
|
|
22
|
-
setEditorHeaderName(headerName: string): Promise<void>;
|
|
23
|
-
getEditorHeaderName(typedText: string): Promise<void>;
|
|
24
|
-
clickMultiple(locator: Locator): Promise<void>;
|
|
25
|
-
refreshContentTree(): Promise<void>;
|
|
26
|
-
refreshMediaTree(): Promise<void>;
|
|
27
|
-
fileUploader(path: any): Promise<void>;
|
|
28
|
-
switchCultureInContent(languageName: any): Promise<void>;
|
|
29
|
-
updateDocumentPermissionsToAllowCultureVariant(): Promise<void>;
|
|
30
|
-
goToAddEditor(groupName: any, propertyName: any): Promise<void>;
|
|
31
|
-
createNewDocumentTypeWithTemplate(): Promise<void>;
|
|
32
|
-
createContentWithDocumentType(documentName: any): Promise<void>;
|
|
33
|
-
navigateToDataType(dataTypeName: any): Promise<void>;
|
|
34
|
-
navigateToDocumentType(documentTypeName: any): Promise<void>;
|
|
35
|
-
navigateToTemplate(templateName: any): Promise<void>;
|
|
36
|
-
doesDataTypeExist(dataTypeName: any): Promise<void>;
|
|
37
5
|
}
|
|
@@ -1,207 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UiHelpers = void 0;
|
|
4
|
-
const test_1 = require("@playwright/test");
|
|
5
|
-
const AliasHelper_1 = require("./AliasHelper");
|
|
6
|
-
const ConstantHelper_1 = require("./ConstantHelper");
|
|
7
4
|
class UiHelpers {
|
|
8
5
|
page;
|
|
9
6
|
constructor(page) {
|
|
10
7
|
this.page = page;
|
|
11
8
|
}
|
|
12
|
-
async getGlobalHelp() {
|
|
13
|
-
return this.page.locator(`[data-element="global-help"]`);
|
|
14
|
-
}
|
|
15
|
-
async getGlobalUser() {
|
|
16
|
-
return this.page.locator(`[data-element="global-user"]`);
|
|
17
|
-
}
|
|
18
|
-
async getDataElementByElementName(name) {
|
|
19
|
-
return this.page.locator(`[data-element="${name}"]`);
|
|
20
|
-
}
|
|
21
|
-
async getButtonByText(text) {
|
|
22
|
-
return this.page.locator(`button:has-text("${text}")`);
|
|
23
|
-
}
|
|
24
|
-
async getButtonByLabelKey(label) {
|
|
25
|
-
return this.page.locator(`umb-button[label-key="${label}"] button:enabled`);
|
|
26
|
-
}
|
|
27
|
-
async getButtonByKey(label) {
|
|
28
|
-
return this.page.locator(`[key="${label}"]`);
|
|
29
|
-
}
|
|
30
|
-
async getSuccessNotification() {
|
|
31
|
-
return this.page.locator('.umb-notifications__notifications > .alert-success');
|
|
32
|
-
}
|
|
33
|
-
async isSuccessNotificationVisible(options = null) {
|
|
34
|
-
if (options != null) {
|
|
35
|
-
await (0, test_1.expect)(await this.getSuccessNotification()).toBeVisible(options);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
await (0, test_1.expect)(await this.getSuccessNotification()).toBeVisible({ timeout: 10000 });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async isErrorNotificationVisible(options = null) {
|
|
42
|
-
if (options != null) {
|
|
43
|
-
await (0, test_1.expect)(await this.getErrorNotification()).toBeVisible(options);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
await (0, test_1.expect)(await this.getErrorNotification()).toBeVisible({ timeout: 10000 });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async getErrorNotification() {
|
|
50
|
-
return this.page.locator('.umb-notifications__notifications > .alert-error');
|
|
51
|
-
}
|
|
52
|
-
async clickElement(selector, options = null) {
|
|
53
|
-
const resolvedSelector = await selector;
|
|
54
|
-
await resolvedSelector.click(options);
|
|
55
|
-
}
|
|
56
|
-
async clickDataElementByElementName(name, options = null) {
|
|
57
|
-
return this.page.click(`[data-element="${name}"]`, options);
|
|
58
|
-
}
|
|
59
|
-
async clickButtonByText(text) {
|
|
60
|
-
return this.page.click(`button:has-text("${text}")`);
|
|
61
|
-
}
|
|
62
|
-
async goToSection(sectionAlias) {
|
|
63
|
-
await this.page.click('[data-element="section-' + sectionAlias + '"]');
|
|
64
|
-
}
|
|
65
|
-
async waitForTreeLoad(sectionAlias) {
|
|
66
|
-
const tree = await this.page.locator('.umb-tree');
|
|
67
|
-
await (0, test_1.expect)(await this.page.locator('.umb-tree')).toBeVisible();
|
|
68
|
-
await (0, test_1.expect)(await tree.locator("a", { hasText: sectionAlias })).toBeVisible();
|
|
69
|
-
}
|
|
70
|
-
async getTreeItem(treeName, itemNamePathArray) {
|
|
71
|
-
await (0, test_1.expect)((await this.page.locator('li > .umb-tree-root a[href*=' + treeName + ']').first())).toBeVisible();
|
|
72
|
-
let finalLocator = await this.page
|
|
73
|
-
.locator('li > .umb-tree-root a[href*=' + treeName + ']')
|
|
74
|
-
.locator("xpath=ancestor::li");
|
|
75
|
-
for (let i = 0; i < itemNamePathArray.length; i++) {
|
|
76
|
-
// We want to find the outer li of the tree item, to be able to search deeper, there may be multiple results
|
|
77
|
-
// for multiple levels of nesting, but it should be okay to pick last, since that should pick the immediate parent
|
|
78
|
-
// the search goes from outer most to inner most (I think)
|
|
79
|
-
finalLocator = await finalLocator
|
|
80
|
-
.locator('.umb-tree-item__label >> text=' + itemNamePathArray[i])
|
|
81
|
-
.locator('xpath=ancestor::li[contains(@class, "umb-tree-item")]')
|
|
82
|
-
.last();
|
|
83
|
-
// We don't want to click the expand option if we're on the last item,
|
|
84
|
-
// since that can cause issues when clicking the "root" items, such as Document Types.
|
|
85
|
-
if (i + 1 == itemNamePathArray.length) {
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
// Get the UL with the collapsed state, if it exists
|
|
89
|
-
const ulObject = await finalLocator.locator(".collapsed");
|
|
90
|
-
const locatorIcon = await finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] }).innerHTML();
|
|
91
|
-
// Check if an element is actually expanded, if not expanded, it will have the "icon-navigation-right"
|
|
92
|
-
if (locatorIcon.includes("icon-navigation-right")) {
|
|
93
|
-
if (await ulObject.count() > 0) {
|
|
94
|
-
// Get the expand button
|
|
95
|
-
const expandButton = finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] });
|
|
96
|
-
// Weirdly if a tree item has no children is still marked as expanded, however, the expand button is hidden
|
|
97
|
-
// So we have to ensure that the button is not hidden before we click.
|
|
98
|
-
if (await expandButton.isHidden() === false) {
|
|
99
|
-
// Click the expand button, if its collapsed
|
|
100
|
-
await finalLocator.locator('[data-element="tree-item-expand"]', { hasText: itemNamePathArray[i] }).click();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return finalLocator;
|
|
106
|
-
}
|
|
107
|
-
async getContextMenuAction(actionName) {
|
|
108
|
-
return this.page.locator('li.umb-action[data-element="' + actionName + '"]');
|
|
109
|
-
}
|
|
110
|
-
async setEditorHeaderName(headerName) {
|
|
111
|
-
const header = await this.page.locator("#headerName");
|
|
112
|
-
await header.type(headerName);
|
|
113
|
-
// We need to wait for the alias to be generated, but only if we can find it
|
|
114
|
-
const aliasField = await this.page.locator('.umb-locked-field__input');
|
|
115
|
-
if (await aliasField.count() > 0) {
|
|
116
|
-
await (0, test_1.expect)(aliasField).toHaveValue(AliasHelper_1.AliasHelper.toAlias(headerName));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
async getEditorHeaderName(typedText) {
|
|
120
|
-
await this.page.locator('#headerName').fill(typedText, { timeout: 10000 });
|
|
121
|
-
let result = await this.page.locator('.umb-editor-header__name-wrapper').locator('input[name="lockedField"]');
|
|
122
|
-
const alias = AliasHelper_1.AliasHelper.toAlias(typedText);
|
|
123
|
-
await (0, test_1.expect)(result).toHaveValue(alias);
|
|
124
|
-
}
|
|
125
|
-
async clickMultiple(locator) {
|
|
126
|
-
// TODO: Remove this
|
|
127
|
-
// We're calling nth.IsEnabled to initialize the array, because locator is lazy
|
|
128
|
-
// and count will then always return 0, hopefully this will be fixed in a future version of playwright
|
|
129
|
-
await locator.nth(0).isEnabled();
|
|
130
|
-
if (await locator.count() > 0) {
|
|
131
|
-
let selects = await locator.elementHandles();
|
|
132
|
-
for (const index in selects) {
|
|
133
|
-
await selects[index].click();
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
async refreshContentTree() {
|
|
138
|
-
const contentHeader = await this.page.locator('li .umb-tree-root >> text="Content"');
|
|
139
|
-
await (0, test_1.expect)(contentHeader).toBeVisible();
|
|
140
|
-
await contentHeader.click({ button: "right" });
|
|
141
|
-
await this.clickElement(this.getContextMenuAction("action-refreshNode"));
|
|
142
|
-
await (0, test_1.expect)(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();
|
|
143
|
-
}
|
|
144
|
-
async refreshMediaTree() {
|
|
145
|
-
const mediaHeader = await this.page.locator('li .umb-tree-root >> text="Media"');
|
|
146
|
-
await (0, test_1.expect)(mediaHeader).toBeVisible();
|
|
147
|
-
await mediaHeader.click({ button: "right" });
|
|
148
|
-
await this.clickElement(this.getContextMenuAction("action-refreshNode"));
|
|
149
|
-
await (0, test_1.expect)(await this.page.locator('.umb-tree-item__inner').first()).toBeVisible();
|
|
150
|
-
}
|
|
151
|
-
async fileUploader(path) {
|
|
152
|
-
this.page.on("filechooser", async (fileChooser) => {
|
|
153
|
-
await fileChooser.setFiles(path);
|
|
154
|
-
});
|
|
155
|
-
await this.page.locator('[property-alias="umbracoFile"]').click();
|
|
156
|
-
await this.page.locator('[alias="save"]').click();
|
|
157
|
-
}
|
|
158
|
-
async switchCultureInContent(languageName) {
|
|
159
|
-
await this.page.locator('.umb-variant-switcher__toggle').click();
|
|
160
|
-
await this.page.locator('.umb-variant-switcher__name-wrapper', { hasText: languageName }).click();
|
|
161
|
-
}
|
|
162
|
-
async updateDocumentPermissionsToAllowCultureVariant() {
|
|
163
|
-
await this.page.locator('[data-element="sub-view-permissions"]').click();
|
|
164
|
-
await this.page.locator('[data-element="permissions-allow-as-root"]').click();
|
|
165
|
-
await this.page.locator('[data-element="permissions-allow-culture-variant"]').click();
|
|
166
|
-
await this.page.locator('[data-element="sub-view-design"]').click();
|
|
167
|
-
}
|
|
168
|
-
async goToAddEditor(groupName, propertyName) {
|
|
169
|
-
await this.page.locator('[data-element="group-add"]').click();
|
|
170
|
-
await this.page.locator('[data-element="group-name"]').type(groupName);
|
|
171
|
-
await this.page.locator('[key="contentTypeEditor_addProperty"]').click();
|
|
172
|
-
await this.page.locator('[data-element="property-name"]').type(propertyName);
|
|
173
|
-
await this.page.locator('[data-element="editor-add"]').click();
|
|
174
|
-
}
|
|
175
|
-
async createNewDocumentTypeWithTemplate() {
|
|
176
|
-
await this.page.locator('[data-element="tree-item-options"]', { hasText: "Open context menu for Document Types" }).click();
|
|
177
|
-
await this.page.locator('[data-element="action-documentType"]').click();
|
|
178
|
-
}
|
|
179
|
-
async createContentWithDocumentType(documentName) {
|
|
180
|
-
await this.page.locator('[element="tree-item-options"]', { hasText: "Open context node for Content" }).click();
|
|
181
|
-
await this.page.locator('.umb-action-link', { hasText: documentName }).click();
|
|
182
|
-
}
|
|
183
|
-
async navigateToDataType(dataTypeName) {
|
|
184
|
-
await this.goToSection(ConstantHelper_1.ConstantHelper.sections.settings);
|
|
185
|
-
await this.page.locator('[data-element="tree-item-dataTypes"]').locator('[data-element="tree-item-expand"]').click();
|
|
186
|
-
await this.clickDataElementByElementName('tree-item-' + dataTypeName);
|
|
187
|
-
}
|
|
188
|
-
async navigateToDocumentType(documentTypeName) {
|
|
189
|
-
await this.goToSection(ConstantHelper_1.ConstantHelper.sections.settings);
|
|
190
|
-
await this.clickDataElementByElementName('tree-item-documentTypes', { button: "right" });
|
|
191
|
-
await this.clickDataElementByElementName('action-refreshNode');
|
|
192
|
-
await this.clickDataElementByElementName('tree-item-' + documentTypeName);
|
|
193
|
-
}
|
|
194
|
-
async navigateToTemplate(templateName) {
|
|
195
|
-
await this.goToSection(ConstantHelper_1.ConstantHelper.sections.settings);
|
|
196
|
-
await this.page.locator('[data-element="tree-item-templates"]').locator('[data-element="tree-item-expand"]').click();
|
|
197
|
-
await this.clickDataElementByElementName('tree-item-' + templateName);
|
|
198
|
-
}
|
|
199
|
-
async doesDataTypeExist(dataTypeName) {
|
|
200
|
-
await this.goToSection(ConstantHelper_1.ConstantHelper.sections.settings);
|
|
201
|
-
await this.clickDataElementByElementName('tree-item-dataTypes', { button: "right" });
|
|
202
|
-
await this.clickDataElementByElementName('action-refreshNode');
|
|
203
|
-
await (0, test_1.expect)(await this.page.locator('[data-element="tree-item-dataTypes"] >> [data-element="tree-item-' + dataTypeName + '"]')).toBeVisible();
|
|
204
|
-
}
|
|
205
9
|
}
|
|
206
10
|
exports.UiHelpers = UiHelpers;
|
|
207
11
|
//# sourceMappingURL=UiHelpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiHelpers.js","sourceRoot":"","sources":["../../../lib/helpers/UiHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\"\nimport {AliasHelper} from \"./AliasHelper\";\nimport {ConstantHelper} from \"./ConstantHelper\";\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 getDataElementByElementName(name: string) {\n return this.page.locator(`[data-element=\"${name}\"]`);\n }\n\n async getButtonByText(text: string) {\n return this.page.locator(`button:has-text(\"${text}\")`);\n }\n\n async getButtonByLabelKey(label: string) {\n return this.page.locator(`umb-button[label-key=\"${label}\"] button:enabled`);\n }\n\n async getButtonByKey(label: string) {\n return this.page.locator(`[key=\"${label}\"]`);\n }\n\n async getSuccessNotification() {\n return this.page.locator('.umb-notifications__notifications > .alert-success');\n }\n\n async isSuccessNotificationVisible(options: any = null) {\n if (options != null) {\n await expect(await this.getSuccessNotification()).toBeVisible(options);\n } else {\n await expect(await this.getSuccessNotification()).toBeVisible({timeout: 10000});\n }\n }\n\n async isErrorNotificationVisible(options: any = null) {\n if (options != null) {\n await expect(await this.getErrorNotification()).toBeVisible(options);\n } else {\n await expect(await this.getErrorNotification()).toBeVisible({timeout: 10000});\n }\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 clickDataElementByElementName(name: string, options: any = null) {\n return this.page.click(`[data-element=\"${name}\"]`, options);\n }\n\n async clickButtonByText(text: string) {\n return this.page.click(`button:has-text(\"${text}\")`);\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 async switchCultureInContent(languageName) {\n await this.page.locator('.umb-variant-switcher__toggle').click();\n await this.page.locator('.umb-variant-switcher__name-wrapper', {hasText: languageName}).click();\n }\n\n async updateDocumentPermissionsToAllowCultureVariant() {\n await this.page.locator('[data-element=\"sub-view-permissions\"]').click();\n await this.page.locator('[data-element=\"permissions-allow-as-root\"]').click();\n await this.page.locator('[data-element=\"permissions-allow-culture-variant\"]').click();\n await this.page.locator('[data-element=\"sub-view-design\"]').click();\n }\n\n async goToAddEditor(groupName, propertyName) {\n await this.page.locator('[data-element=\"group-add\"]').click();\n await this.page.locator('[data-element=\"group-name\"]').type(groupName);\n await this.page.locator('[key=\"contentTypeEditor_addProperty\"]').click();\n await this.page.locator('[data-element=\"property-name\"]').type(propertyName);\n await this.page.locator('[data-element=\"editor-add\"]').click();\n }\n\n async createNewDocumentTypeWithTemplate() {\n await this.page.locator('[data-element=\"tree-item-options\"]', {hasText: \"Open context menu for Document Types\"}).click();\n await this.page.locator('[data-element=\"action-documentType\"]').click();\n }\n\n async createContentWithDocumentType(documentName) {\n await this.page.locator('[element=\"tree-item-options\"]', {hasText: \"Open context node for Content\"}).click();\n await this.page.locator('.umb-action-link', {hasText: documentName}).click();\n }\n\n async navigateToDataType(dataTypeName) {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.page.locator('[data-element=\"tree-item-dataTypes\"]').locator('[data-element=\"tree-item-expand\"]').click();\n await this.clickDataElementByElementName('tree-item-' + dataTypeName);\n }\n\n async navigateToDocumentType(documentTypeName) {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.clickDataElementByElementName('tree-item-documentTypes', {button: \"right\"});\n await this.clickDataElementByElementName('action-refreshNode');\n await this.clickDataElementByElementName('tree-item-' + documentTypeName);\n }\n\n async navigateToTemplate(templateName) {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.page.locator('[data-element=\"tree-item-templates\"]').locator('[data-element=\"tree-item-expand\"]').click();\n await this.clickDataElementByElementName('tree-item-' + templateName);\n }\n \n async doesDataTypeExist(dataTypeName) {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.clickDataElementByElementName('tree-item-dataTypes', {button: \"right\"});\n await this.clickDataElementByElementName('action-refreshNode');\n await expect(await this.page.locator('[data-element=\"tree-item-dataTypes\"] >> [data-element=\"tree-item-' + dataTypeName + '\"]')).toBeVisible();\n }\n \n}"]}
|
|
1
|
+
{"version":3,"file":"UiHelpers.js","sourceRoot":"","sources":["../../../lib/helpers/UiHelpers.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAEpB,IAAI,CAAO;IAEX,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CAIF;AAVD,8BAUC","sourcesContent":["import {Page} from \"@playwright/test\"\n\nexport class UiHelpers {\n\n page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n\n \n \n}"]}
|
|
@@ -2,9 +2,20 @@ import { ApiHelpers } from "./ApiHelpers";
|
|
|
2
2
|
export declare class UserApiHelper {
|
|
3
3
|
api: ApiHelpers;
|
|
4
4
|
constructor(api: ApiHelpers);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
ensureUserNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
|
|
6
|
+
doesUserWithNameExist(name: string): Promise<boolean>;
|
|
7
|
+
getUserById(id: string): Promise<any>;
|
|
8
|
+
getUserByName(name: string): Promise<any>;
|
|
9
|
+
createUser(email: any, name: any, userGroupIds: any): Promise<import("playwright-core").APIResponse>;
|
|
10
|
+
updateUserById(id: string, userData: any): Promise<import("playwright-core").APIResponse>;
|
|
11
|
+
deleteUserById(id: string): Promise<import("playwright-core").APIResponse>;
|
|
12
|
+
deleteUserByName(name: string): Promise<import("playwright-core").APIResponse | null>;
|
|
13
|
+
addAvatarToUserWithId(id: string, fileId: any): Promise<import("playwright-core").APIResponse>;
|
|
14
|
+
removeAvatarFromUserWithId(id: string): Promise<import("playwright-core").APIResponse>;
|
|
15
|
+
disableUsersWithIds(ids: any): Promise<import("playwright-core").APIResponse>;
|
|
16
|
+
enableUsersWithIds(ids: any): Promise<import("playwright-core").APIResponse>;
|
|
17
|
+
unlockUsersWithIds(ids: any): Promise<import("playwright-core").APIResponse>;
|
|
18
|
+
setUserGroupsForUsers(userIds: any, userGroupIds: any): Promise<import("playwright-core").APIResponse>;
|
|
19
|
+
updateUserPassword(newPassword: string, oldPassword: string): Promise<import("playwright-core").APIResponse>;
|
|
20
|
+
inviteUser(email: string, name: string, userGroupIds: any, message: string): Promise<import("playwright-core").APIResponse>;
|
|
10
21
|
}
|