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:
Andreas Zerbst
2024-04-29 07:07:15 +02:00
committed by GitHub
parent 16a1f42985
commit 9236d6a3b9
3 changed files with 290 additions and 18 deletions

View File

@@ -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"

View File

@@ -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",

View File

@@ -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();
});
});