@umbraco/playwright-testhelpers
Version:
Test helpers for making playwright tests for Umbraco solutions
391 lines • 15.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MediaTypeApiHelper = void 0;
const AliasHelper_1 = require("./AliasHelper");
const json_models_builders_1 = require("@umbraco/json-models-builders");
class MediaTypeApiHelper {
api;
constructor(api) {
this.api = api;
}
async ensureNameNotExists(name) {
const rootMediaTypes = await this.getAllAtRoot();
const jsonMediaTypes = await rootMediaTypes.json();
for (const mediaType of jsonMediaTypes.items) {
if (mediaType.name === name) {
if (mediaType.isFolder) {
return await this.recurseDeleteChildren(mediaType);
}
return await this.delete(mediaType.id);
}
else if (mediaType.hasChildren) {
await this.recurseChildren(name, mediaType.id, true);
}
}
return null;
}
async getAllAtRoot() {
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media-type/root?skip=0&take=10000&foldersOnly=false');
}
async recurseChildren(name, id, toDelete) {
const items = await this.getChildren(id);
for (const child of items) {
if (child.name === name) {
if (!toDelete) {
if (child.isFolder) {
return await this.getFolder(child.id);
}
return await this.get(child.id);
}
if (child.isFolder) {
return await this.recurseDeleteChildren(child);
}
return await this.delete(child.id);
}
else if (child.hasChildren) {
return await this.recurseChildren(name, child.id, toDelete);
}
}
return false;
}
async recurseDeleteChildren(mediaTypeFolder) {
if (!mediaTypeFolder.hasChildren) {
return await this.deleteFolder(mediaTypeFolder.id);
}
const items = await this.getChildren(mediaTypeFolder.id);
for (const child of items) {
if (child.hasChildren) {
await this.recurseDeleteChildren(child);
}
else if (child.isFolder) {
await this.deleteFolder(child.id);
}
else {
await this.delete(child.id);
}
}
return await this.deleteFolder(mediaTypeFolder.id);
}
async getChildren(id) {
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`);
const items = await response.json();
return items.items;
}
async create(mediaType) {
if (mediaType == null) {
return;
}
const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type', mediaType);
return response.headers().location.split("/").pop();
}
async delete(id) {
if (id == null) {
return;
}
const response = await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);
return response.status();
}
async getByName(name) {
const rootMediaTypes = await this.getAllAtRoot();
const jsonMediaTypes = await rootMediaTypes.json();
for (const mediaType of jsonMediaTypes.items) {
if (mediaType.name === name) {
if (mediaType.isFolder) {
return this.getFolder(mediaType.id);
}
return this.get(mediaType.id);
}
else if (mediaType.isContainer || mediaType.hasChildren) {
const result = await this.recurseChildren(name, mediaType.id, false);
if (result) {
return result;
}
}
}
return false;
}
async doesNameExist(name) {
return await this.getByName(name);
}
async get(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/' + id);
const json = await response.json();
if (json !== null) {
return json;
}
return null;
}
// Folder
async getFolder(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);
return await response.json();
}
async deleteFolder(id) {
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + id);
}
async createFolder(name, parentId) {
const folder = {
"name": name,
"parent": parentId ? { "id": parentId } : null
};
const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder', folder);
return response.headers().location.split("/").pop();
}
async renameFolder(folderId, folderName) {
const folder = {
"name": folderName
};
return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media-type/folder/' + folderId, folder);
}
async createDefaultMediaType(mediaTypeName) {
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.build();
return await this.create(mediaType);
}
async createMediaTypeWithPropertyEditor(mediaTypeName, dataTypeName, dataTypeId, groupName = "GroupTest", isAllowAsRoot = false) {
const crypto = require('crypto');
const containerId = crypto.randomUUID();
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAllowedAsRoot(isAllowAsRoot)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.addContainer()
.withName(groupName)
.withId(containerId)
.withType("Group")
.done()
.addProperty()
.withContainerId(containerId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataTypeName))
.withName(dataTypeName)
.withDataTypeId(dataTypeId)
.done()
.build();
return await this.create(mediaType);
}
async createMediaTypeWithTwoPropertyEditors(mediaTypeName, dataTypeNameOne, dataTypeIdOne, dataTypeNameTwo, dataTypeIdTwo, groupName = "GroupTest") {
const crypto = require('crypto');
const containerId = crypto.randomUUID();
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.addContainer()
.withName(groupName)
.withId(containerId)
.withType("Group")
.done()
.addProperty()
.withContainerId(containerId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataTypeNameOne))
.withName(dataTypeNameOne)
.withDataTypeId(dataTypeIdOne)
.done()
.addProperty()
.withContainerId(containerId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataTypeNameTwo))
.withName(dataTypeNameTwo)
.withDataTypeId(dataTypeIdTwo)
.done()
.build();
return await this.create(mediaType);
}
async createMediaTypeWithPropertyEditorInTab(mediaTypeName, dataTypeName, dataTypeId, tabName, groupName = "TestGroup", varyByCulture = false) {
const crypto = require('crypto');
const tabId = crypto.randomUUID();
const groupId = crypto.randomUUID();
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.addContainer()
.withName(tabName)
.withId(tabId)
.withType("Tab")
.done()
.addContainer()
.withName(groupName)
.withId(groupId)
.withType("Group")
.withParentId(tabId)
.done()
.addProperty()
.withContainerId(groupId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataTypeName))
.withName(dataTypeName)
.withDataTypeId(dataTypeId)
.done()
.withVariesByCulture(varyByCulture)
.build();
return await this.create(mediaType);
}
async createMediaTypeWithTwoGroups(mediaTypeName, dataType, dataTypeId, groupNameOne, groupNameTwo) {
const crypto = require('crypto');
const groupOneId = crypto.randomUUID();
const groupTwoId = crypto.randomUUID();
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.addContainer()
.withName(groupNameOne)
.withId(groupOneId)
.withType("Group")
.withSortOrder(0)
.done()
.addContainer()
.withName(groupNameTwo)
.withId(groupTwoId)
.withType("Group")
.withSortOrder(1)
.done()
.addProperty()
.withContainerId(groupOneId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "One"))
.withName(dataType + "One")
.withDataTypeId(dataTypeId)
.done()
.addProperty()
.withContainerId(groupTwoId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "Two"))
.withName(dataType + "Two")
.withDataTypeId(dataTypeId)
.done()
.build();
return await this.create(mediaType);
}
async createMediaTypeWithTwoTabs(mediaTypeName, dataType, dataTypeId, tabNameOne, tabNameTwo) {
const crypto = require('crypto');
const tabOneId = crypto.randomUUID();
const tabTwoId = crypto.randomUUID();
const groupOneId = crypto.randomUUID();
const groupTwoId = crypto.randomUUID();
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.addContainer()
.withName(tabNameOne)
.withId(tabOneId)
.withType("Tab")
.withSortOrder(0)
.done()
.addContainer()
.withName(tabNameTwo)
.withId(tabTwoId)
.withType("Tab")
.withSortOrder(1)
.done()
.addContainer()
.withName("GroupTestOne")
.withId(groupOneId)
.withType("Group")
.withParentId(tabOneId)
.done()
.addProperty()
.withContainerId(groupOneId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "One"))
.withName(dataType + "One")
.withDataTypeId(dataTypeId)
.done()
.addContainer()
.withName("GroupTestTwo")
.withId(groupTwoId)
.withType("Group")
.withParentId(tabTwoId)
.done()
.addProperty()
.withContainerId(groupTwoId)
.withAlias(AliasHelper_1.AliasHelper.toAlias(dataType + "Two"))
.withName(dataType + "Two")
.withDataTypeId(dataTypeId)
.done()
.build();
return await this.create(mediaType);
}
async createMediaTypeWithAllowedChildNode(mediaTypeName, allowedChildNodeId) {
await this.ensureNameNotExists(mediaTypeName);
const mediaType = new json_models_builders_1.MediaTypeBuilder()
.withName(mediaTypeName)
.withAlias(AliasHelper_1.AliasHelper.toAlias(mediaTypeName))
.withAllowedAsRoot(true)
.addAllowedMediaType()
.withId(allowedChildNodeId)
.done()
.build();
return await this.create(mediaType);
}
async doesGroupContainCorrectPropertyEditor(mediaTypeName, dataTypeName, dataTypeId, groupName) {
const mediaType = await this.getByName(mediaTypeName);
const group = mediaType.containers.find(x => x.name === groupName);
// Check if group is defined
if (group) {
// Check if the media type properties include the specified property, and it belongs to the group
return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);
}
else {
// Group not found
return false;
}
}
async doesTabContainCorrectPropertyEditorInGroup(mediaTypeName, dataTypeName, dataTypeId, tabName, groupName) {
const mediaType = await this.getByName(mediaTypeName);
const tab = mediaType.containers.find(x => x.name === tabName);
// Check if tab is defined
if (tab) {
const group = mediaType.containers.find(x => x.name === groupName && x.parent.id === tab.id);
// Check if group is defined
if (group) {
// Check if the media type properties include the specified property, and it belongs to the group
return mediaType.properties.find(x => x.name === dataTypeName && x.dataType.id === dataTypeId && x.container.id === group.id);
}
else {
// Group not found
return false;
}
}
else {
// Tab not found
return false;
}
}
async doesMediaTypeGroupNameContainCorrectSortOrder(mediaTypeName, groupName, sortOrder) {
const mediaType = await this.getByName(mediaTypeName);
const group = mediaType.containers.find(x => x.name === groupName);
// Check if group is defined
if (group) {
return group.sortOrder === sortOrder;
}
else {
// Group not found
return false;
}
}
async doesMediaTypeTabNameContainCorrectSortOrder(mediaTypeName, tabName, sortOrder) {
const mediaType = await this.getByName(mediaTypeName);
const tab = mediaType.containers.find(x => x.name === tabName);
// Check if tab is defined
if (tab) {
return tab.sortOrder === sortOrder;
}
else {
// Tab not found
return false;
}
}
async doesTabContainerCorrectPropertyEditor(mediaTypeName, tabName, dataTypeId) {
const mediaType = await this.getByName(mediaTypeName);
const tab = mediaType.containers.find(x => x.name === tabName);
if (tab) {
return mediaType.properties.find(x => x.dataType.id === dataTypeId && x.container.id === tab.id);
}
else {
return false;
}
}
async doesMediaTypeContainAllowedChildNodeIds(mediaTypeName, allowedChildNodeIds) {
const mediaType = await this.getByName(mediaTypeName);
const allowedChildNodeIdsArray = mediaType.allowedMediaTypes.map(x => x.mediaType.id);
return allowedChildNodeIdsArray.every(id => allowedChildNodeIds.includes(id));
}
}
exports.MediaTypeApiHelper = MediaTypeApiHelper;
//# sourceMappingURL=MediaTypeApiHelper.js.map