@umbraco/playwright-testhelpers 2.0.0-beta.43 → 2.0.0-beta.44

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.
@@ -12,11 +12,6 @@ export declare class DocumentTypeUiHelper extends UiBaseLocators {
12
12
  private readonly createDocumentTypeWithTemplateBtn;
13
13
  private readonly createElementTypeBtn;
14
14
  private readonly createDocumentFolderBtn;
15
- private readonly documentTypeGroupNameTxt;
16
- private readonly propertySettingsModal;
17
- private readonly allowedChildNodesModal;
18
- private readonly configureAsACollectionBtn;
19
- private readonly documentTypeGroups;
20
15
  constructor(page: Page);
21
16
  clickActionsMenuForDocumentType(name: string): Promise<void>;
22
17
  clickActionsMenuAtRoot(): Promise<void>;
@@ -25,22 +20,13 @@ export declare class DocumentTypeUiHelper extends UiBaseLocators {
25
20
  clickVaryByCultureSlider(): Promise<void>;
26
21
  clickDocumentTypeSettingsTab(): Promise<void>;
27
22
  clickDocumentTypeTemplatesTab(): Promise<void>;
28
- reorderTwoGroupsInADocumentType(): Promise<{
29
- firstGroupValue: string;
30
- secondGroupValue: string;
31
- }>;
32
23
  clickVaryBySegmentsButton(): Promise<void>;
33
24
  clickVaryByCultureButton(): Promise<void>;
34
25
  goToDocumentType(documentTypeName: string): Promise<void>;
35
- enterPropertyEditorDescription(description: string): Promise<void>;
36
26
  enterDocumentTypeName(documentTypeName: string): Promise<void>;
37
27
  clickCreateDocumentTypeButton(): Promise<void>;
38
28
  clickCreateDocumentTypeWithTemplateButton(): Promise<void>;
39
29
  clickCreateElementTypeButton(): Promise<void>;
40
30
  clickCreateDocumentFolderButton(): Promise<void>;
41
- deletePropertyEditorInDocumentTypeWithName(name: string): Promise<void>;
42
- clickAllowedChildNodesButton(): Promise<void>;
43
- clickConfigureAsACollectionButton(): Promise<void>;
44
- enterDocumentTypeGroupName(groupName: string, index?: number): Promise<void>;
45
31
  isDocumentTreeItemVisible(name: string, isVisible?: boolean): Promise<void>;
46
32
  }
@@ -15,11 +15,6 @@ class DocumentTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
15
15
  createDocumentTypeWithTemplateBtn;
16
16
  createElementTypeBtn;
17
17
  createDocumentFolderBtn;
18
- documentTypeGroupNameTxt;
19
- propertySettingsModal;
20
- allowedChildNodesModal;
21
- configureAsACollectionBtn;
22
- documentTypeGroups;
23
18
  constructor(page) {
24
19
  super(page);
25
20
  this.newDocumentTypeBtn = page.getByLabel('New Document Type...');
@@ -33,11 +28,6 @@ class DocumentTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
33
28
  this.createDocumentTypeWithTemplateBtn = page.locator('umb-ref-item').getByText('Document Type with Template', { exact: true });
34
29
  this.createElementTypeBtn = page.locator('umb-ref-item').getByText('Element Type', { exact: true });
35
30
  this.createDocumentFolderBtn = page.locator('umb-ref-item').getByText('Folder', { exact: true });
36
- this.documentTypeGroupNameTxt = page.getByLabel('Group', { exact: true });
37
- this.propertySettingsModal = page.locator('umb-property-type-settings-modal');
38
- this.allowedChildNodesModal = page.locator('umb-tree-picker-modal');
39
- this.configureAsACollectionBtn = page.getByLabel('Configure as a collection');
40
- this.documentTypeGroups = page.locator('umb-content-type-design-editor-group');
41
31
  }
42
32
  async clickActionsMenuForDocumentType(name) {
43
33
  await this.clickActionsMenuForName(name);
@@ -66,16 +56,6 @@ class DocumentTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
66
56
  await this.documentTypeTemplatesTabBtn.waitFor({ state: 'visible' });
67
57
  await this.documentTypeTemplatesTabBtn.click({ force: true });
68
58
  }
69
- async reorderTwoGroupsInADocumentType() {
70
- const firstGroup = this.documentTypeGroups.nth(0);
71
- const secondGroup = this.documentTypeGroups.nth(1);
72
- const firstGroupValue = await firstGroup.getByLabel('Group', { exact: true }).inputValue();
73
- const secondGroupValue = await secondGroup.getByLabel('Group', { exact: true }).inputValue();
74
- const dragToLocator = firstGroup.locator('[name="icon-navigation"]');
75
- const dragFromLocator = secondGroup.locator('[name="icon-navigation"]');
76
- await this.dragAndDrop(dragFromLocator, dragToLocator, 0, 0, 10);
77
- return { firstGroupValue, secondGroupValue };
78
- }
79
59
  async clickVaryBySegmentsButton() {
80
60
  await this.varyBySegmentsBtn.click();
81
61
  }
@@ -86,9 +66,6 @@ class DocumentTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
86
66
  await this.clickRootFolderCaretButton();
87
67
  await this.page.getByLabel(documentTypeName).click();
88
68
  }
