V14 QA added acceptance tests for the media section (#16039)
* Added media tests * Bumped versions * Bumped version of testhelpers * Cleaned up * Added additional media tests * Bumped version of playwright and testHelpers
This commit is contained in:
46
tests/Umbraco.Tests.AcceptanceTest/package-lock.json
generated
46
tests/Umbraco.Tests.AcceptanceTest/package-lock.json
generated
@@ -8,7 +8,7 @@
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@umbraco/json-models-builders": "^2.0.5",
|
||||
"@umbraco/playwright-testhelpers": "^2.0.0-beta.38",
|
||||
"@umbraco/playwright-testhelpers": "^2.0.0-beta.40",
|
||||
"camelize": "^1.0.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"faker": "^4.1.0",
|
||||
@@ -17,7 +17,7 @@
|
||||
"xhr2": "^0.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.38",
|
||||
"@playwright/test": "^1.43",
|
||||
"@types/node": "^20.9.0",
|
||||
"del": "^6.0.0",
|
||||
"ncp": "^2.0.0",
|
||||
@@ -87,12 +87,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@playwright/test": {
|
||||
"version": "1.40.1",
|
||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz",
|
||||
"integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==",
|
||||
"version": "1.43.1",
|
||||
"resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.43.1.tgz",
|
||||
"integrity": "sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"playwright": "1.40.1"
|
||||
"playwright": "1.43.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
@@ -146,9 +146,9 @@
|
||||
"integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg=="
|
||||
},
|
||||
"node_modules/@umbraco/playwright-testhelpers": {
|
||||
"version": "2.0.0-beta.38",
|
||||
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.38.tgz",
|
||||
"integrity": "sha512-OkPTSmohkC9+6A+qfwkUFYRD4guR5hPXWMHtsPtvLyolm7PXvH5gb3XF5n88Jsv+7YM+IqIxQHkXmPaVmgIyrA==",
|
||||
"version": "2.0.0-beta.40",
|
||||
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.40.tgz",
|
||||
"integrity": "sha512-rjGwdUv1itphmpmsqzy6OjAArZYhM/4bEd/RVb6536BeUNBCOYVqj/PvW9oRv8G2SRJH53XKiefro+btNXy/xw==",
|
||||
"dependencies": {
|
||||
"@umbraco/json-models-builders": "2.0.5",
|
||||
"camelize": "^1.0.0",
|
||||
@@ -425,6 +425,20 @@
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
||||
@@ -741,12 +755,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.40.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz",
|
||||
"integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==",
|
||||
"version": "1.43.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.43.1.tgz",
|
||||
"integrity": "sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"playwright-core": "1.40.1"
|
||||
"playwright-core": "1.43.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
@@ -759,9 +773,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.40.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz",
|
||||
"integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==",
|
||||
"version": "1.43.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.43.1.tgz",
|
||||
"integrity": "sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"createTest": "node createTest.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.38",
|
||||
"@playwright/test": "^1.43",
|
||||
"@types/node": "^20.9.0",
|
||||
"del": "^6.0.0",
|
||||
"ncp": "^2.0.0",
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@umbraco/json-models-builders": "^2.0.5",
|
||||
"@umbraco/playwright-testhelpers": "^2.0.0-beta.38",
|
||||
"@umbraco/playwright-testhelpers": "^2.0.0-beta.40",
|
||||
"camelize": "^1.0.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"faker": "^4.1.0",
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
|
||||
import {expect} from '@playwright/test';
|
||||
|
||||
test.describe('Media tests', () => {
|
||||
const mediaFileName = 'TestMediaFile';
|
||||
const folderName = 'TestFolder';
|
||||
const mediaTypeName = 'File';
|
||||
|
||||
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
|
||||
await umbracoApi.media.ensureNameNotExists(mediaFileName);
|
||||
await umbracoUi.goToBackOffice();
|
||||
});
|
||||
|
||||
test.afterEach(async ({umbracoApi}) => {
|
||||
await umbracoApi.media.ensureNameNotExists(mediaFileName);
|
||||
});
|
||||
|
||||
//TODO: It is currently possible to create an empty mediaFile, should not be possible
|
||||
test.skip('can not create a empty media file', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickCreateMediaItemButton();
|
||||
await umbracoUi.media.clickMediaTypeWithNameButton(mediaTypeName);
|
||||
await umbracoUi.media.enterMediaItemName(mediaFileName);
|
||||
await umbracoUi.media.clickSaveButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isErrorNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(mediaFileName, false);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can rename a media file', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const wrongMediaFileName = 'NotACorrectName';
|
||||
await umbracoApi.media.ensureNameNotExists(wrongMediaFileName);
|
||||
await umbracoApi.media.createDefaultMedia(wrongMediaFileName, mediaTypeName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Arrange
|
||||
await umbracoUi.media.clickLabelWithName(wrongMediaFileName, true);
|
||||
await umbracoUi.media.enterMediaItemName(mediaFileName);
|
||||
await umbracoUi.media.clickSaveButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isSuccessNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(mediaFileName);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeTruthy();
|
||||
});
|
||||
|
||||
// The File type is skipped because there are frontend issues with the mediaType
|
||||
const mediaFileTypes = [
|
||||
{fileName: 'Article', filePath: 'Article.pdf'},
|
||||
{fileName: 'Audio', filePath: 'Audio.mp3'},
|
||||
// {fileName: 'File', filePath: 'File.txt'},
|
||||
{fileName: 'Image', filePath: 'Umbraco.png'},
|
||||
{fileName: 'Vector Graphics (SVG)', filePath: 'VectorGraphics.svg'},
|
||||
{fileName: 'Video', filePath: 'Video.mp4'}
|
||||
];
|
||||
|
||||
for (const mediaFileType of mediaFileTypes) {
|
||||
test(`can create a media file with the ${mediaFileType.fileName} type`, async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.ensureNameNotExists(mediaFileType.fileName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickCreateMediaItemButton();
|
||||
await umbracoUi.media.clickMediaTypeWithNameButton(mediaFileType.fileName);
|
||||
await umbracoUi.media.enterMediaItemName(mediaFileType.fileName);
|
||||
await umbracoUi.media.changeFileTypeWithFileChooser('./fixtures/mediaLibrary/' + mediaFileType.filePath);
|
||||
await umbracoUi.media.clickSaveButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isSuccessNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(mediaFileType.fileName);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileType.fileName)).toBeTruthy();
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.ensureNameNotExists(mediaFileType.fileName);
|
||||
});
|
||||
}
|
||||
|
||||
test('can delete a media file', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
await umbracoApi.media.doesNameExist(mediaFileName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.deleteMediaItem(mediaFileName);
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isSuccessNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(mediaFileName, false);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can create a folder', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.ensureNameNotExists(folderName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickCreateMediaItemButton();
|
||||
await umbracoUi.media.clickMediaTypeWithNameButton('Folder');
|
||||
await umbracoUi.media.enterMediaItemName(folderName);
|
||||
await umbracoUi.media.clickSaveButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isSuccessNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(folderName);
|
||||
expect(await umbracoApi.media.doesNameExist(folderName)).toBeTruthy();
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.ensureNameNotExists(folderName);
|
||||
});
|
||||
|
||||
test('can delete a folder', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.ensureNameNotExists(folderName);
|
||||
await umbracoApi.media.createDefaultMediaFolder(folderName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
await umbracoApi.media.doesNameExist(folderName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickActionsMenuForName(folderName);
|
||||
await umbracoUi.media.clickDeleteButton();
|
||||
await umbracoUi.media.clickConfirmToDeleteButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isTreeItemVisible(folderName, false);
|
||||
expect(await umbracoApi.media.doesNameExist(folderName)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can create a folder in a folder', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const parentFolderName = 'ParentFolder';
|
||||
await umbracoApi.media.ensureNameNotExists(parentFolderName);
|
||||
await umbracoApi.media.createDefaultMediaFolder(parentFolderName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickActionsMenuForName(parentFolderName);
|
||||
await umbracoUi.media.clickCreateModalButton();
|
||||
await umbracoUi.media.clickExactLinkWithName('Folder');
|
||||
await umbracoUi.media.enterMediaItemName(folderName);
|
||||
await umbracoUi.media.clickSaveButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isSuccessNotificationVisible();
|
||||
await umbracoUi.media.isTreeItemVisible(parentFolderName);
|
||||
await umbracoUi.media.clickMediaCaretButtonForName(parentFolderName);
|
||||
await umbracoUi.media.isTreeItemVisible(folderName);
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.ensureNameNotExists(parentFolderName);
|
||||
});
|
||||
|
||||
test('can search for a media file', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
const secondMediaFile = 'SecondMediaFile';
|
||||
await umbracoApi.media.ensureNameNotExists(secondMediaFile);
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoApi.media.createDefaultMedia(secondMediaFile, mediaTypeName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.searchForMediaItemByName(mediaFileName);
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.doesMediaCardsContainAmount(1);
|
||||
await umbracoUi.media.doesMediaCardContainText(mediaFileName);
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.ensureNameNotExists(secondMediaFile);
|
||||
});
|
||||
|
||||
test('can trash a media item', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
await umbracoApi.media.doesNameExist(mediaFileName);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.clickActionsMenuForName(mediaFileName);
|
||||
await umbracoUi.media.clickTrashButton();
|
||||
await umbracoUi.media.clickConfirmTrashButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
|
||||
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeTruthy();
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
});
|
||||
|
||||
test('can restore a media item from the recycle bin', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoApi.media.trashMediaItem(mediaFileName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.reloadRecycleBin();
|
||||
await umbracoUi.media.restoreMediaItem(mediaFileName);
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName, false);
|
||||
await umbracoUi.media.isTreeItemVisible(mediaFileName);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeTruthy();
|
||||
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();
|
||||
|
||||
// Clean
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
});
|
||||
|
||||
// TODO: unskip when the frontend is ready. Currently you are unable to delete a media item from the recycle bin. You have to empty the recycle bin.
|
||||
test.skip('can delete a media item from the recycle bin', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoApi.media.trashMediaItem(mediaFileName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName);
|
||||
await umbracoUi.media.deleteMediaItem(mediaFileName);
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
|
||||
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();
|
||||
});
|
||||
|
||||
test('can empty the recycle bin', async ({umbracoApi, umbracoUi}) => {
|
||||
// Arrange
|
||||
await umbracoApi.media.emptyRecycleBin();
|
||||
await umbracoApi.media.createDefaultMedia(mediaFileName, mediaTypeName);
|
||||
await umbracoApi.media.trashMediaItem(mediaFileName);
|
||||
await umbracoUi.media.goToSection(ConstantHelper.sections.media);
|
||||
|
||||
// Act
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName);
|
||||
await umbracoUi.media.clickEmptyRecycleBinButton();
|
||||
await umbracoUi.media.clickConfirmEmptyRecycleBinButton();
|
||||
|
||||
// Assert
|
||||
await umbracoUi.media.isMediaItemVisibleInRecycleBin(mediaFileName, false);
|
||||
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
|
||||
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user