V14 QA Added missing acceptance tests for Dictionary (#16241)

* Changed name from Dictionary to Translation

* Removed old Dictionary

* Adding missing tests for Dictionary

* Added smoke tag to test

* Bumped version of test helper

* Add comments

* Fixed comments

* Removed smoke tag
This commit is contained in:
Nhu Dinh
2024-05-14 13:45:47 +07:00
committed by GitHub
parent 22c0c250e0
commit eda4a6cc55
4 changed files with 199 additions and 169 deletions

View File

@@ -8,7 +8,7 @@
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^2.0.5",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.40",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.43",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",
@@ -146,9 +146,9 @@
"integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg=="
},
"node_modules/@umbraco/playwright-testhelpers": {
"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==",
"version": "2.0.0-beta.43",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.43.tgz",
"integrity": "sha512-rYXMPf2E2CBLt2iYXrMHNNqQtQioyw14etaWrsu5Ky1x24RAB38LtuGrEiVmppdYBw9Pnmc853PSPsCKlzd8Iw==",
"dependencies": {
"@umbraco/json-models-builders": "2.0.5",
"camelize": "^1.0.0",

View File

@@ -22,7 +22,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.5",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.40",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.43",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",

View File

@@ -1,164 +0,0 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Dictionary tests', () => {
const dictionaryName = 'TestDictionaryItem';
const parentDictionaryName = 'TestParentDictionary';
test.beforeEach(async ({umbracoUi}) => {
await umbracoUi.goToBackOffice();
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
});
test('can create a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickCreateLink();
await umbracoUi.dictionary.enterDictionaryName(dictionaryName);
await umbracoUi.dictionary.clickSaveButton();
// Assert
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeTruthy();
await umbracoUi.dictionary.isSuccessNotificationVisible();
// TODO: when frontend is ready, verify the new dictionary item displays in tree and in list
// await umbracoUi.goToSection(ConstantHelper.sections.dictionary);
// await umbracoUi.dictionary.isDictionaryListHasText(dictionaryName);
});
test('can delete a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.deleteDictionary();
// Assert
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeFalsy();
// TODO: when frontend is ready, verify the new dictionary item is NOT displayed in list view and in tree
});
test.skip('can create a dictionary item in a dictionary @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.dictionary.clickCreateMenu();
await umbracoUi.dictionary.enterDictionaryName(dictionaryName);
await umbracoUi.dictionary.clickSaveButton();
// Assert
const dictionaryChildren = await umbracoApi.dictionary.getChildren(parentDictionaryId);
await expect(dictionaryChildren[0].name).toEqual(dictionaryName);
// TODO: when frontend is ready, verify the notification displays
});
// Remove skip when export function works
test.skip('can export a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickExportMenu();
await umbracoUi.dictionary.exportDictionary(false);
// Assert
// TODO: when frontend is ready, verify the notification displays
});
// Remove skip when export function works
test.skip('can export a dictionary item with descendants @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickExportMenu();
await umbracoUi.dictionary.exportDictionary(true);
// Assert
// TODO: when frontend is ready, verify the notification displays
});
// Remove skip when import function works
test.skip('can import a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
const udtFilePath = './fixtures/dictionary/TestSingleDictionary.udt';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickImportMenu();
await umbracoUi.dictionary.importDictionary(udtFilePath);
// Assert
// TODO: when frontend is ready, verify the notification displays
// TODO: when frontend is ready, verify the imported dictionary items displays
});
// Remove skip when import function works
test.skip('can import a dictionary item with descendants @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
const udtFilePath = './fixtures/dictionary/TestDictionaryWithDescendants.udt';
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.dictionary.clickImportMenu();
await umbracoUi.dictionary.importDictionary(udtFilePath);
// Assert
// TODO: when frontend is ready, verify the notification displays
// TODO: when frontend is ready, verify the imported dictionary items displays
});
test.skip('can search a dictionary item in list when have results', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter(dictionaryName);
// Assert
expect(await umbracoUi.dictionary.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
});
test.skip('can search a dictionary item in list when have no results', async ({umbracoApi, umbracoUi}) => {
// Arrange
const emptySearchResultMessage = 'No Dictionary items to choose from';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.dictionary.goToSection(ConstantHelper.sections.dictionary);
// Act
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter('xyz');
// Assert
await umbracoUi.dictionary.isSearchResultMessageDisplayEmpty(emptySearchResultMessage);
});
});

View File