89
- async enterPropertyEditorDescription(description) {
90
- await this.propertySettingsModal.locator(this.enterDescriptionTxt).fill(description);
91
- }
92
69
  async enterDocumentTypeName(documentTypeName) {
93
70
  await this.documentNameTxt.waitFor({ state: 'visible' });
94
71
  await this.documentNameTxt.fill(documentTypeName);
@@ -105,24 +82,6 @@ class DocumentTypeUiHelper extends UiBaseLocators_1.UiBaseLocators {
105
82
  async clickCreateDocumentFolderButton() {
106
83
  await this.createDocumentFolderBtn.click();
107
84
  }
108
- async deletePropertyEditorInDocumentTypeWithName(name) {
109
- // We need to hover over the Property Editor to make the delete button visible
110
- await this.page.locator('umb-content-type-design-editor-property', { hasText: name }).hover();
111
- await this.page.locator('umb-content-type-design-editor-property', { hasText: name }).getByLabel('Delete').click({ force: true });
112
- await this.clickConfirmToDeleteButton();
113
- }
114
- async clickAllowedChildNodesButton() {
115
- await this.allowedChildNodesModal.locator(this.chooseBtn).click();
116
- }
117
- async clickConfigureAsACollectionButton() {
118
- await this.configureAsACollectionBtn.click();
119
- }
120
- async enterDocumentTypeGroupName(groupName, index = 0) {
121
- // We need this wait, otherwise the group name would sometimes not be written
122
- await this.page.waitForTimeout(500);
123
- await (0, test_1.expect)(this.documentTypeGroupNameTxt.nth(index)).toBeVisible();
124
- await this.documentTypeGroupNameTxt.nth(index).fill(groupName);
125
- }
126
85
  async isDocumentTreeItemVisible(name, isVisible = true) {
127
86
  await (0, test_1.expect)(this.page.locator('umb-tree-item').locator('[label="' + name + '"]')).toBeVisible({ visible: isVisible });
128
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentTypeUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/DocumentTypeUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {UiBaseLocators} from \"./UiBaseLocators\";\nimport {expect, Locator, Page} from \"@playwright/test\";\n\nexport class DocumentTypeUiHelper extends UiBaseLocators {\n private readonly newDocumentTypeBtn: Locator;\n private readonly documentNameTxt: Locator;\n private readonly varyByCultureSlider: Locator;\n private readonly documentTypeSettingsTabBtn: Locator;\n private readonly documentTypeTemplatesTabBtn: Locator;\n private readonly varyBySegmentsBtn: Locator;\n private readonly varyByCultureBtn: Locator;\n private readonly createDocumentTypeBtn: Locator;\n private readonly createDocumentTypeWithTemplateBtn: Locator;\n private readonly createElementTypeBtn: Locator;\n private readonly createDocumentFolderBtn: Locator;\n private readonly documentTypeGroupNameTxt: Locator;\n private readonly propertySettingsModal: Locator;\n private readonly allowedChildNodesModal: Locator;\n private readonly configureAsACollectionBtn: Locator;\n private readonly documentTypeGroups: Locator;\n\n constructor(page: Page) {\n super(page);\n this.newDocumentTypeBtn = page.getByLabel('New Document Type...');\n this.documentNameTxt = page.getByLabel('name', {exact: true});\n this.varyByCultureSlider = page.locator('label').filter({hasText: 'Vary by culture'}).locator('#slider');\n this.documentTypeSettingsTabBtn = page.locator('umb-body-layout').getByRole('tab', {name: 'Settings'});\n this.documentTypeTemplatesTabBtn = page.getByRole('tab', {name: 'Templates'})\n this.varyBySegmentsBtn = page.getByText('Vary by segments', {exact: true});\n this.varyByCultureBtn = page.getByText('Vary by culture', {exact: true});\n this.createDocumentTypeBtn = page.locator('umb-ref-item').getByText('Document Type', {exact: true});\n this.createDocumentTypeWithTemplateBtn = page.locator('umb-ref-item').getByText('Document Type with Template', {exact: true});\n this.createElementTypeBtn = page.locator('umb-ref-item').getByText('Element Type', {exact: true});\n this.createDocumentFolderBtn = page.locator('umb-ref-item').getByText('Folder', {exact: true});\n this.documentTypeGroupNameTxt = page.getByLabel('Group', {exact: true});\n this.propertySettingsModal = page.locator('umb-property-type-settings-modal');\n this.allowedChildNodesModal = page.locator('umb-tree-picker-modal');\n this.configureAsACollectionBtn = page.getByLabel('Configure as a collection');\n this.documentTypeGroups = page.locator('umb-content-type-design-editor-group');\n }\n\n async clickActionsMenuForDocumentType(name: string) {\n await this.clickActionsMenuForName(name);\n }\n\n async clickActionsMenuAtRoot() {\n await this.clickActionsMenuForDocumentType(\"Document Types\");\n }\n\n async clickRootFolderCaretButton() {\n await this.clickCaretButtonForName(\"Document Types\");\n }\n\n async clickNewDocumentTypeButton() {\n await this.newDocumentTypeBtn.click();\n }\n\n async clickVaryByCultureSlider() {\n await this.varyByCultureSlider.click();\n }\n\n async clickDocumentTypeSettingsTab() {\n // The wait is necessary, because we have to wait until the document is loaded, otherwise we won't be navigated to the settings tab\n await this.page.waitForTimeout(1000);\n await this.documentTypeSettingsTabBtn.waitFor({state: 'visible'});\n await this.documentTypeSettingsTabBtn.click({force: true});\n }\n\n async clickDocumentTypeTemplatesTab() {\n // The wait is necessary, because we have to wait until the document is loaded, otherwise we won't be navigated to the templates tab\n await this.page.waitForTimeout(1000);\n await this.documentTypeTemplatesTabBtn.waitFor({state: 'visible'});\n await this.documentTypeTemplatesTabBtn.click({force: true});\n }\n\n async reorderTwoGroupsInADocumentType() {\n const firstGroup = this.documentTypeGroups.nth(0);\n const secondGroup = this.documentTypeGroups.nth(1);\n const firstGroupValue = await firstGroup.getByLabel('Group', {exact: true}).inputValue();\n const secondGroupValue = await secondGroup.getByLabel('Group', {exact: true}).inputValue();\n const dragToLocator = firstGroup.locator('[name=\"icon-navigation\"]');\n const dragFromLocator = secondGroup.locator('[name=\"icon-navigation\"]');\n await this.dragAndDrop(dragFromLocator, dragToLocator, 0, 0, 10);\n\n return {firstGroupValue, secondGroupValue};\n }\n\n async clickVaryBySegmentsButton() {\n await this.varyBySegmentsBtn.click();\n }\n\n async clickVaryByCultureButton() {\n await this.varyByCultureBtn.click();\n }\n\n async goToDocumentType(documentTypeName: string) {\n await this.clickRootFolderCaretButton();\n await this.page.getByLabel(documentTypeName).click();\n }\n\n async enterPropertyEditorDescription(description: string) {\n await this.propertySettingsModal.locator(this.enterDescriptionTxt).fill(description);\n }\n\n async enterDocumentTypeName(documentTypeName: string) {\n await this.documentNameTxt.waitFor({state: 'visible'});\n await this.documentNameTxt.fill(documentTypeName);\n }\n\n async clickCreateDocumentTypeButton() {\n await this.createDocumentTypeBtn.click();\n }\n\n async clickCreateDocumentTypeWithTemplateButton() {\n await this.createDocumentTypeWithTemplateBtn.click();\n }\n\n async clickCreateElementTypeButton() {\n await this.createElementTypeBtn.click();\n }\n\n async clickCreateDocumentFolderButton() {\n await this.createDocumentFolderBtn.click();\n }\n\n async deletePropertyEditorInDocumentTypeWithName(name: string) {\n // We need to hover over the Property Editor to make the delete button visible\n await this.page.locator('umb-content-type-design-editor-property', {hasText: name}).hover();\n await this.page.locator('umb-content-type-design-editor-property', {hasText: name}).getByLabel('Delete').click({force: true});\n await this.clickConfirmToDeleteButton();\n }\n\n async clickAllowedChildNodesButton() {\n await this.allowedChildNodesModal.locator(this.chooseBtn).click();\n }\n\n async clickConfigureAsACollectionButton() {\n await this.configureAsACollectionBtn.click();\n }\n\n async enterDocumentTypeGroupName(groupName: string, index = 0) {\n // We need this wait, otherwise the group name would sometimes not be written\n await this.page.waitForTimeout(500);\n await expect(this.documentTypeGroupNameTxt.nth(index)).toBeVisible();\n await this.documentTypeGroupNameTxt.nth(index).fill(groupName);\n }\n\n async isDocumentTreeItemVisible(name: string, isVisible = true) {\n await expect(this.page.locator('umb-tree-item').locator('[label=\"' + name + '\"]')).toBeVisible({visible: isVisible});\n }\n}"]}
1
+ {"version":3,"file":"DocumentTypeUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/DocumentTypeUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {UiBaseLocators} from \"./UiBaseLocators\";\nimport {expect, Locator, Page} from \"@playwright/test\";\n\nexport class DocumentTypeUiHelper extends UiBaseLocators {\n private readonly newDocumentTypeBtn: Locator;\n private readonly documentNameTxt: Locator;\n private readonly varyByCultureSlider: Locator;\n private readonly documentTypeSettingsTabBtn: Locator;\n private readonly documentTypeTemplatesTabBtn: Locator;\n private readonly varyBySegmentsBtn: Locator;\n private readonly varyByCultureBtn: Locator;\n private readonly createDocumentTypeBtn: Locator;\n private readonly createDocumentTypeWithTemplateBtn: Locator;\n private readonly createElementTypeBtn: Locator;\n private readonly createDocumentFolderBtn: Locator;\n\n constructor(page: Page) {\n super(page);\n this.newDocumentTypeBtn = page.getByLabel('New Document Type...');\n this.documentNameTxt = page.getByLabel('name', {exact: true});\n this.varyByCultureSlider = page.locator('label').filter({hasText: 'Vary by culture'}).locator('#slider');\n this.documentTypeSettingsTabBtn = page.locator('umb-body-layout').getByRole('tab', {name: 'Settings'});\n this.documentTypeTemplatesTabBtn = page.getByRole('tab', {name: 'Templates'})\n this.varyBySegmentsBtn = page.getByText('Vary by segments', {exact: true});\n this.varyByCultureBtn = page.getByText('Vary by culture', {exact: true});\n this.createDocumentTypeBtn = page.locator('umb-ref-item').getByText('Document Type', {exact: true});\n this.createDocumentTypeWithTemplateBtn = page.locator('umb-ref-item').getByText('Document Type with Template', {exact: true});\n this.createElementTypeBtn = page.locator('umb-ref-item').getByText('Element Type', {exact: true});\n this.createDocumentFolderBtn = page.locator('umb-ref-item').getByText('Folder', {exact: true});\n }\n\n async clickActionsMenuForDocumentType(name: string) {\n await this.clickActionsMenuForName(name);\n }\n\n async clickActionsMenuAtRoot() {\n await this.clickActionsMenuForDocumentType(\"Document Types\");\n }\n\n async clickRootFolderCaretButton() {\n await this.clickCaretButtonForName(\"Document Types\");\n }\n\n async clickNewDocumentTypeButton() {\n await this.newDocumentTypeBtn.click();\n }\n\n async clickVaryByCultureSlider() {\n await this.varyByCultureSlider.click();\n }\n\n async clickDocumentTypeSettingsTab() {\n // The wait is necessary, because we have to wait until the document is loaded, otherwise we won't be navigated to the settings tab\n await this.page.waitForTimeout(1000);\n await this.documentTypeSettingsTabBtn.waitFor({state: 'visible'});\n await this.documentTypeSettingsTabBtn.click({force: true});\n }\n\n async clickDocumentTypeTemplatesTab() {\n // The wait is necessary, because we have to wait until the document is loaded, otherwise we won't be navigated to the templates tab\n await this.page.waitForTimeout(1000);\n await this.documentTypeTemplatesTabBtn.waitFor({state: 'visible'});\n await this.documentTypeTemplatesTabBtn.click({force: true});\n }\n\n async clickVaryBySegmentsButton() {\n await this.varyBySegmentsBtn.click();\n }\n\n async clickVaryByCultureButton() {\n await this.varyByCultureBtn.click();\n }\n\n async goToDocumentType(documentTypeName: string) {\n await this.clickRootFolderCaretButton();\n await this.page.getByLabel(documentTypeName).click();\n }\n\n async enterDocumentTypeName(documentTypeName: string) {\n await this.documentNameTxt.waitFor({state: 'visible'});\n await this.documentNameTxt.fill(documentTypeName);\n }\n\n async clickCreateDocumentTypeButton() {\n await this.createDocumentTypeBtn.click();\n }\n\n async clickCreateDocumentTypeWithTemplateButton() {\n await this.createDocumentTypeWithTemplateBtn.click();\n }\n\n async clickCreateElementTypeButton() {\n await this.createElementTypeBtn.click();\n }\n\n async clickCreateDocumentFolderButton() {\n await this.createDocumentFolderBtn.click();\n }\n \n async isDocumentTreeItemVisible(name: string, isVisible = true) {\n await expect(this.page.locator('umb-tree-item').locator('[label=\"' + name + '\"]')).toBeVisible({visible: isVisible});\n }\n}"]}
@@ -19,4 +19,13 @@ export declare class MediaTypeApiHelper {
19
19
  createDefaultMediaType(mediaTypeName: string): Promise<string | undefined>;
20
20
  createMediaTypeWithPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName?: string): Promise<string | undefined>;
