@umbraco/playwright-testhelpers
Version:
Test helpers for making playwright tests for Umbraco solutions
282 lines • 11.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MediaApiHelper = void 0;
const json_models_builders_1 = require("@umbraco/json-models-builders");
class MediaApiHelper {
api;
constructor(api) {
this.api = api;
}
async ensureNameNotExists(name) {
const rootMedia = await this.getAllAtRoot();
const jsonMedia = await rootMedia.json();
for (const media of jsonMedia.items) {
if (media.variants[0].name === name) {
if (media.hasChildren) {
return await this.recurseDeleteChildren(media);
}
return await this.delete(media.id);
}
else if (media.hasChildren) {
await this.recurseChildren(name, media.id, true);
}
}
return null;
}
async getAllAtRoot() {
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/root?skip=0&take=10000');
}
async recurseChildren(name, id, toDelete) {
const items = await this.getChildren(id);
for (const child of items) {
if (child.variants[0].name === name) {
if (!toDelete) {
return await this.get(child.id);
}
if (child.hasChildren) {
return await this.recurseDeleteChildren(child);
}
else {
return await this.delete(child.id);
}
}
if (child.hasChildren) {
const result = await this.recurseChildren(name, child.id, toDelete);
if (result) {
return result;
}
}
}
return false;
}
async recurseDeleteChildren(media) {
if (!media.hasChildren) {
return await this.delete(media.id);
}
const items = await this.getChildren(media.id);
for (const child of items) {
if (child.hasChildren) {
await this.recurseDeleteChildren(child);
}
else {
await this.delete(child.id);
}
}
return await this.delete(media.id);
}
async get(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);
return await response.json();
}
async delete(id) {
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/media/' + id);
}
async getChildren(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/tree/media/children?parentId=' + id + '&skip=0&take=10000');
const items = await response.json();
return items.items;
}
async create(media) {
if (media == null) {
return;
}
const response = await this.api.post(this.api.baseUrl + '/umbraco/management/api/v1/media', media);
return response.headers().location.split("/").pop();
}
async doesNameExist(name) {
return await this.getByName(name);
}
async getByName(name) {
const rootMedia = await this.getAllAtRoot();
const jsonMedia = await rootMedia.json();
for (const media of jsonMedia.items) {
if (media.variants[0].name === name) {
return await this.get(media.id);
}
else if (media.hasChildren) {
const result = await this.recurseChildren(name, media.id, false);
if (result) {
return result;
}
}
}
return null;
}
async getFullMediaUrl(id) {
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/media/urls?id=' + id);
const urls = await response.json();
return urls[0].urlInfos[0].url;
}
async getRecycleBinItems() {
return await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media/root?skip=0&take=10000');
}
async emptyRecycleBin() {
return await this.api.delete(this.api.baseUrl + '/umbraco/management/api/v1/recycle-bin/media');
}
async doesMediaItemExistInRecycleBin(mediaItemName) {
const recycleBin = await this.getRecycleBinItems();
const jsonRecycleBin = await recycleBin.json();
for (const media of jsonRecycleBin.items) {
if (media.variants[0].name === mediaItemName) {
return true;
}
}
return false;
}
async trashMediaItem(mediaItemName) {
const media = await this.getByName(mediaItemName);
return await this.api.put(this.api.baseUrl + '/umbraco/management/api/v1/media/' + media.id + '/move-to-recycle-bin');
}
async getMediaPathByName(name) {
const media = await this.getByName(name);
const mediaUrl = await this.getMediaUrlWithoutBaseUrl(media.id);
if (media && mediaUrl > 0) {
// Gets the random mediaPath for the media
const mediaPath = mediaUrl.split('/media/').pop()?.split('/')[0];
// Gets the file name from the mediaUrl
const fileName = mediaUrl.split('/').pop();
return {
mediaPath: mediaPath,
fileName: fileName
};
}
return null;
}
async getMediaUrlWithoutBaseUrl(id) {
const mediaUrl = await this.getFullMediaUrl(id);
if (mediaUrl != null) {
return mediaUrl.split(this.api.baseUrl).pop();
}
return null;
}
async createDefaultMediaFile(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaFileAndParentId(mediaName, parentId) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryFile();
return await this.createDefaultMediaItemWithParentId(mediaName, parentId, temporaryFile);
}
async createDefaultMediaFolder(mediaFolderName) {
const mediaType = await this.api.mediaType.getByName('Folder');
await this.ensureNameNotExists(mediaFolderName);
const media = new json_models_builders_1.MediaBuilder()
.withMediaTypeId(mediaType.id)
.addVariant()
.withName(mediaFolderName)
.done()
.build();
return await this.create(media);
}
async createDefaultMediaFolderAndParentId(mediaName, parentId) {
const mediaType = await this.api.mediaType.getByName('Folder');
await this.ensureNameNotExists(mediaName);
const media = new json_models_builders_1.MediaBuilder()
.withMediaTypeId(mediaType.id)
.withParentId(parentId)
.addVariant()
.withName(mediaName)
.done()
.build();
return await this.create(media);
}
async createDefaultMediaWithImage(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryImageFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaWithArticle(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryArticleFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaWithImageAndParentId(mediaName, parentId) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryImageFile();
return await this.createDefaultMediaItemWithParentId(mediaName, parentId, temporaryFile);
}
async getAllMediaNames(orderBy = 'updateDate', orderDirection = 'Descending') {
let mediaNames = [];
const response = await this.api.get(this.api.baseUrl + '/umbraco/management/api/v1/collection/media?id=&dataTypeId=&orderBy=' + orderBy + '&orderDirection=' + orderDirection + '&skip=0&take=100');
const mediaItems = await response.json();
for (const media of mediaItems.items) {
mediaNames.push(media.variants[0].name);
}
return mediaNames;
}
async doesMediaItemHaveChildName(mediaId, childName) {
const childrenItems = await this.getChildren(mediaId);
for (const child of childrenItems) {
if (child.variants[0].name === childName) {
return true;
}
}
return false;
}
async createDefaultMediaWithVideo(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryVideoFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaWithVideoAndParentId(mediaName, parentId) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryVideoFile();
return await this.createDefaultMediaItemWithParentId(mediaName, parentId, temporaryFile);
}
async createDefaultMediaWithAudio(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryAudioFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaWithSVG(mediaName) {
const temporaryFile = await this.api.temporaryFile.createDefaultTemporarySVGFile();
return await this.createDefaultMediaItem(mediaName, temporaryFile);
}
async createDefaultMediaItem(mediaName, temporaryFile) {
await this.ensureNameNotExists(mediaName);
const media = new json_models_builders_1.MediaBuilder()
.withMediaTypeId(temporaryFile.mediaTypeId)
.addVariant()
.withName(mediaName)
.done()
.addValue()
.withAlias('umbracoFile')
.addValueData()
.withTemporaryFileId(temporaryFile.temporaryFileId)
.done()
.done()
.build();
return await this.create(media);
}
async createDefaultMediaItemWithParentId(mediaName, parentId, temporaryFile) {
await this.ensureNameNotExists(mediaName);
const media = new json_models_builders_1.MediaBuilder()
.withMediaTypeId(temporaryFile.mediaTypeId)
.withParentId(parentId)
.addVariant()
.withName(mediaName)
.done()
.addValue()
.withAlias('umbracoFile')
.addValueData()
.withTemporaryFileId(temporaryFile.temporaryFileId)
.done()
.done()
.build();
return await this.create(media);
}
async createDefaultMediaWithTextstring(mediaName, mediaTypeName, textValue, dataTypeName) {
await this.ensureNameNotExists(mediaName);
await this.api.mediaType.ensureNameNotExists(mediaTypeName);
const dataTypeData = await this.api.dataType.getByName(dataTypeName);
const mediaTypeId = await this.api.mediaType.createMediaTypeWithPropertyEditor(mediaTypeName, dataTypeName, dataTypeData.id, 'Test Group', true) || '';
const media = new json_models_builders_1.MediaBuilder()
.withMediaTypeId(mediaTypeId)
.addVariant()
.withName(mediaName)
.done()
.addValue()
.withAlias(json_models_builders_1.AliasHelper.toAlias(dataTypeName))
.withEntityType('media-property-value')
.withValue(textValue)
.done()
.build();
return await this.create(media);
}
}
exports.MediaApiHelper = MediaApiHelper;
//# sourceMappingURL=MediaApiHelper.js.map