@@ -0,0 +1,194 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Translation tests', () => {
const dictionaryName = 'TestDictionaryItem';
const parentDictionaryName = 'TestParentDictionary';
test.beforeEach(async ({umbracoUi}) => {
await umbracoUi.goToBackOffice();
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
});
test('can create a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickCreateLink();
await umbracoUi.translation.enterDictionaryName(dictionaryName);
await umbracoUi.translation.clickSaveButton();
// Assert
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeTruthy();
await umbracoUi.translation.isSuccessNotificationVisible();
await umbracoUi.translation.clickLeftArrowButton();
// Verify the dictionary item displays in the tree and in the list
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName);
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
});
test('can delete a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.deleteDictionary();
// Assert
await umbracoUi.translation.isSuccessNotificationVisible();
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeFalsy();
// Verify the dictionary item does not display in the tree
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName, false);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the dictionary item does not display in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeFalsy();
});
test('can create a dictionary item in a dictionary @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.translation.clickCreateDictionaryItemButton();
await umbracoUi.translation.enterDictionaryName(dictionaryName);
await umbracoUi.translation.clickSaveButton();
// Assert
await umbracoUi.translation.isSuccessNotificationVisible();
const dictionaryChildren = await umbracoApi.dictionary.getChildren(parentDictionaryId);
expect(dictionaryChildren[0].name).toEqual(dictionaryName);
await umbracoUi.translation.clickLeftArrowButton();
// Verify the new dictionary item displays in the list
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
// Verify the new dictionary item displays in the tree
await umbracoUi.translation.reloadTree(parentDictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(dictionaryName);
// Clean
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
});
test('can export a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
const dictionaryId = await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickExportMenu();
const exportData = await umbracoUi.translation.exportDictionary(false);
// Assert
expect(exportData).toEqual(dictionaryId + '.udt');
});
test('can export a dictionary item with descendants @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
let parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(parentDictionaryName);
await umbracoUi.translation.clickExportMenu();
const exportData = await umbracoUi.translation.exportDictionary(true);
// Assert
expect(exportData).toEqual(parentDictionaryId + '.udt');
// Clean
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
});
test('can import a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
const udtFilePath = './fixtures/dictionary/TestSingleDictionary.udt';
// This variable must not be changed as it is declared in the file TestDictionary.udt
const importDictionaryName = 'TestImportDictionary';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickImportMenu();
await umbracoUi.translation.importDictionary(udtFilePath);
// Assert
// Verify the imported dictionary item displays in the tree
await umbracoUi.translation.reloadTree(dictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importDictionaryName);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the imported dictionary item displays in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importDictionaryName)).toBeTruthy();
});
test('can import a dictionary item with descendants @smoke', async ({umbracoApi, umbracoUi}) => {
// Arrange
const udtFilePath = './fixtures/dictionary/TestDictionaryWithDescendants.udt';
// This variable must not be changed as it is declared in the file TestDictionaryWithDescendants.udt
const importParentDictionaryName = 'TestImportParent';
const importChildDictionaryName = 'TestImportChild';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.clickActionsMenuForDictionary(dictionaryName);
await umbracoUi.translation.clickImportMenu();
await umbracoUi.translation.importDictionary(udtFilePath);
// Assert
// Verify the imported dictionary items display in the tree
await umbracoUi.translation.reloadTree(dictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importParentDictionaryName);
await umbracoUi.translation.reloadTree(importParentDictionaryName);
await umbracoUi.translation.isDictionaryTreeItemVisible(importChildDictionaryName);
// TODO: Uncomment this when the front-end is ready. Currently the dictionary list is not updated immediately.
// Verify the imported dictionary items display in the list
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importParentDictionaryName)).toBeTruthy();
//expect(await umbracoUi.translation.doesDictionaryListHaveText(importChildDictionaryName)).toBeTruthy();
});
// Skip this test as the search function is removed
test.skip('can search a dictionary item in list when have results', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.enterSearchKeywordAndPressEnter(dictionaryName);
// Assert
expect(await umbracoUi.translation.doesDictionaryListHaveText(dictionaryName)).toBeTruthy();
});
// Skip this test as the search function is removed
test.skip('can search a dictionary item in list when have no results', async ({umbracoApi, umbracoUi}) => {
// Arrange
const emptySearchResultMessage = 'No Dictionary items to choose from';
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.translation.goToSection(ConstantHelper.sections.translation);
// Act
await umbracoUi.translation.enterSearchKeywordAndPressEnter('xyz');
// Assert
await umbracoUi.translation.isSearchResultMessageDisplayEmpty(emptySearchResultMessage);
});
});