21
21
  createMediaTypeWithTwoPropertyEditors(mediaTypeName: string, dataTypeNameOne: string, dataTypeIdOne: string, dataTypeNameTwo: string, dataTypeIdTwo: string, groupName?: string): Promise<string | undefined>;
22
+ createMediaTypeWithPropertyEditorInTab(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName?: string, varyByCulture?: boolean): Promise<string | undefined>;
23
+ createMediaTypeWithTwoGroups(mediaTypeName: string, dataType: string, dataTypeId: string, groupNameOne: string, groupNameTwo: string): Promise<string | undefined>;
24
+ createMediaTypeWithTwoTabs(mediaTypeName: string, dataType: string, dataTypeId: string, tabNameOne: string, tabNameTwo: string): Promise<string | undefined>;
25
+ createMediaTypeWithAllowedChildNode(mediaTypeName: string, allowedChildNodeId: string): Promise<string | undefined>;
26
+ doesGroupContainCorrectPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName: string): Promise<any>;
27
+ doesTabContainCorrectPropertyEditorInGroup(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName: string): Promise<any>;
28
+ doesMediaTypeGroupNameContainCorrectSortOrder(mediaTypeName: string, groupName: string, sortOrder: number): Promise<boolean>;
29
+ doesMediaTypeTabNameContainCorrectSortOrder(mediaTypeName: string, tabName: string, sortOrder: number): Promise<boolean>;
30
+ doesTabContainerCorrectPropertyEditor(mediaTypeName: string, tabName: string, dataTypeId: string): Promise<any>;
22
31
  }
@@ -189,6 +189,196 @@ class MediaTypeApiHelper {
189
189
  .build();
190
190
  return await this.create(mediaType);
191
191
  }
