UNPKG

@umbraco/playwright-testhelpers

Version:

Test helpers for making playwright tests for Umbraco solutions

267 lines 10.4 kB
"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); } return await this.delete(child.id); } else if (child.hasChildren) { return await this.recurseChildren(name, child.id, toDelete); } } 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) { await this.recurseChildren(name, media.id, false); } } return null; } async getMediaUrl(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.getMediaUrl(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 createDefaultMediaFile(mediaName) { const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryFile(); 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 createDefaultMediaFileAndParentId(mediaName, parentId) { const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryFile(); 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 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(); 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 createDefaultMediaWithArticle(mediaName) { const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryArticleFile(); 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 createDefaultMediaWithImageAndParentId(mediaName, parentId) { const temporaryFile = await this.api.temporaryFile.createDefaultTemporaryImageFile(); 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 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; } } exports.MediaApiHelper = MediaApiHelper; //# sourceMappingURL=MediaApiHelper.js.map