@umbraco/playwright-testhelpers 17.1.0-beta.6 → 17.1.0-beta.7
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/BaseApiHelper.d.ts +19 -0
- package/dist/lib/helpers/BaseApiHelper.js +87 -0
- package/dist/lib/helpers/BaseApiHelper.js.map +1 -0
- package/dist/lib/helpers/ConstantHelper.d.ts +0 -17
- package/dist/lib/helpers/ConstantHelper.js +0 -17
- package/dist/lib/helpers/ConstantHelper.js.map +1 -1
- package/dist/lib/helpers/ContentRenderUiHelper.js +3 -3
- package/dist/lib/helpers/ContentRenderUiHelper.js.map +1 -1
- package/dist/lib/helpers/ContentUiHelper.js +487 -353
- package/dist/lib/helpers/ContentUiHelper.js.map +1 -1
- package/dist/lib/helpers/CurrentUserProfileUiHelper.js +10 -4
- package/dist/lib/helpers/CurrentUserProfileUiHelper.js.map +1 -1
- package/dist/lib/helpers/DataTypeApiHelper.d.ts +9 -21
- package/dist/lib/helpers/DataTypeApiHelper.js +32 -125
- package/dist/lib/helpers/DataTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/DataTypeUiHelper.js +332 -193
- package/dist/lib/helpers/DataTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/DictionaryApiHelper.d.ts +8 -15
- package/dist/lib/helpers/DictionaryApiHelper.js +49 -77
- package/dist/lib/helpers/DictionaryApiHelper.js.map +1 -1
- package/dist/lib/helpers/DictionaryUiHelper.js +23 -17
- package/dist/lib/helpers/DictionaryUiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentBlueprintApiHelper.d.ts +7 -13
- package/dist/lib/helpers/DocumentBlueprintApiHelper.js +44 -69
- package/dist/lib/helpers/DocumentBlueprintApiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentBlueprintUiHelper.js +10 -8
- package/dist/lib/helpers/DocumentBlueprintUiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentTypeApiHelper.d.ts +4 -18
- package/dist/lib/helpers/DocumentTypeApiHelper.js +4 -134
- package/dist/lib/helpers/DocumentTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/DocumentTypeUiHelper.js +34 -22
- package/dist/lib/helpers/DocumentTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/ExamineManagementUiHelper.js +6 -5
- package/dist/lib/helpers/ExamineManagementUiHelper.js.map +1 -1
- package/dist/lib/helpers/FormsUiHelper.js +159 -119
- package/dist/lib/helpers/FormsUiHelper.js.map +1 -1
- package/dist/lib/helpers/HealthCheckUiHelper.js +7 -7
- package/dist/lib/helpers/HealthCheckUiHelper.js.map +1 -1
- package/dist/lib/helpers/LanguageApiHelper.d.ts +10 -12
- package/dist/lib/helpers/LanguageApiHelper.js +34 -35
- package/dist/lib/helpers/LanguageApiHelper.js.map +1 -1
- package/dist/lib/helpers/LanguageUiHelper.js +19 -16
- package/dist/lib/helpers/LanguageUiHelper.js.map +1 -1
- package/dist/lib/helpers/LogViewerUiHelper.js +31 -22
- package/dist/lib/helpers/LogViewerUiHelper.js.map +1 -1
- package/dist/lib/helpers/LoginUiHelper.js +7 -4
- package/dist/lib/helpers/LoginUiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaTypeApiHelper.d.ts +4 -18
- package/dist/lib/helpers/MediaTypeApiHelper.js +4 -134
- package/dist/lib/helpers/MediaTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaTypeUiHelper.js +17 -11
- package/dist/lib/helpers/MediaTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/MediaUiHelper.js +45 -36
- package/dist/lib/helpers/MediaUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberApiHelper.d.ts +4 -12
- package/dist/lib/helpers/MemberApiHelper.js +6 -54
- package/dist/lib/helpers/MemberApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberGroupApiHelper.d.ts +6 -11
- package/dist/lib/helpers/MemberGroupApiHelper.js +20 -35
- package/dist/lib/helpers/MemberGroupApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberGroupUiHelper.js +16 -13
- package/dist/lib/helpers/MemberGroupUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberTypeApiHelper.d.ts +5 -12
- package/dist/lib/helpers/MemberTypeApiHelper.js +16 -49
- package/dist/lib/helpers/MemberTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberTypeUiHelper.js +3 -2
- package/dist/lib/helpers/MemberTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/MemberUiHelper.js +43 -25
- package/dist/lib/helpers/MemberUiHelper.js.map +1 -1
- package/dist/lib/helpers/ModelsBuilderUiHelper.js +3 -2
- package/dist/lib/helpers/ModelsBuilderUiHelper.js.map +1 -1
- package/dist/lib/helpers/PackageApiHelper.d.ts +5 -4
- package/dist/lib/helpers/PackageApiHelper.js +47 -75
- package/dist/lib/helpers/PackageApiHelper.js.map +1 -1
- package/dist/lib/helpers/PackageUiHelper.js +36 -30
- package/dist/lib/helpers/PackageUiHelper.js.map +1 -1
- package/dist/lib/helpers/PartialViewApiHelper.d.ts +5 -20
- package/dist/lib/helpers/PartialViewApiHelper.js +12 -146
- package/dist/lib/helpers/PartialViewApiHelper.js.map +1 -1
- package/dist/lib/helpers/PartialViewUiHelper.js +17 -14
- package/dist/lib/helpers/PartialViewUiHelper.js.map +1 -1
- package/dist/lib/helpers/PathBasedTreeApiHelper.d.ts +32 -0
- package/dist/lib/helpers/PathBasedTreeApiHelper.js +164 -0
- package/dist/lib/helpers/PathBasedTreeApiHelper.js.map +1 -0
- package/dist/lib/helpers/ProfilingUiHelper.js +5 -3
- package/dist/lib/helpers/ProfilingUiHelper.js.map +1 -1
- package/dist/lib/helpers/PublishedStatusUiHelper.js +8 -7
- package/dist/lib/helpers/PublishedStatusUiHelper.js.map +1 -1
- package/dist/lib/helpers/RedirectManagementUiHelper.js +12 -7
- package/dist/lib/helpers/RedirectManagementUiHelper.js.map +1 -1
- package/dist/lib/helpers/RelationTypeApiHelper.d.ts +7 -12
- package/dist/lib/helpers/RelationTypeApiHelper.js +28 -49
- package/dist/lib/helpers/RelationTypeApiHelper.js.map +1 -1
- package/dist/lib/helpers/RelationTypeUiHelper.js +16 -13
- package/dist/lib/helpers/RelationTypeUiHelper.js.map +1 -1
- package/dist/lib/helpers/ScriptApiHelper.d.ts +6 -22
- package/dist/lib/helpers/ScriptApiHelper.js +12 -165
- package/dist/lib/helpers/ScriptApiHelper.js.map +1 -1
- package/dist/lib/helpers/ScriptUiHelper.js +13 -9
- package/dist/lib/helpers/ScriptUiHelper.js.map +1 -1
- package/dist/lib/helpers/StylesheetApiHelper.d.ts +5 -20
- package/dist/lib/helpers/StylesheetApiHelper.js +13 -154
- package/dist/lib/helpers/StylesheetApiHelper.js.map +1 -1
- package/dist/lib/helpers/StylesheetUiHelper.js +14 -9
- package/dist/lib/helpers/StylesheetUiHelper.js.map +1 -1
- package/dist/lib/helpers/TelemetryDataUiHelper.js +3 -2
- package/dist/lib/helpers/TelemetryDataUiHelper.js.map +1 -1
- package/dist/lib/helpers/TemplateApiHelper.d.ts +8 -15
- package/dist/lib/helpers/TemplateApiHelper.js +51 -83
- package/dist/lib/helpers/TemplateApiHelper.js.map +1 -1
- package/dist/lib/helpers/TemplateUiHelper.js +25 -19
- package/dist/lib/helpers/TemplateUiHelper.js.map +1 -1
- package/dist/lib/helpers/TreeApiHelper.d.ts +15 -0
- package/dist/lib/helpers/TreeApiHelper.js +116 -0
- package/dist/lib/helpers/TreeApiHelper.js.map +1 -0
- package/dist/lib/helpers/UiBaseLocators.d.ts +228 -230
- package/dist/lib/helpers/UiBaseLocators.js +871 -834
- package/dist/lib/helpers/UiBaseLocators.js.map +1 -1
- package/dist/lib/helpers/UserGroupApiHelper.d.ts +3 -13
- package/dist/lib/helpers/UserGroupApiHelper.js +3 -69
- package/dist/lib/helpers/UserGroupApiHelper.js.map +1 -1
- package/dist/lib/helpers/UserGroupUiHelper.js +49 -32
- package/dist/lib/helpers/UserGroupUiHelper.js.map +1 -1
- package/dist/lib/helpers/UserUiHelper.js +46 -43
- package/dist/lib/helpers/UserUiHelper.js.map +1 -1
- package/dist/lib/helpers/VariantBasedApiHelper.d.ts +23 -0
- package/dist/lib/helpers/VariantBasedApiHelper.js +81 -0
- package/dist/lib/helpers/VariantBasedApiHelper.js.map +1 -0
- package/dist/lib/helpers/WebhookApiHelper.d.ts +1 -0
- package/dist/lib/helpers/WebhookApiHelper.js +10 -11
- package/dist/lib/helpers/WebhookApiHelper.js.map +1 -1
- package/dist/lib/helpers/WebhookUiHelper.js +27 -11
- package/dist/lib/helpers/WebhookUiHelper.js.map +1 -1
- package/dist/lib/helpers/WelcomeDashboardUiHelper.js +1 -1
- package/dist/lib/helpers/WelcomeDashboardUiHelper.js.map +1 -1
- package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js +9 -4
- package/dist/lib/helpers/differentAppSettingsHelpers/ExternalLoginUiHelpers.js.map +1 -1
- package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js +10 -5
- package/dist/lib/helpers/differentAppSettingsHelpers/InstallUiHelper.js.map +1 -1
- package/dist/lib/helpers/index.d.ts +4 -1
- package/dist/lib/helpers/index.js +9 -3
- package/dist/lib/helpers/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/lib/helpers/BasePage.d.ts +0 -449
- package/dist/lib/helpers/BasePage.js +0 -547
- package/dist/lib/helpers/BasePage.js.map +0 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PathBasedTreeApiHelper = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base class for path-based tree resources like Script, Stylesheet, PartialView.
|
|
6
|
+
* These resources use `path` as their key instead of `id`.
|
|
7
|
+
*/
|
|
8
|
+
class PathBasedTreeApiHelper {
|
|
9
|
+
api;
|
|
10
|
+
constructor(api) {
|
|
11
|
+
this.api = api;
|
|
12
|
+
}
|
|
13
|
+
// === URL Builder ===
|
|
14
|
+
buildUrl(path = '') {
|
|
15
|
+
return `${this.api.baseUrl}/umbraco/management/api/v1/${this.resourcePath}${path}`;
|
|
16
|
+
}
|
|
17
|
+
buildTreeUrl(path = '') {
|
|
18
|
+
return `${this.api.baseUrl}/umbraco/management/api/v1/${this.treePath}${path}`;
|
|
19
|
+
}
|
|
20
|
+
extractPathFromLocation(response) {
|
|
21
|
+
const path = response.headers().location.split(`/v1/${this.resourcePath}/`).pop();
|
|
22
|
+
return decodeURIComponent(path);
|
|
23
|
+
}
|
|
24
|
+
extractFolderPathFromLocation(response) {
|
|
25
|
+
const path = response.headers().location.split(`/v1/${this.resourcePath}/folder/`).pop();
|
|
26
|
+
return decodeURIComponent(path);
|
|
27
|
+
}
|
|
28
|
+
// === CRUD Operations ===
|
|
29
|
+
async get(path) {
|
|
30
|
+
const response = await this.api.get(this.buildUrl('/' + encodeURIComponent(path)));
|
|
31
|
+
return await response.json();
|
|
32
|
+
}
|
|
33
|
+
async doesExist(path) {
|
|
34
|
+
const response = await this.api.get(this.buildUrl('/' + encodeURIComponent(path)));
|
|
35
|
+
return response.status() === 200;
|
|
36
|
+
}
|
|
37
|
+
async delete(path) {
|
|
38
|
+
return await this.api.delete(this.buildUrl('/' + encodeURIComponent(path)));
|
|
39
|
+
}
|
|
40
|
+
async updateContent(path, newContent) {
|
|
41
|
+
const data = { "content": newContent };
|
|
42
|
+
return await this.api.put(this.buildUrl('/' + encodeURIComponent(path)), data);
|
|
43
|
+
}
|
|
44
|
+
async updateName(path, newName) {
|
|
45
|
+
const data = { "name": newName };
|
|
46
|
+
const response = await this.api.put(this.buildUrl('/' + encodeURIComponent(path) + '/rename'), data);
|
|
47
|
+
const newPath = response.headers().location.split(`/v1/${this.resourcePath}/`).pop();
|
|
48
|
+
if (newPath !== undefined) {
|
|
49
|
+
return decodeURIComponent(newPath);
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
// === Tree Operations ===
|
|
54
|
+
async getAllAtRoot() {
|
|
55
|
+
return await this.api.get(this.buildTreeUrl('/root?skip=0&take=10000'));
|
|
56
|
+
}
|
|
57
|
+
async getChildren(path) {
|
|
58
|
+
const response = await this.api.get(this.buildTreeUrl(`/children?parentPath=${encodeURIComponent(path)}&skip=0&take=10000`));
|
|
59
|
+
const items = await response.json();
|
|
60
|
+
return items.items;
|
|
61
|
+
}
|
|
62
|
+
async getItems(paths) {
|
|
63
|
+
let pathArray = 'path=' + encodeURIComponent(paths[0]);
|
|
64
|
+
for (let i = 1; i < paths.length; ++i) {
|
|
65
|
+
pathArray += '&path=' + encodeURIComponent(paths[i]);
|
|
66
|
+
}
|
|
67
|
+
const response = await this.api.get(this.buildTreeUrl('/item?' + pathArray));
|
|
68
|
+
const json = await response.json();
|
|
69
|
+
return json !== null ? json : null;
|
|
70
|
+
}
|
|
71
|
+
// === Search ===
|
|
72
|
+
async doesNameExist(name) {
|
|
73
|
+
return await this.getByName(name);
|
|
74
|
+
}
|
|
75
|
+
async getByName(name) {
|
|
76
|
+
const rootItems = await this.getAllAtRoot();
|
|
77
|
+
const jsonItems = await rootItems.json();
|
|
78
|
+
for (const item of jsonItems.items) {
|
|
79
|
+
if (item.name === name) {
|
|
80
|
+
return item.isFolder ? this.getFolder(item.path) : this.get(item.path);
|
|
81
|
+
}
|
|
82
|
+
else if (item.isFolder && item.hasChildren) {
|
|
83
|
+
const result = await this.recurseChildren(name, item.path, false);
|
|
84
|
+
if (result) {
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
async ensureNameNotExists(name) {
|
|
92
|
+
const rootItems = await this.getAllAtRoot();
|
|
93
|
+
const jsonItems = await rootItems.json();
|
|
94
|
+
for (const item of jsonItems.items) {
|
|
95
|
+
if (item.name === name) {
|
|
96
|
+
return item.isFolder
|
|
97
|
+
? await this.recurseDeleteChildren(item)
|
|
98
|
+
: await this.delete(item.path);
|
|
99
|
+
}
|
|
100
|
+
else if (item.hasChildren) {
|
|
101
|
+
await this.recurseChildren(name, item.path, true);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
// === Recursive Methods ===
|
|
107
|
+
async recurseChildren(name, path, toDelete) {
|
|
108
|
+
const items = await this.getChildren(path);
|
|
109
|
+
for (const child of items) {
|
|
110
|
+
if (child.name === name) {
|
|
111
|
+
if (!toDelete) {
|
|
112
|
+
return child.isFolder ? await this.getFolder(child.path) : await this.get(child.path);
|
|
113
|
+
}
|
|
114
|
+
return child.isFolder
|
|
115
|
+
? await this.recurseDeleteChildren(child)
|
|
116
|
+
: await this.delete(child.path);
|
|
117
|
+
}
|
|
118
|
+
else if (child.hasChildren) {
|
|
119
|
+
const result = await this.recurseChildren(name, child.path, toDelete);
|
|
120
|
+
if (result)
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
async recurseDeleteChildren(folder) {
|
|
127
|
+
if (!folder.hasChildren) {
|
|
128
|
+
return await this.deleteFolder(folder.path);
|
|
129
|
+
}
|
|
130
|
+
const items = await this.getChildren(folder.path);
|
|
131
|
+
for (const child of items) {
|
|
132
|
+
if (child.hasChildren) {
|
|
133
|
+
await this.recurseDeleteChildren(child);
|
|
134
|
+
}
|
|
135
|
+
else if (child.isFolder) {
|
|
136
|
+
await this.deleteFolder(child.path);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
await this.delete(child.path);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return await this.deleteFolder(folder.path);
|
|
143
|
+
}
|
|
144
|
+
// === Folder Operations ===
|
|
145
|
+
async getFolder(path) {
|
|
146
|
+
const response = await this.api.get(this.buildUrl('/folder/' + encodeURIComponent(path)));
|
|
147
|
+
return await response.json();
|
|
148
|
+
}
|
|
149
|
+
async doesFolderExist(path) {
|
|
150
|
+
const response = await this.api.get(this.buildUrl('/folder/' + encodeURIComponent(path)));
|
|
151
|
+
return response.status() === 200;
|
|
152
|
+
}
|
|
153
|
+
async createFolder(name, parentPath) {
|
|
154
|
+
const parentValue = parentPath ? { 'path': parentPath } : null;
|
|
155
|
+
const folderData = { "name": name, "parent": parentValue };
|
|
156
|
+
const response = await this.api.post(this.buildUrl('/folder'), folderData);
|
|
157
|
+
return this.extractFolderPathFromLocation(response);
|
|
158
|
+
}
|
|
159
|
+
async deleteFolder(path) {
|
|
160
|
+
return await this.api.delete(this.buildUrl('/folder/' + encodeURIComponent(path)));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.PathBasedTreeApiHelper = PathBasedTreeApiHelper;
|
|
164
|
+
//# sourceMappingURL=PathBasedTreeApiHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathBasedTreeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/PathBasedTreeApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\n\n/**\n * Base class for path-based tree resources like Script, Stylesheet, PartialView.\n * These resources use `path` as their key instead of `id`.\n */\nexport abstract class PathBasedTreeApiHelper {\n api: ApiHelpers;\n protected abstract resourcePath: string;\n protected abstract treePath: string;\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n // === URL Builder ===\n protected buildUrl(path: string = ''): string {\n return `${this.api.baseUrl}/umbraco/management/api/v1/${this.resourcePath}${path}`;\n }\n\n protected buildTreeUrl(path: string = ''): string {\n return `${this.api.baseUrl}/umbraco/management/api/v1/${this.treePath}${path}`;\n }\n\n protected extractPathFromLocation(response: any): string {\n const path = response.headers().location.split(`/v1/${this.resourcePath}/`).pop() as string;\n return decodeURIComponent(path);\n }\n\n protected extractFolderPathFromLocation(response: any): string {\n const path = response.headers().location.split(`/v1/${this.resourcePath}/folder/`).pop() as string;\n return decodeURIComponent(path);\n }\n\n // === CRUD Operations ===\n async get(path: string): Promise<any> {\n const response = await this.api.get(this.buildUrl('/' + encodeURIComponent(path)));\n return await response.json();\n }\n\n async doesExist(path: string): Promise<boolean> {\n const response = await this.api.get(this.buildUrl('/' + encodeURIComponent(path)));\n return response.status() === 200;\n }\n\n async delete(path: string): Promise<any> {\n return await this.api.delete(this.buildUrl('/' + encodeURIComponent(path)));\n }\n\n async updateContent(path: string, newContent: string): Promise<any> {\n const data = { \"content\": newContent };\n return await this.api.put(this.buildUrl('/' + encodeURIComponent(path)), data);\n }\n\n async updateName(path: string, newName: string): Promise<string | undefined> {\n const data = { \"name\": newName };\n const response = await this.api.put(this.buildUrl('/' + encodeURIComponent(path) + '/rename'), data);\n const newPath = response.headers().location.split(`/v1/${this.resourcePath}/`).pop();\n if (newPath !== undefined) {\n return decodeURIComponent(newPath);\n }\n return undefined;\n }\n\n // === Tree Operations ===\n async getAllAtRoot(): Promise<any> {\n return await this.api.get(this.buildTreeUrl('/root?skip=0&take=10000'));\n }\n\n async getChildren(path: string): Promise<any[]> {\n const response = await this.api.get(this.buildTreeUrl(`/children?parentPath=${encodeURIComponent(path)}&skip=0&take=10000`));\n const items = await response.json();\n return items.items;\n }\n\n async getItems(paths: string[]): Promise<any> {\n let pathArray = 'path=' + encodeURIComponent(paths[0]);\n for (let i = 1; i < paths.length; ++i) {\n pathArray += '&path=' + encodeURIComponent(paths[i]);\n }\n const response = await this.api.get(this.buildTreeUrl('/item?' + pathArray));\n const json = await response.json();\n return json !== null ? json : null;\n }\n\n // === Search ===\n async doesNameExist(name: string): Promise<any> {\n return await this.getByName(name);\n }\n\n async getByName(name: string): Promise<any> {\n const rootItems = await this.getAllAtRoot();\n const jsonItems = await rootItems.json();\n\n for (const item of jsonItems.items) {\n if (item.name === name) {\n return item.isFolder ? this.getFolder(item.path) : this.get(item.path);\n } else if (item.isFolder && item.hasChildren) {\n const result = await this.recurseChildren(name, item.path, false);\n if (result) {\n return result;\n }\n }\n }\n return false;\n }\n\n async ensureNameNotExists(name: string): Promise<any> {\n const rootItems = await this.getAllAtRoot();\n const jsonItems = await rootItems.json();\n\n for (const item of jsonItems.items) {\n if (item.name === name) {\n return item.isFolder\n ? await this.recurseDeleteChildren(item)\n : await this.delete(item.path);\n } else if (item.hasChildren) {\n await this.recurseChildren(name, item.path, true);\n }\n }\n return null;\n }\n\n // === Recursive Methods ===\n protected async recurseChildren(name: string, path: string, toDelete: boolean): Promise<any> {\n const items = await this.getChildren(path);\n\n for (const child of items) {\n if (child.name === name) {\n if (!toDelete) {\n return child.isFolder ? await this.getFolder(child.path) : await this.get(child.path);\n }\n return child.isFolder\n ? await this.recurseDeleteChildren(child)\n : await this.delete(child.path);\n } else if (child.hasChildren) {\n const result = await this.recurseChildren(name, child.path, toDelete);\n if (result) return result;\n }\n }\n return false;\n }\n\n protected async recurseDeleteChildren(folder: any): Promise<any> {\n if (!folder.hasChildren) {\n return await this.deleteFolder(folder.path);\n }\n const items = await this.getChildren(folder.path);\n\n for (const child of items) {\n if (child.hasChildren) {\n await this.recurseDeleteChildren(child);\n } else if (child.isFolder) {\n await this.deleteFolder(child.path);\n } else {\n await this.delete(child.path);\n }\n }\n return await this.deleteFolder(folder.path);\n }\n\n // === Folder Operations ===\n async getFolder(path: string): Promise<any> {\n const response = await this.api.get(this.buildUrl('/folder/' + encodeURIComponent(path)));\n return await response.json();\n }\n\n async doesFolderExist(path: string): Promise<boolean> {\n const response = await this.api.get(this.buildUrl('/folder/' + encodeURIComponent(path)));\n return response.status() === 200;\n }\n\n async createFolder(name: string, parentPath?: string): Promise<string | undefined> {\n const parentValue = parentPath ? { 'path': parentPath } : null;\n const folderData = { \"name\": name, \"parent\": parentValue };\n const response = await this.api.post(this.buildUrl('/folder'), folderData);\n return this.extractFolderPathFromLocation(response);\n }\n\n async deleteFolder(path: string): Promise<any> {\n return await this.api.delete(this.buildUrl('/folder/' + encodeURIComponent(path)));\n }\n}\n"]}
|
|
@@ -11,13 +11,15 @@ class ProfilingUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
11
11
|
super(page);
|
|
12
12
|
this.profilingTab = page.getByRole('tab', { name: 'Profiling' });
|
|
13
13
|
this.activateProfilerByDefaultToggle = page.locator("[label='Activate the profiler by default'] #toggle");
|
|
14
|
-
this.activateProfilerByDefaultCheckbox = page.
|
|
14
|
+
this.activateProfilerByDefaultCheckbox = page.getByLabel('Activate the profiler by default');
|
|
15
15
|
}
|
|
16
16
|
async clickProfilingTab() {
|
|
17
|
-
await
|
|
17
|
+
await (0, test_1.expect)(this.profilingTab).toBeVisible();
|
|
18
|
+
await this.profilingTab.click();
|
|
18
19
|
}
|
|
19
20
|
async clickActivateProfilerByDefaultToggle() {
|
|
20
|
-
await
|
|
21
|
+
await (0, test_1.expect)(this.activateProfilerByDefaultToggle).toBeVisible();
|
|
22
|
+
await this.activateProfilerByDefaultToggle.click();
|
|
21
23
|
}
|
|
22
24
|
async isActivateProfilerByDefaultToggleChecked(isChecked) {
|
|
23
25
|
return (0, test_1.expect)(this.activateProfilerByDefaultCheckbox).toBeChecked({ checked: isChecked });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfilingUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/ProfilingUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,iBAAkB,SAAQ,+BAAc;IAClC,YAAY,CAAU;IACtB,+BAA+B,CAAU;IACzC,iCAAiC,CAAU;IAE5D,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAC1G,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ProfilingUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/ProfilingUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,iBAAkB,SAAQ,+BAAc;IAClC,YAAY,CAAU;IACtB,+BAA+B,CAAU;IACzC,iCAAiC,CAAU;IAE5D,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC;QAC1G,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,oCAAoC;QACxC,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,MAAM,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,wCAAwC,CAAC,SAAkB;QAC/D,OAAO,IAAA,aAAM,EAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,WAAW,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,CAAC;IAC1F,CAAC;CACF;AAzBD,8CAyBC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class ProfilingUiHelper extends UiBaseLocators {\n private readonly profilingTab: Locator;\n private readonly activateProfilerByDefaultToggle: Locator;\n private readonly activateProfilerByDefaultCheckbox: Locator;\n\n constructor(page: Page) {\n super(page);\n this.profilingTab = page.getByRole('tab', {name: 'Profiling'});\n this.activateProfilerByDefaultToggle = page.locator(\"[label='Activate the profiler by default'] #toggle\");\n this.activateProfilerByDefaultCheckbox = page.getByLabel('Activate the profiler by default');\n }\n\n async clickProfilingTab() {\n await expect(this.profilingTab).toBeVisible();\n await this.profilingTab.click();\n }\n\n async clickActivateProfilerByDefaultToggle() {\n await expect(this.activateProfilerByDefaultToggle).toBeVisible();\n await this.activateProfilerByDefaultToggle.click();\n }\n\n async isActivateProfilerByDefaultToggleChecked(isChecked: boolean) {\n return expect(this.activateProfilerByDefaultCheckbox).toBeChecked({checked: isChecked});\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PublishedStatusUiHelper = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
4
5
|
const UiBaseLocators_1 = require("./UiBaseLocators");
|
|
5
6
|
class PublishedStatusUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
6
7
|
publishedStatusTab;
|
|
@@ -21,25 +22,25 @@ class PublishedStatusUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
21
22
|
this.publishedCacheBox = page.locator('[headline="Published Cache Status"]');
|
|
22
23
|
}
|
|
23
24
|
async clickPublishedStatusTab() {
|
|
24
|
-
await this.click(
|
|
25
|
+
await this.publishedStatusTab.click();
|
|
25
26
|
}
|
|
26
27
|
async clickRefreshStatusButton() {
|
|
27
|
-
await this.click(
|
|
28
|
+
await this.refreshStatusBtn.click();
|
|
28
29
|
}
|
|
29
30
|
async clickReloadMemoryCacheButton() {
|
|
30
|
-
await this.click(
|
|
31
|
+
await this.reloadMemoryCacheBtn.click();
|
|
31
32
|
}
|
|
32
33
|
async clickRebuildDatabaseCacheButton() {
|
|
33
|
-
await this.click(
|
|
34
|
+
await this.rebuildDatabaseCacheBtn.click();
|
|
34
35
|
}
|
|
35
36
|
async clickSnapshotInternalCacheButton() {
|
|
36
|
-
await this.click(
|
|
37
|
+
await this.snapshotInternalCacheBtn.click();
|
|
37
38
|
}
|
|
38
39
|
async clickContinueButton() {
|
|
39
|
-
await this.click(
|
|
40
|
+
await this.continueBtn.click();
|
|
40
41
|
}
|
|
41
42
|
async isPublishedCacheStatusVisible(status) {
|
|
42
|
-
return
|
|
43
|
+
return (0, test_1.expect)(this.publishedCacheBox.getByText(status)).toBeVisible();
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
exports.PublishedStatusUiHelper = PublishedStatusUiHelper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublishedStatusUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/PublishedStatusUiHelper.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"PublishedStatusUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/PublishedStatusUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,uBAAwB,SAAQ,+BAAc;IACxC,kBAAkB,CAAU;IAC5B,gBAAgB,CAAU;IAC1B,oBAAoB,CAAU;IAC9B,uBAAuB,CAAU;IACjC,wBAAwB,CAAU;IAClC,WAAW,CAAU;IACrB,iBAAiB,CAAU;IAE5C,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,kBAAkB,EAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC1D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACnE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QACzE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,4BAA4B;QAChC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,+BAA+B;QACnC,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,gCAAgC;QACpC,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,6BAA6B,CAAC,MAAc;QAChD,OAAO,IAAA,aAAM,EAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,CAAC;CACF;AA/CD,0DA+CC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class PublishedStatusUiHelper extends UiBaseLocators {\n private readonly publishedStatusTab: Locator;\n private readonly refreshStatusBtn: Locator;\n private readonly reloadMemoryCacheBtn: Locator;\n private readonly rebuildDatabaseCacheBtn: Locator;\n private readonly snapshotInternalCacheBtn: Locator;\n private readonly continueBtn: Locator;\n private readonly publishedCacheBox: Locator;\n\n constructor(page: Page) {\n super(page);\n this.publishedStatusTab = page.getByRole('tab', {name: 'Published Status'});\n this.refreshStatusBtn = page.getByLabel('Refresh Status');\n this.reloadMemoryCacheBtn = page.getByLabel('Reload Memory Cache');\n this.rebuildDatabaseCacheBtn = page.getByLabel('Rebuild Database Cache');\n this.snapshotInternalCacheBtn = page.getByLabel('Snapshot Internal Cache');\n this.continueBtn = page.locator('#confirm').getByLabel('Continue');\n this.publishedCacheBox = page.locator('[headline=\"Published Cache Status\"]')\n }\n\n async clickPublishedStatusTab() {\n await this.publishedStatusTab.click();\n }\n\n async clickRefreshStatusButton() {\n await this.refreshStatusBtn.click();\n }\n\n async clickReloadMemoryCacheButton() {\n await this.reloadMemoryCacheBtn.click();\n }\n\n async clickRebuildDatabaseCacheButton() {\n await this.rebuildDatabaseCacheBtn.click();\n }\n\n async clickSnapshotInternalCacheButton() {\n await this.snapshotInternalCacheBtn.click();\n }\n\n async clickContinueButton() {\n await this.continueBtn.click();\n }\n\n async isPublishedCacheStatusVisible(status: string) {\n return expect(this.publishedCacheBox.getByText(status)).toBeVisible();\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RedirectManagementUiHelper = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
4
5
|
const UiBaseLocators_1 = require("./UiBaseLocators");
|
|
5
6
|
class RedirectManagementUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
6
7
|
redirectManagementTab;
|
|
@@ -21,26 +22,30 @@ class RedirectManagementUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
21
22
|
this.redirectManagementRows = page.locator('umb-dashboard-redirect-management uui-table-row');
|
|
22
23
|
}
|
|
23
24
|
async clickRedirectManagementTab() {
|
|
24
|
-
await
|
|
25
|
+
await (0, test_1.expect)(this.redirectManagementTab).toBeVisible();
|
|
26
|
+
await this.redirectManagementTab.click();
|
|
25
27
|
}
|
|
26
28
|
async clickEnableURLTrackerButton() {
|
|
27
|
-
await this.click(
|
|
29
|
+
await this.enableURLTrackerBtn.click();
|
|
28
30
|
}
|
|
29
31
|
async clickDisableURLTrackerButton() {
|
|
30
|
-
await this.click(
|
|
32
|
+
await this.disableURLTrackerBtn.click();
|
|
31
33
|
}
|
|
32
34
|
async enterOriginalUrl(url) {
|
|
33
|
-
await this.
|
|
35
|
+
await this.originalUrlTxt.clear();
|
|
36
|
+
await this.originalUrlTxt.fill(url);
|
|
34
37
|
}
|
|
35
38
|
async clickSearchButton() {
|
|
36
|
-
await
|
|
39
|
+
await (0, test_1.expect)(this.searchBtn).toBeVisible();
|
|
40
|
+
await this.searchBtn.click();
|
|
37
41
|
}
|
|
38
42
|
async deleteFirstRedirectURL() {
|
|
39
|
-
await
|
|
43
|
+
await (0, test_1.expect)(this.firstDeleteButton).toBeVisible();
|
|
44
|
+
await this.firstDeleteButton.click();
|
|
40
45
|
await this.clickConfirmToDeleteButton();
|
|
41
46
|
}
|
|
42
47
|
async doesRedirectManagementRowsHaveCount(itemCount) {
|
|
43
|
-
await
|
|
48
|
+
await (0, test_1.expect)(this.redirectManagementRows).toHaveCount(itemCount);
|
|
44
49
|
}
|
|
45
50
|
}
|
|
46
51
|
exports.RedirectManagementUiHelper = RedirectManagementUiHelper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectManagementUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RedirectManagementUiHelper.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RedirectManagementUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RedirectManagementUiHelper.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AACvD,qDAAgD;AAEhD,MAAa,0BAA2B,SAAQ,+BAAc;IAC3C,qBAAqB,CAAU;IAC/B,mBAAmB,CAAU;IAC7B,oBAAoB,CAAU;IAC9B,cAAc,CAAU;IACxB,SAAS,CAAU;IACnB,iBAAiB,CAAU;IAC3B,sBAAsB,CAAU;IAEjD,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAC,IAAI,EAAE,yBAAyB,EAAC,CAAC,CAAC;QACtF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,4BAA4B;QAChC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAW;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,mCAAmC,CAAC,SAAiB;QACzD,MAAM,IAAA,aAAM,EAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;CACF;AApDD,gEAoDC","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\";\nimport {UiBaseLocators} from \"./UiBaseLocators\";\n\nexport class RedirectManagementUiHelper extends UiBaseLocators {\n private readonly redirectManagementTab: Locator;\n private readonly enableURLTrackerBtn: Locator;\n private readonly disableURLTrackerBtn: Locator;\n private readonly originalUrlTxt: Locator;\n private readonly searchBtn: Locator;\n private readonly firstDeleteButton: Locator;\n private readonly redirectManagementRows: Locator;\n\n constructor(page: Page) {\n super(page);\n this.redirectManagementTab = page.getByRole('tab', {name: 'Redirect URL Management'});\n this.enableURLTrackerBtn = page.getByLabel('Enable URL tracker');\n this.disableURLTrackerBtn = page.getByLabel('Disable URL tracker');\n this.originalUrlTxt = page.getByLabel('Original URL');\n this.searchBtn = page.getByLabel('Search', { exact: true });\n this.firstDeleteButton = page.locator('uui-button[label=\"Delete\"]').first().locator('svg');\n this.redirectManagementRows = page.locator('umb-dashboard-redirect-management uui-table-row');\n }\n\n async clickRedirectManagementTab() {\n await expect(this.redirectManagementTab).toBeVisible();\n await this.redirectManagementTab.click();\n }\n\n async clickEnableURLTrackerButton() {\n await this.enableURLTrackerBtn.click();\n }\n\n async clickDisableURLTrackerButton() {\n await this.disableURLTrackerBtn.click();\n }\n\n async enterOriginalUrl(url: string) {\n await this.originalUrlTxt.clear();\n await this.originalUrlTxt.fill(url);\n }\n\n async clickSearchButton() {\n await expect(this.searchBtn).toBeVisible();\n await this.searchBtn.click();\n }\n\n async deleteFirstRedirectURL() {\n await expect(this.firstDeleteButton).toBeVisible();\n await this.firstDeleteButton.click();\n await this.clickConfirmToDeleteButton();\n }\n\n async doesRedirectManagementRowsHaveCount(itemCount: number) {\n await expect(this.redirectManagementRows).toHaveCount(itemCount);\n }\n}\n"]}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare class RelationTypeApiHelper {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
create(name: string, isBidirectional: boolean, isDependency: boolean, parentObjectTypeId?: string, childObjectTypeId?: string, id?: string): Promise<string | undefined>;
|
|
8
|
-
update(id: string, relationType: any): Promise<import("playwright-core").APIResponse>;
|
|
9
|
-
delete(id: string): Promise<import("playwright-core").APIResponse>;
|
|
10
|
-
getAllAtRoot(): Promise<import("playwright-core").APIResponse>;
|
|
11
|
-
getItems(ids: any): Promise<any>;
|
|
12
|
-
ensureNameNotExists(name: string): Promise<import("playwright-core").APIResponse | null>;
|
|
1
|
+
import { TreeApiHelper } from "./TreeApiHelper";
|
|
2
|
+
export declare class RelationTypeApiHelper extends TreeApiHelper {
|
|
3
|
+
protected resourcePath: string;
|
|
4
|
+
protected treePath: string;
|
|
5
|
+
createRelationType(name: string, isBidirectional: boolean, isDependency: boolean, parentObjectTypeId?: string, childObjectTypeId?: string, id?: string): Promise<string | undefined>;
|
|
6
|
+
getItems(ids: string[]): Promise<any>;
|
|
13
7
|
getByName(name: string): Promise<any>;
|
|
8
|
+
ensureNameNotExists(name: string): Promise<any>;
|
|
14
9
|
doesNameExist(name: string): Promise<boolean>;
|
|
15
10
|
}
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RelationTypeApiHelper = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
async
|
|
10
|
-
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
|
|
11
|
-
return await response.json();
|
|
12
|
-
}
|
|
13
|
-
async doesExist(id) {
|
|
14
|
-
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
|
|
15
|
-
return response.status() === 200;
|
|
16
|
-
}
|
|
17
|
-
async create(name, isBidirectional, isDependency, parentObjectTypeId, childObjectTypeId, id) {
|
|
4
|
+
const TreeApiHelper_1 = require("./TreeApiHelper");
|
|
5
|
+
class RelationTypeApiHelper extends TreeApiHelper_1.TreeApiHelper {
|
|
6
|
+
resourcePath = 'relation-type';
|
|
7
|
+
treePath = 'tree/relation-type';
|
|
8
|
+
// RelationType-specific create with different signature
|
|
9
|
+
async createRelationType(name, isBidirectional, isDependency, parentObjectTypeId, childObjectTypeId, id) {
|
|
18
10
|
const relationTypeData = {
|
|
19
11
|
"name": name,
|
|
20
12
|
"isBidirectional": isBidirectional,
|
|
@@ -23,59 +15,46 @@ class RelationTypeApiHelper {
|
|
|
23
15
|
"isDependency": isDependency,
|
|
24
16
|
"id": id
|
|
25
17
|
};
|
|
26
|
-
const response = await this.api.post(this.
|
|
27
|
-
// Returns the id of the created relationType
|
|
18
|
+
const response = await this.api.post(this.buildUrl(), relationTypeData);
|
|
28
19
|
return response.headers().location.split("/").pop();
|
|
29
20
|
}
|
|
30
|
-
async update(id, relationType) {
|
|
31
|
-
return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id, relationType);
|
|
32
|
-
}
|
|
33
|
-
async delete(id) {
|
|
34
|
-
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/relation-type/' + id);
|
|
35
|
-
}
|
|
36
|
-
async getAllAtRoot() {
|
|
37
|
-
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/relation-type/root?skip=0&take=10000');
|
|
38
|
-
}
|
|
39
21
|
async getItems(ids) {
|
|
40
22
|
let idArray = 'id=' + ids[0];
|
|
41
|
-
let i;
|
|
42
|
-
for (i = 1; i < ids.length; ++i) {
|
|
23
|
+
for (let i = 1; i < ids.length; ++i) {
|
|
43
24
|
idArray += '&id=' + ids[i];
|
|
44
25
|
}
|
|
45
|
-
const response = await this.api.get(this.
|
|
26
|
+
const response = await this.api.get(this.buildUrl('/item?' + idArray));
|
|
46
27
|
const json = await response.json();
|
|
47
|
-
|
|
48
|
-
return json;
|
|
49
|
-
}
|
|
50
|
-
return null;
|
|
28
|
+
return json !== null ? json : null;
|
|
51
29
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
30
|
+
// Override - RelationType has no folders
|
|
31
|
+
async getByName(name) {
|
|
32
|
+
const rootItems = await this.getAllAtRoot();
|
|
33
|
+
const jsonItems = await rootItems.json();
|
|
34
|
+
for (const item of jsonItems.items) {
|
|
35
|
+
if (item.name === name && item.id !== null) {
|
|
36
|
+
return await this.get(item.id);
|
|
58
37
|
}
|
|
59
38
|
}
|
|
60
39
|
return null;
|
|
61
40
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return await
|
|
41
|
+
// Override - RelationType has no folders
|
|
42
|
+
async ensureNameNotExists(name) {
|
|
43
|
+
const rootItems = await this.getAllAtRoot();
|
|
44
|
+
const jsonItems = await rootItems.json();
|
|
45
|
+
for (const item of jsonItems.items) {
|
|
46
|
+
if (item.name === name && item.id !== null) {
|
|
47
|
+
return await this.delete(item.id);
|
|
69
48
|
}
|
|
70
49
|
}
|
|
71
50
|
return null;
|
|
72
51
|
}
|
|
73
52
|
async doesNameExist(name) {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
53
|
+
const rootItems = await this.getAllAtRoot();
|
|
54
|
+
const jsonItems = await rootItems.json();
|
|
76
55
|
if (name !== null) {
|
|
77
|
-
for (const
|
|
78
|
-
if (
|
|
56
|
+
for (const item of jsonItems.items) {
|
|
57
|
+
if (item.name === name) {
|
|
79
58
|
return true;
|
|
80
59
|
}
|
|
81
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelationTypeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RelationTypeApiHelper.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"RelationTypeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/RelationTypeApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {TreeApiHelper} from \"./TreeApiHelper\";\n\nexport class RelationTypeApiHelper extends TreeApiHelper {\n protected resourcePath = 'relation-type';\n protected treePath = 'tree/relation-type';\n\n // RelationType-specific create with different signature\n async createRelationType(name: string, isBidirectional: boolean, isDependency: boolean, parentObjectTypeId?: string, childObjectTypeId?: string, id?: string) {\n const relationTypeData = {\n \"name\": name,\n \"isBidirectional\": isBidirectional,\n \"parentObjectType\": parentObjectTypeId,\n \"childObjectType\": childObjectTypeId,\n \"isDependency\": isDependency,\n \"id\": id\n };\n const response = await this.api.post(this.buildUrl(), relationTypeData);\n return response.headers().location.split(\"/\").pop();\n }\n\n async getItems(ids: string[]) {\n let idArray = 'id=' + ids[0];\n for (let i = 1; i < ids.length; ++i) {\n idArray += '&id=' + ids[i];\n }\n const response = await this.api.get(this.buildUrl('/item?' + idArray));\n const json = await response.json();\n return json !== null ? json : null;\n }\n\n // Override - RelationType has no folders\n async getByName(name: string): Promise<any> {\n const rootItems = await this.getAllAtRoot();\n const jsonItems = await rootItems.json();\n\n for (const item of jsonItems.items) {\n if (item.name === name && item.id !== null) {\n return await this.get(item.id);\n }\n }\n return null;\n }\n\n // Override - RelationType has no folders\n async ensureNameNotExists(name: string): Promise<any> {\n const rootItems = await this.getAllAtRoot();\n const jsonItems = await rootItems.json();\n\n for (const item of jsonItems.items) {\n if (item.name === name && item.id !== null) {\n return await this.delete(item.id);\n }\n }\n return null;\n }\n\n async doesNameExist(name: string): Promise<boolean> {\n const rootItems = await this.getAllAtRoot();\n const jsonItems = await rootItems.json();\n\n if (name !== null) {\n for (const item of jsonItems.items) {\n if (item.name === name) {\n return true;\n }\n }\n }\n return false;\n }\n}"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RelationTypeUiHelper = void 0;
|
|
4
|
+
const test_1 = require("@playwright/test");
|
|
4
5
|
const UiBaseLocators_1 = require("./UiBaseLocators");
|
|
5
6
|
class RelationTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
6
7
|
relationTypeNameTxt;
|
|
@@ -36,7 +37,8 @@ class RelationTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
36
37
|
await this.clickActionsMenuForName(name);
|
|
37
38
|
}
|
|
38
39
|
async goToRelationTypeWithName(name) {
|
|
39
|
-
await
|
|
40
|
+
await (0, test_1.expect)(this.relationTypeCollection.getByText(name)).toBeVisible();
|
|
41
|
+
await this.relationTypeCollection.getByText(name).click();
|
|
40
42
|
await this.waitUntilUiLoaderIsNoLongerVisible();
|
|
41
43
|
}
|
|
42
44
|
async clickRootFolderCaretButton() {
|
|
@@ -47,40 +49,41 @@ class RelationTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
|
|
|
47
49
|
}
|
|
48
50
|
async openRelationTypeByNameAtRoot(relationTypeName) {
|
|
49
51
|
await this.clickRootFolderCaretButton();
|
|
50
|
-
await this.
|
|
52
|
+
await this.page.getByLabel(relationTypeName).click();
|
|
51
53
|
}
|
|
52
54
|
async enterRelationTypeName(name) {
|
|
53
|
-
await this.
|
|
55
|
+
await this.relationTypeNameTxt.clear();
|
|
56
|
+
await this.relationTypeNameTxt.fill(name);
|
|
54
57
|
}
|
|
55
58
|
async clickParentToChildRadioButton() {
|
|
56
|
-
await this.click(
|
|
59
|
+
await this.parentToChildRadioBtn.click();
|
|
57
60
|
}
|
|
58
61
|
async doesParentTypeContainValue(value) {
|
|
59
|
-
await
|
|
62
|
+
await (0, test_1.expect)(this.relationTypeParentType).toContainText(value);
|
|
60
63
|
}
|
|
61
64
|
async doesChildTypeContainValue(value) {
|
|
62
|
-
await
|
|
65
|
+
await (0, test_1.expect)(this.relationTypeChildType).toContainText(value);
|
|
63
66
|
}
|
|
64
67
|
async doesBidirectionalContainValue(value) {
|
|
65
|
-
await
|
|
68
|
+
await (0, test_1.expect)(this.relationTypeBidirectional).toContainText(value);
|
|
66
69
|
}
|
|
67
70
|
async doesDependencyContainValue(value) {
|
|
68
|
-
await
|
|
71
|
+
await (0, test_1.expect)(this.relationTypeDependency).toContainText(value);
|
|
69
72
|
}
|
|
70
73
|
async isRelationWithParentAndChildVisible(parent, child, isVisible = true) {
|
|
71
|
-
await
|
|
74
|
+
await (0, test_1.expect)(this.relationsTableRow.filter({ has: this.page.locator('uui-table-cell').first().getByText(parent) }).filter({ has: this.page.locator('uui-table-cell').nth(1).getByText(child) })).toBeVisible({ visible: isVisible });
|
|
72
75
|
}
|
|
73
76
|
async clickBidirectionalRadioButton() {
|
|
74
|
-
await this.click(
|
|
77
|
+
await this.bidirectionalRadioBtn.click();
|
|
75
78
|
}
|
|
76
79
|
async clickIsDependencyToggle() {
|
|
77
|
-
await this.click(
|
|
80
|
+
await this.isDependencyToggle.click();
|
|
78
81
|
}
|
|
79
82
|
async selectParentOption(option) {
|
|
80
|
-
await this.
|
|
83
|
+
await this.parentDropDownBox.selectOption({ label: option });
|
|
81
84
|
}
|
|
82
85
|
async selectChildOption(option) {
|
|
83
|
-
await this.
|
|
86
|
+
await this.childDropDownBox.selectOption({ label: option });
|
|
84
87
|
}
|
|
85
88
|
}
|
|
86
89
|
exports.RelationTypeUiHelper = RelationTypeUiHelper;
|