192
+ async createMediaTypeWithPropertyEditorInTab(mediaTypeName, dataTypeName, dataTypeId, tabName, groupName = "TestGroup", varyByCulture = false) {
193
+ const crypto = require('crypto');
194
+ const tabId = crypto.randomUUID();
195
+ const groupId = crypto.randomUUID();
196
+ const mediaType = new json_models_builders_1.MediaTypeBuilder()
197
+ .withName(mediaTypeName)
198
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
199
+ .addContainer()
200
+ .withName(tabName)
201
+ .withId(tabId)
202
+ .withType("Tab")
203
+ .done()
204
+ .addContainer()
205
+ .withName(groupName)
206
+ .withId(groupId)
207
+ .withType("Group")
208
+ .withParentId(tabId)
209
+ .done()
210
+ .addProperty()
211
+ .withContainerId(groupId)
212
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(dataTypeName))
213
+ .withName(dataTypeName)
214
+ .withDataTypeId(dataTypeId)
215
+ .done()
216
+ .withVariesByCulture(varyByCulture)
217
+ .build();
218
+ return await this.create(mediaType);
219
+ }
220
+ async createMediaTypeWithTwoGroups(mediaTypeName, dataType, dataTypeId, groupNameOne, groupNameTwo) {
221
+ const crypto = require('crypto');
222
+ const groupOneId = crypto.randomUUID();
223
+ const groupTwoId = crypto.randomUUID();
224
+ const mediaType = new json_models_builders_1.MediaTypeBuilder()
225
+ .withName(mediaTypeName)
226
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
227
+ .addContainer()
228
+ .withName(groupNameOne)
229
+ .withId(groupOneId)
230
+ .withType("Group")
231
+ .withSortOrder(0)
232
+ .done()
233
+ .addContainer()
234
+ .withName(groupNameTwo)
235
+ .withId(groupTwoId)
236
+ .withType("Group")
237
+ .withSortOrder(1)
238
+ .done()
239
+ .addProperty()
240
+ .withContainerId(groupOneId)
241
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "One"))
242
+ .withName(dataType + "One")
243
+ .withDataTypeId(dataTypeId)
244
+ .done()
245
+ .addProperty()
246
+ .withContainerId(groupTwoId)
247
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "Two"))
248
+ .withName(dataType + "Two")
249
+ .withDataTypeId(dataTypeId)
250
+ .done()
251
+ .build();
252
+ return await this.create(mediaType);
253
+ }
254
+ async createMediaTypeWithTwoTabs(mediaTypeName, dataType, dataTypeId, tabNameOne, tabNameTwo) {
255
+ const crypto = require('crypto');
256
+ const tabOneId = crypto.randomUUID();
257
+ const tabTwoId = crypto.randomUUID();
258
+ const groupOneId = crypto.randomUUID();
259
+ const groupTwoId = crypto.randomUUID();
260
+ const mediaType = new json_models_builders_1.MediaTypeBuilder()
261
+ .withName(mediaTypeName)
262
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
263
+ .addContainer()
264
+ .withName(tabNameOne)
265
+ .withId(tabOneId)
266
+ .withType("Tab")
267
+ .withSortOrder(0)
268
+ .done()
269
+ .addContainer()
270
+ .withName(tabNameTwo)
271
+ .withId(tabTwoId)
272
+ .withType("Tab")
273
+ .withSortOrder(1)
274
+ .done()
275
+ .addContainer()
276
+ .withName("GroupTestOne")
277
+ .withId(groupOneId)
278
+ .withType("Group")
279
+ .withParentId(tabOneId)
280
+ .done()
281
+ .addProperty()
282
+ .withContainerId(groupOneId)
283
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "One"))
284
+ .withName(dataType + "One")
285
+ .withDataTypeId(dataTypeId)
286
+ .done()
287
+ .addContainer()
288
+ .withName("GroupTestTwo")
289
+ .withId(groupTwoId)
290
+ .withType("Group")
291
+ .withParentId(tabTwoId)
292
+ .done()
293
+ .addProperty()
294
+ .withContainerId(groupTwoId)
295
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "Two"))
296
+ .withName(dataType + "Two")
297
+ .withDataTypeId(dataTypeId)
298
+ .done()
299
+ .build();
300
+ return await this.create(mediaType);
301
+ }
302
+ async createMediaTypeWithAllowedChildNode(mediaTypeName, allowedChildNodeId) {
303
+ await this.ensureNameNotExists(mediaTypeName);
304
+ const mediaType = new json_models_builders_1.MediaTypeBuilder()
305
+ .withName(mediaTypeName)
306
+ .withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
307
+ .withAllowedAsRoot(true)
308
+ .addAllowedMediaType()
309
+ .withId(allowedChildNodeId)
310
+ .done()
311
+ .build();
312
+ return await this.create(mediaType);
313
+ }
314
+ async doesGroupContainCorrectPropertyEditor(mediaTypeName, dataTypeName, dataTypeId, groupName) {
315
+ const mediaType = await this.getByName(mediaTypeName);
316
+ const group = mediaType.containers.find(x => x.name === groupName);
317
+ // Check if group is defined
318
+ if (group) {
319
+ // Check if the media type properties include the specified property, and it belongs to the group
320
+ return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);
321
+ }
322
+ else {
323
+ // Group not found
324
+ return false;
325
+ }
326
+ }
327
+ async doesTabContainCorrectPropertyEditorInGroup(mediaTypeName, dataTypeName, dataTypeId, tabName, groupName) {
328
+ const mediaType = await this.getByName(mediaTypeName);
329
+ const tab = mediaType.containers.find(x => x.name === tabName);
330
+ // Check if tab is defined
331
+ if (tab) {
332
+ const group = mediaType.containers.find(x => x.name === groupName && x.parent.id === tab.id);
333
+ // Check if group is defined
334
+ if (group) {
335
+ // Check if the media type properties include the specified property, and it belongs to the group
336
+ return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);
337
+ }
338
+ else {
339
+ // Group not found
340
+ return false;
341
+ }
342
+ }
343
+ else {
344
+ // Tab not found
345
+ return false;
346
+ }
347
+ }
348
+ async doesMediaTypeGroupNameContainCorrectSortOrder(mediaTypeName, groupName, sortOrder) {
349
+ const mediaType = await this.getByName(mediaTypeName);
350
+ const group = mediaType.containers.find(x => x.name === groupName);
351
+ // Check if group is defined
352
+ if (group) {
353
+ return group.sortOrder === sortOrder;
354
+ }
355
+ else {
356
+ // Group not found
357
+ return false;
358
+ }
359
+ }
360
+ async doesMediaTypeTabNameContainCorrectSortOrder(mediaTypeName, tabName, sortOrder) {
361
+ const mediaType = await this.getByName(mediaTypeName);
362
+ const tab = mediaType.containers.find(x => x.name === tabName);
363
+ // Check if tab is defined
364
+ if (tab) {
365
+ return tab.sortOrder === sortOrder;
366
+ }
367
+ else {
368
+ // Tab not found
369
+ return false;
370
+ }
371
+ }
372
+ async doesTabContainerCorrectPropertyEditor(mediaTypeName, tabName, dataTypeId) {
373
+ const mediaType = await this.getByName(mediaTypeName);
374
+ const tab = mediaType.containers.find(x => x.name === tabName);
375
+ if (tab) {
376
+ return mediaType.properties.find(x => x.dataType.id === dataTypeId && x.container.id === tab.id);
377
+ }
378
+ else {
379
+ return false;
380
+ }
381
+ }
192
382
  }
