Skip to content

Commit

Permalink
Added ui tests for Dictionary
Browse files Browse the repository at this point in the history
  • Loading branch information
nhudinh0309 committed Dec 19, 2023
1 parent c4bea8a commit 358b465
Showing 1 changed file with 168 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
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.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.clickCreateDictionaryItemButton();
await umbracoUi.dictionary.enterDictionaryName(dictionaryName);
await umbracoUi.dictionary.clickSaveButton();

// Assert
expect(await umbracoApi.dictionary.doesNameExist(dictionaryName)).toBeTruthy();
await umbracoUi.isSuccessNotificationVisible();
// TODO: when frontend is ready, verify the new dictionary item displays in tree and in list
// await umbracoUi.goToSection(ConstantHelper.sections.dictionary);
// expect(await umbracoUi.dictionary.isDictionaryListHasText(dictionaryName)).toBeTruthy();
});

test('can delete a dictionary item', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
await umbracoUi.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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
});

Check warning on line 49 in tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Dictionary/Dictionary.spec.ts

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (v14/dev)

❌ New issue: Code Duplication

The module contains 5 functions with similar structure: 'Dictionary tests'.'can delete a dictionary item','Dictionary tests'.'can export a dictionary item with descendants','Dictionary tests'.'can export a dictionary item','Dictionary tests'.'can import a dictionary item with descendants' and 1 more functions. Avoid duplicated, aka copy-pasted, code inside the module. More duplication lowers the code health.

test('can create a dictionary item in a dictionary', async ({umbracoApi, umbracoUi}) => {
// Arrange
let parentDictionaryId;
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoUi.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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', async ({umbracoApi, umbracoUi}) => {
// Arrange
let parentDictionaryId;
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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', async ({umbracoApi, umbracoUi}) => {
// Arrange
const udtFilePath = './fixtures/dictionary/TestDictionaryWithDescendants.udt';
let parentDictionaryId;
await umbracoApi.dictionary.ensureNameNotExists(parentDictionaryName);
parentDictionaryId = await umbracoApi.dictionary.create(parentDictionaryName);
await umbracoApi.dictionary.create(dictionaryName, [], parentDictionaryId);
await umbracoUi.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.openActionsMenuForName(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('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.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter(dictionaryName);

// Assert
expect (await umbracoUi.dictionary.isDictionaryListHasText(dictionaryName)).toBeTruthy();
});

test('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.goToSection(ConstantHelper.sections.dictionary);

//Act
await umbracoUi.dictionary.enterSearchKeywordAndPressEnter('xyz');

// Assert
await expect(umbracoUi.dictionary.isEmptySearchResultMessageDisplay(emptySearchResultMessage)).toBeTruthy();
});
});

0 comments on commit 358b465

Please sign in to comment.