193
383
  exports.MediaTypeApiHelper = MediaTypeApiHelper;
194
384
  //# sourceMappingURL=MediaTypeApiHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaTypeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/MediaTypeApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {AliasHelper} from \"./AliasHelper\";\nimport {MediaTypeBuilder} from \"@umbraco/json-models-builders\";\n\nexport class MediaTypeApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureNameNotExists(name: string) {\n const rootMediaTypes = await this.getAllAtRoot();\n const jsonMediaTypes = await rootMediaTypes.json();\n\n for (const mediaType of jsonMediaTypes.items) {\n if (mediaType.name === name) {\n if (mediaType.isFolder) {\n return await this.recurseDeleteChildren(mediaType);\n }\n return await this.delete(mediaType.id);\n } else if (mediaType.hasChildren) {\n await this.recurseChildren(name, mediaType.id, true);\n }\n }\n return null;\n }\n\n async getAllAtRoot() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media-type/root?skip=0&take=10000&foldersOnly=false');\n }\n\n private async recurseChildren(name: string, id: string, toDelete: boolean) {\n const items = await this.getChildren(id);\n\n for (const child of items) {\n if (child.name === name) {\n if (!toDelete) {\n if (child.isFolder) {\n return await this.getFolder(child.id);\n }\n return await this.get(child.id);\n }\n if (child.isFolder) {\n return await this.recurseDeleteChildren(child);\n }\n return await this.delete(child.id);\n } else if (child.hasChildren) {\n return await this.recurseChildren(name, child.id, toDelete);\n }\n }\n return false;\n }\n\n private async recurseDeleteChildren(mediaTypeFolder) {\n if (!mediaTypeFolder.hasChildren) {\n return await this.deleteFolder(mediaTypeFolder.id);\n }\n const items = await this.getChildren(mediaTypeFolder.id);\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.id);\n } else {\n await this.delete(child.id);\n }\n }\n return await this.deleteFolder(mediaTypeFolder.id);\n }\n\n async getChildren(id: string) {\n const response = await this.api.get(`${this.api.baseUrl}/umbraco/management/api/v1/tree/media-type/children?parentId=${id}&skip=0&take=10000&foldersOnly=false`);\n const items = await response.json();\n return items.items;\n }\n\n async create(mediaType) {\n if (mediaType == null) {\n return;\n }\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type', mediaType)\n return response.headers().location.split(\"/\").pop();\n }\n\n\n async delete(id: string) {\n if (id == null) {\n return;\n }\n const response = await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);\n return response.status();\n }\n\n async getByName(name: string) {\n const rootMediaTypes = await this.getAllAtRoot();\n const jsonMediaTypes = await rootMediaTypes.json();\n\n for (const mediaType of jsonMediaTypes.items) {\n if (mediaType.name === name) {\n if (mediaType.isFolder) {\n return this.getFolder(mediaType.id);\n }\n return this.get(mediaType.id);\n } else if (mediaType.isContainer || mediaType.hasChildren) {\n const result = await this.recurseChildren(name, mediaType.id, false);\n if (result) {\n return result;\n }\n }\n }\n return false;\n }\n\n async doesNameExist(name: string) {\n return await this.getByName(name);\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);\n const json = await response.json();\n if (json !== null) {\n return json;\n }\n return null;\n }\n \n // Folder\n async getFolder(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);\n return await response.json();\n }\n\n async deleteFolder(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);\n }\n\n async createFolder(name: string, parentId?: string) {\n const folder = {\n \"name\": name,\n \"parent\": parentId ? {\"id\": parentId} : null\n }\n return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder', folder);\n }\n\n async renameFolder(folderId: string, folderName: string) {\n const folder = {\n \"name\": folderName\n }\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + folderId, folder);\n }\n\n async createDefaultMediaType(mediaTypeName: string) {\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName: string = \"GroupTest\")\n {\n const crypto = require('crypto');\n const containerId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(groupName)\n .withId(containerId)\n .withType(\"Group\")\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeName))\n .withName(dataTypeName)\n .withDataTypeId(dataTypeId)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithTwoPropertyEditors(mediaTypeName: string, dataTypeNameOne: string, dataTypeIdOne: string, dataTypeNameTwo: string, dataTypeIdTwo: string, groupName: string = \"GroupTest\")\n {\n const crypto = require('crypto');\n const containerId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(groupName)\n .withId(containerId)\n .withType(\"Group\")\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeNameOne))\n .withName(dataTypeNameOne)\n .withDataTypeId(dataTypeIdOne)\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeNameTwo))\n .withName(dataTypeNameTwo)\n .withDataTypeId(dataTypeIdTwo)\n .done()\n .build();\n return await this.create(mediaType);\n }\n}"]}
1
+ {"version":3,"file":"MediaTypeApiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/MediaTypeApiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {ApiHelpers} from \"./ApiHelpers\";\nimport {AliasHelper} from \"./AliasHelper\";\nimport {MediaTypeBuilder} from \"@umbraco/json-models-builders\";\n\nexport class MediaTypeApiHelper {\n api: ApiHelpers\n\n constructor(api: ApiHelpers) {\n this.api = api;\n }\n\n async ensureNameNotExists(name: string) {\n const rootMediaTypes = await this.getAllAtRoot();\n const jsonMediaTypes = await rootMediaTypes.json();\n\n for (const mediaType of jsonMediaTypes.items) {\n if (mediaType.name === name) {\n if (mediaType.isFolder) {\n return await this.recurseDeleteChildren(mediaType);\n }\n return await this.delete(mediaType.id);\n } else if (mediaType.hasChildren) {\n await this.recurseChildren(name, mediaType.id, true);\n }\n }\n return null;\n }\n\n async getAllAtRoot() {\n return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media-type/root?skip=0&take=10000&foldersOnly=false');\n }\n\n private async recurseChildren(name: string, id: string, toDelete: boolean) {\n const items = await this.getChildren(id);\n\n for (const child of items) {\n if (child.name === name) {\n if (!toDelete) {\n if (child.isFolder) {\n return await this.getFolder(child.id);\n }\n return await this.get(child.id);\n }\n if (child.isFolder) {\n return await this.recurseDeleteChildren(child);\n }\n return await this.delete(child.id);\n } else if (child.hasChildren) {\n return await this.recurseChildren(name, child.id, toDelete);\n }\n }\n return false;\n }\n\n private async recurseDeleteChildren(mediaTypeFolder) {\n if (!mediaTypeFolder.hasChildren) {\n return await this.deleteFolder(mediaTypeFolder.id);\n }\n const items = await this.getChildren(mediaTypeFolder.id);\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.id);\n } else {\n await this.delete(child.id);\n }\n }\n return await this.deleteFolder(mediaTypeFolder.id);\n }\n\n async getChildren(id: string) {\n const response = await this.api.get(`${this.api.baseUrl}/umbraco/management/api/v1/tree/media-type/children?parentId=${id}&skip=0&take=10000&foldersOnly=false`);\n const items = await response.json();\n return items.items;\n }\n\n async create(mediaType) {\n if (mediaType == null) {\n return;\n }\n const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type', mediaType);\n return response.headers().location.split(\"/\").pop();\n }\n\n\n async delete(id: string) {\n if (id == null) {\n return;\n }\n const response = await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);\n return response.status();\n }\n\n async getByName(name: string) {\n const rootMediaTypes = await this.getAllAtRoot();\n const jsonMediaTypes = await rootMediaTypes.json();\n\n for (const mediaType of jsonMediaTypes.items) {\n if (mediaType.name === name) {\n if (mediaType.isFolder) {\n return this.getFolder(mediaType.id);\n }\n return this.get(mediaType.id);\n } else if (mediaType.isContainer || mediaType.hasChildren) {\n const result = await this.recurseChildren(name, mediaType.id, false);\n if (result) {\n return result;\n }\n }\n }\n return false;\n }\n\n async doesNameExist(name: string) {\n return await this.getByName(name);\n }\n\n async get(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);\n const json = await response.json();\n if (json !== null) {\n return json;\n }\n return null;\n }\n\n // Folder\n async getFolder(id: string) {\n const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);\n return await response.json();\n }\n\n async deleteFolder(id: string) {\n return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);\n }\n\n async createFolder(name: string, parentId?: string) {\n const folder = {\n \"name\": name,\n \"parent\": parentId ? {\"id\": parentId} : null\n }\n return await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder', folder);\n }\n\n async renameFolder(folderId: string, folderName: string) {\n const folder = {\n \"name\": folderName\n }\n return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + folderId, folder);\n }\n\n async createDefaultMediaType(mediaTypeName: string) {\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName: string = \"GroupTest\") {\n const crypto = require('crypto');\n const containerId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(groupName)\n .withId(containerId)\n .withType(\"Group\")\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeName))\n .withName(dataTypeName)\n .withDataTypeId(dataTypeId)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithTwoPropertyEditors(mediaTypeName: string, dataTypeNameOne: string, dataTypeIdOne: string, dataTypeNameTwo: string, dataTypeIdTwo: string, groupName: string = \"GroupTest\") {\n const crypto = require('crypto');\n const containerId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(groupName)\n .withId(containerId)\n .withType(\"Group\")\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeNameOne))\n .withName(dataTypeNameOne)\n .withDataTypeId(dataTypeIdOne)\n .done()\n .addProperty()\n .withContainerId(containerId)\n .withAlias(AliasHelper.toAlias(dataTypeNameTwo))\n .withName(dataTypeNameTwo)\n .withDataTypeId(dataTypeIdTwo)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithPropertyEditorInTab(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName: string = \"TestGroup\", varyByCulture: boolean = false) {\n const crypto = require('crypto');\n const tabId = crypto.randomUUID();\n const groupId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(tabName)\n .withId(tabId)\n .withType(\"Tab\")\n .done()\n .addContainer()\n .withName(groupName)\n .withId(groupId)\n .withType(\"Group\")\n .withParentId(tabId)\n .done()\n .addProperty()\n .withContainerId(groupId)\n .withAlias(AliasHelper.toAlias(dataTypeName))\n .withName(dataTypeName)\n .withDataTypeId(dataTypeId)\n .done()\n .withVariesByCulture(varyByCulture)\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithTwoGroups(mediaTypeName: string, dataType: string, dataTypeId: string, groupNameOne: string, groupNameTwo: string) {\n const crypto = require('crypto');\n const groupOneId = crypto.randomUUID();\n const groupTwoId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(groupNameOne)\n .withId(groupOneId)\n .withType(\"Group\")\n .withSortOrder(0)\n .done()\n .addContainer()\n .withName(groupNameTwo)\n .withId(groupTwoId)\n .withType(\"Group\")\n .withSortOrder(1)\n .done()\n .addProperty()\n .withContainerId(groupOneId)\n .withAlias(AliasHelper.toAlias(dataType + \"One\"))\n .withName(dataType + \"One\")\n .withDataTypeId(dataTypeId)\n .done()\n .addProperty()\n .withContainerId(groupTwoId)\n .withAlias(AliasHelper.toAlias(dataType + \"Two\"))\n .withName(dataType + \"Two\")\n .withDataTypeId(dataTypeId)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithTwoTabs(mediaTypeName: string, dataType: string, dataTypeId: string, tabNameOne: string, tabNameTwo: string) {\n const crypto = require('crypto');\n const tabOneId = crypto.randomUUID();\n const tabTwoId = crypto.randomUUID();\n const groupOneId = crypto.randomUUID();\n const groupTwoId = crypto.randomUUID();\n\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .addContainer()\n .withName(tabNameOne)\n .withId(tabOneId)\n .withType(\"Tab\")\n .withSortOrder(0)\n .done()\n .addContainer()\n .withName(tabNameTwo)\n .withId(tabTwoId)\n .withType(\"Tab\")\n .withSortOrder(1)\n .done()\n .addContainer()\n .withName(\"GroupTestOne\")\n .withId(groupOneId)\n .withType(\"Group\")\n .withParentId(tabOneId)\n .done()\n .addProperty()\n .withContainerId(groupOneId)\n .withAlias(AliasHelper.toAlias(dataType + \"One\"))\n .withName(dataType + \"One\")\n .withDataTypeId(dataTypeId)\n .done()\n .addContainer()\n .withName(\"GroupTestTwo\")\n .withId(groupTwoId)\n .withType(\"Group\")\n .withParentId(tabTwoId)\n .done()\n .addProperty()\n .withContainerId(groupTwoId)\n .withAlias(AliasHelper.toAlias(dataType + \"Two\"))\n .withName(dataType + \"Two\")\n .withDataTypeId(dataTypeId)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async createMediaTypeWithAllowedChildNode(mediaTypeName: string, allowedChildNodeId: string) {\n await this.ensureNameNotExists(mediaTypeName);\n const mediaType = new MediaTypeBuilder()\n .withName(mediaTypeName)\n .withAlias(AliasHelper.toAlias(mediaTypeName))\n .withAllowedAsRoot(true)\n .addAllowedMediaType()\n .withId(allowedChildNodeId)\n .done()\n .build();\n return await this.create(mediaType);\n }\n\n async doesGroupContainCorrectPropertyEditor(mediaTypeName: string, dataTypeName: string, dataTypeId: string, groupName: string) {\n const mediaType = await this.getByName(mediaTypeName);\n const group = mediaType.containers.find(x => x.name === groupName);\n // Check if group is defined\n if (group) {\n // Check if the media type properties include the specified property, and it belongs to the group\n return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);\n } else {\n // Group not found\n return false;\n }\n }\n\n async doesTabContainCorrectPropertyEditorInGroup(mediaTypeName: string, dataTypeName: string, dataTypeId: string, tabName: string, groupName: string) {\n const mediaType = await this.getByName(mediaTypeName);\n const tab = mediaType.containers.find(x => x.name === tabName);\n // Check if tab is defined\n if (tab) {\n const group = mediaType.containers.find(x => x.name === groupName && x.parent.id === tab.id);\n // Check if group is defined\n if (group) {\n // Check if the media type properties include the specified property, and it belongs to the group\n return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);\n } else {\n // Group not found\n return false;\n }\n } else {\n // Tab not found\n return false;\n }\n }\n\n async doesMediaTypeGroupNameContainCorrectSortOrder(mediaTypeName: string, groupName: string, sortOrder: number) {\n const mediaType = await this.getByName(mediaTypeName);\n const group = mediaType.containers.find(x => x.name === groupName);\n // Check if group is defined\n if (group) {\n return group.sortOrder === sortOrder;\n } else {\n // Group not found\n return false;\n }\n }\n\n async doesMediaTypeTabNameContainCorrectSortOrder(mediaTypeName: string, tabName: string, sortOrder: number) {\n const mediaType = await this.getByName(mediaTypeName);\n const tab = mediaType.containers.find(x => x.name === tabName);\n // Check if tab is defined\n if (tab) {\n return tab.sortOrder === sortOrder;\n } else {\n // Tab not found\n return false;\n }\n }\n\n async doesTabContainerCorrectPropertyEditor(mediaTypeName: string, tabName: string, dataTypeId: string) {\n const mediaType = await this.getByName(mediaTypeName);\n const tab = mediaType.containers.find(x => x.name === tabName);\n if (tab) {\n return mediaType.properties.find(x => x.dataType.id === dataTypeId && x.container.id === tab.id);\n } else {\n return false;\n }\n }\n}"]}
@@ -55,6 +55,8 @@ class TemplateUiHelper extends UiBaseLocators_1.UiBaseLocators {
55
55
  await this.templateNameTxt.fill(templateName);
56
56
  }
57
57
  async enterTemplateContent(templateContent) {
58
+ // We need this wait, to be sure that the template content is loaded.
59
+ await this.page.waitForTimeout(200);
58
60
  await this.textAreaInputArea.clear();
59
61
  await this.textAreaInputArea.fill(templateContent);
60
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemplateUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class TemplateUiHelper extends UiBaseLocators {\n private readonly templateNameTxt: Locator;\n private readonly changeMasterTemplateBtn: Locator;\n private readonly sectionsBtn: Locator;\n private readonly removeMasterTemplateBtn: Locator;\n private readonly sectionNameTxt: Locator;\n private readonly templateTree: Locator;\n\n constructor(page: Page) {\n super(page);\n this.templateNameTxt = page.getByLabel('Template', {exact: true});\n this.changeMasterTemplateBtn = page.locator('#master-template-button');\n this.sectionsBtn = page.locator('#sections-button', {hasText: 'Sections'});\n this.removeMasterTemplateBtn = page.locator('[name=\"icon-delete\"] svg');\n this.sectionNameTxt = page.getByLabel('Section Name');\n this.templateTree = page.locator('umb-tree[alias=\"Umb.Tree.Template\"]');\n }\n\n async clickActionsMenuForTemplate(name: string) {\n await this.clickActionsMenuForName(name);\n }\n\n async clickActionsMenuAtRoot() {\n await this.clickActionsMenuForTemplate('Templates');\n }\n\n async clickRootFolderCaretButton() {\n await this.clickCaretButtonForName('Templates');\n }\n\n async goToTemplate(templateName: string, childTemplateName: string = '') {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.reloadTemplateTree();\n if (childTemplateName === '') {\n await this.page.getByLabel(templateName).click();\n await expect(this.templateNameTxt).toHaveValue(templateName);\n } else {\n await this.clickCaretButtonForName(templateName);\n await this.page.getByLabel(childTemplateName).click();\n await expect(this.templateNameTxt).toHaveValue(childTemplateName);\n }\n }\n\n async clickSectionsButton() {\n await expect(this.sectionsBtn).toBeVisible();\n await this.sectionsBtn.click();\n }\n\n async clickChangeMasterTemplateButton() {\n await this.changeMasterTemplateBtn.click();\n }\n\n async enterTemplateName(templateName: string) {\n await expect(this.templateNameTxt).toBeVisible();\n await this.templateNameTxt.clear();\n await this.templateNameTxt.fill(templateName);\n }\n\n async enterTemplateContent(templateContent: string) {\n await this.textAreaInputArea.clear();\n await this.textAreaInputArea.fill(templateContent);\n }\n\n async isMasterTemplateNameVisible(templateName: string, isVisible: boolean = true) {\n await expect(this.page.getByLabel('Master template: ' + templateName)).toBeVisible({visible: isVisible});\n }\n\n async clickRemoveMasterTemplateButton() {\n await this.removeMasterTemplateBtn.click();\n }\n\n async insertSection(sectionType: string, sectionName: string = '') {\n await this.clickSectionsButton();\n await expect(this.submitBtn).toBeVisible();\n await this.page.locator('[label=\"' + sectionType + '\"]').click();\n if (sectionName !== '') {\n await expect(this.sectionNameTxt).toBeVisible();\n await this.sectionNameTxt.fill(sectionName);\n }\n await this.clickSubmitButton();\n }\n\n async isTemplateTreeItemVisible(templateName: string, isVisible: boolean = true) {\n return expect(this.templateTree.getByText(templateName, {exact: true})).toBeVisible({visible: isVisible});\n }\n\n async reloadTemplateTree() {\n await this.reloadTree('Templates');\n }\n\n async isTemplateRootTreeItemVisible(templateName: string, isVisible: boolean = true) {\n await this.reloadTemplateTree();\n return expect(this.templateTree.getByText(templateName, {exact: true})).toBeVisible({visible: isVisible});\n }\n}"]}
1
+ {"version":3,"file":"TemplateUiHelper.js","sourceRoot":"","sources":["../../../lib/helpers/TemplateUiHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import {Page, Locator, expect} from \"@playwright/test\"\nimport {UiBaseLocators} from \"./UiBaseLocators\";\nimport {ConstantHelper} from \"./ConstantHelper\";\n\nexport class TemplateUiHelper extends UiBaseLocators {\n private readonly templateNameTxt: Locator;\n private readonly changeMasterTemplateBtn: Locator;\n private readonly sectionsBtn: Locator;\n private readonly removeMasterTemplateBtn: Locator;\n private readonly sectionNameTxt: Locator;\n private readonly templateTree: Locator;\n\n constructor(page: Page) {\n super(page);\n this.templateNameTxt = page.getByLabel('Template', {exact: true});\n this.changeMasterTemplateBtn = page.locator('#master-template-button');\n this.sectionsBtn = page.locator('#sections-button', {hasText: 'Sections'});\n this.removeMasterTemplateBtn = page.locator('[name=\"icon-delete\"] svg');\n this.sectionNameTxt = page.getByLabel('Section Name');\n this.templateTree = page.locator('umb-tree[alias=\"Umb.Tree.Template\"]');\n }\n\n async clickActionsMenuForTemplate(name: string) {\n await this.clickActionsMenuForName(name);\n }\n\n async clickActionsMenuAtRoot() {\n await this.clickActionsMenuForTemplate('Templates');\n }\n\n async clickRootFolderCaretButton() {\n await this.clickCaretButtonForName('Templates');\n }\n\n async goToTemplate(templateName: string, childTemplateName: string = '') {\n await this.goToSection(ConstantHelper.sections.settings);\n await this.reloadTemplateTree();\n if (childTemplateName === '') {\n await this.page.getByLabel(templateName).click();\n await expect(this.templateNameTxt).toHaveValue(templateName);\n } else {\n await this.clickCaretButtonForName(templateName);\n await this.page.getByLabel(childTemplateName).click();\n await expect(this.templateNameTxt).toHaveValue(childTemplateName);\n }\n }\n\n async clickSectionsButton() {\n await expect(this.sectionsBtn).toBeVisible();\n await this.sectionsBtn.click();\n }\n\n async clickChangeMasterTemplateButton() {\n await this.changeMasterTemplateBtn.click();\n }\n\n async enterTemplateName(templateName: string) {\n await expect(this.templateNameTxt).toBeVisible();\n await this.templateNameTxt.clear();\n await this.templateNameTxt.fill(templateName);\n }\n\n async enterTemplateContent(templateContent: string) {\n // We need this wait, to be sure that the template content is loaded.\n await this.page.waitForTimeout(200);\n await this.textAreaInputArea.clear();\n await this.textAreaInputArea.fill(templateContent);\n }\n\n async isMasterTemplateNameVisible(templateName: string, isVisible: boolean = true) {\n await expect(this.page.getByLabel('Master template: ' + templateName)).toBeVisible({visible: isVisible});\n }\n\n async clickRemoveMasterTemplateButton() {\n await this.removeMasterTemplateBtn.click();\n }\n\n async insertSection(sectionType: string, sectionName: string = '') {\n await this.clickSectionsButton();\n await expect(this.submitBtn).toBeVisible();\n await this.page.locator('[label=\"' + sectionType + '\"]').click();\n if (sectionName !== '') {\n await expect(this.sectionNameTxt).toBeVisible();\n await this.sectionNameTxt.fill(sectionName);\n }\n await this.clickSubmitButton();\n }\n\n async isTemplateTreeItemVisible(templateName: string, isVisible: boolean = true) {\n return expect(this.templateTree.getByText(templateName, {exact: true})).toBeVisible({visible: isVisible});\n }\n\n async reloadTemplateTree() {\n await this.reloadTree('Templates');\n }\n\n async isTemplateRootTreeItemVisible(templateName: string, isVisible: boolean = true) {\n await this.reloadTemplateTree();\n return expect(this.templateTree.getByText(templateName, {exact: true})).toBeVisible({visible: isVisible});\n }\n}"]}
@@ -85,6 +85,10 @@ export declare class UiBaseLocators {
85
85
  readonly queryResults: Locator;
86
86
  readonly reloadBtn: Locator;
87
87
  readonly confirmToRemoveBtn: Locator;
88
+ private readonly propertySettingsModal;
89
+ private readonly typeGroups;
90
+ private readonly allowedChildNodesModal;
91
+ private readonly configureAsACollectionBtn;
88
92
  readonly errorNotification: Locator;
89
93
  readonly successNotification: Locator;
90
94
  private readonly leftArrowBtn;
@@ -155,9 +159,9 @@ export declare class UiBaseLocators {
155
159
  clickCreateButton(): Promise<void>;
156
160
  clickAddButton(): Promise<void>;
157
161
  clickNewFolderThreeDotsButton(): Promise<void>;
158
- clickEditorSettingsButton(): Promise<void>;
162
+ clickEditorSettingsButton(index?: number): Promise<void>;
159
163
  enterDescription(description: string): Promise<void>;
160
- doesDescriptionHaveValue(value: string): Promise<void>;
164
+ doesDescriptionHaveValue(value: string, index?: number): Promise<void>;
161
165
  clickStructureTab(): Promise<void>;
162
166
  clickAllowAtRootButton(): Promise<void>;
163
167
  clickIAmDoneReorderingButton(): Promise<void>;
@@ -173,6 +177,7 @@ export declare class UiBaseLocators {
173
177
  searchForTypeToFilterValue(searchValue: string): Promise<void>;
174
178
  addPropertyEditor(propertyEditorName: string, index?: number): Promise<void>;
175
179
  updatePropertyEditor(propertyEditorName: string): Promise<void>;
180
+ enterPropertyEditorDescription(description: string): Promise<void>;
176
181
  clickAddGroupButton(): Promise<void>;
177
182
  enterGroupName(groupName: string, index?: number): Promise<void>;
178
183
  doesGroupHaveValue(value: string): Promise<void>;
@@ -182,11 +187,19 @@ export declare class UiBaseLocators {
182
187
  clickCreateLink(): Promise<void>;
183
188
  insertSystemFieldValue(fieldValue: string): Promise<void>;
184
189
  insertPartialView(partialViewName: string): Promise<void>;
190
+ deletePropertyEditorWithName(name: string): Promise<void>;
185
191
  clickRenameButton(): Promise<void>;
186
192
  clickDeleteAndConfirmButton(): Promise<void>;
187
193
  clickQueryBuilderButton(): Promise<void>;
188
194
  chooseRootContentInQueryBuilder(contentName: string): Promise<void>;
195
+ reorderTwoGroups(): Promise<{
196
+ firstGroupValue: string;
197
+ secondGroupValue: string;
198
+ }>;
199
+ clickAllowedChildNodesButton(): Promise<void>;
200
+ clickConfigureAsACollectionButton(): Promise<void>;
189
201
  doesReturnedItemsHaveCount(itemCount: number): Promise<void>;
190
202
  doesQueryResultHaveContentName(contentName: string): Promise<void>;
203
+ deleteGroup(groupName: string, forceClick?: boolean): Promise<void>;
191
204
  clickLeftArrowButton(): Promise<void>;
192
205
  }