V14 Added missing tests and fixed failed tests for Partial View (#15635)

* Added beforeEach() and remove .skip for the passed tests

* Fixed failed tests and add the tests to cover query builder

* Bumped version of test helper

* Updated api tests for Partial View as the endpoints are changed

* Fixed failed tests and remove .skip tests

* Updated test helper version and api tests for Partial View as the name of method changes

* Changed createButton() to createThreeDotsButton()

* Bumped version

* Bumped version of test helper

* Fixed comments

* Added more waits

* Splited tests out

* Changed verification method

* Added debug

* Removed console.log() and increased wait time

* Changed expect from toEqual to toBeTruthy

* Changed to use "" instead of ''

* more changes

* Updated the expectedPartialViewContent

* Changes

* Removed

* Fixed test

* Update PartialView.spec.ts

* Removed .skip

* Added code to detect os platform

* Updated expectedPartialViewContent varibale

* Added waits

* Bumped version of test helper

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
This commit is contained in:
Nhu Dinh
2024-02-23 18:41:35 +07:00
committed by GitHub
parent 7b80d59c36
commit 203b003e41
7 changed files with 338 additions and 237 deletions

View File

@@ -8,7 +8,7 @@
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.18",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.20",
"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.18",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.18.tgz",
"integrity": "sha512-krL/FwgisdmIJRy1ThaC/BOqeebJj9sCtDDbcy2h0B8Tmz4NhYdjdEMh3X+IvJDnfHX+rS2DiYa97cHyvVMhHA==",
"version": "2.0.0-beta.20",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.20.tgz",
"integrity": "sha512-XFkKr1TyEp2l1Nb9hlwODkYK1PAzsdHmtn6yRPu72gWhN5AO8/JTeKWrfhJZIgXPYCo4AhS2Rn9r/1PiXreKNw==",
"dependencies": {
"@umbraco/json-models-builders": "2.0.1",
"camelize": "^1.0.0",

View File

@@ -21,7 +21,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.1 ",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.18",
"@umbraco/playwright-testhelpers": "^2.0.0-beta.20",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"faker": "^4.1.0",

View File

@@ -2,7 +2,7 @@ import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Partial View tests', () => {
let partialViewPath = "";
let partialViewPath = '';
const partialViewName = 'partialViewName.cshtml';
test.beforeEach(async ({umbracoApi}) => {
@@ -25,17 +25,28 @@ test.describe('Partial View tests', () => {
// Arrange
const newContent = 'Howdy';
partialViewPath = await umbracoApi.partialView.create(partialViewName, 'test');
const partialView = await umbracoApi.partialView.get(partialViewPath);
partialView.content = newContent;
// Act
await umbracoApi.partialView.update(partialView);
await umbracoApi.partialView.updateContent(partialViewPath, newContent);
// Assert
const updatedPartialView = await umbracoApi.partialView.get(partialViewPath);
expect(updatedPartialView.content).toEqual(newContent);
});
test('can rename a partial view', async ({umbracoApi}) => {
// Arrange
const wrongPartialViewName = 'wrongPartialViewName.cshtml';
const wrongPartialViewPath = await umbracoApi.partialView.create(wrongPartialViewName, 'test');
// Act
const updatedPartialViewPath = await umbracoApi.partialView.updateName(wrongPartialViewPath, partialViewName);
// Assert
const updatedPartialView = await umbracoApi.partialView.get(updatedPartialViewPath);
expect(updatedPartialView.name).toEqual(partialViewName);
});
test('can delete a partial view', async ({umbracoApi}) => {
// Arrange
partialViewPath = await umbracoApi.partialView.create(partialViewName, 'test');

View File

@@ -2,6 +2,7 @@ import {test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Partial View Folder tests', () => {
let partialViewFolderPath = '';
const partialViewFolderName = 'partialViewFolder';
test.beforeEach(async ({umbracoApi}) => {
@@ -14,48 +15,47 @@ test.describe('Partial View Folder tests', () => {
test('can create a partial view folder', async ({umbracoApi}) => {
// Act
await umbracoApi.partialView.createFolder(partialViewFolderName);
partialViewFolderPath = await umbracoApi.partialView.createFolder(partialViewFolderName);
// Assert
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderName)).toBeTruthy();
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderPath)).toBeTruthy();
});
test('can delete a partial view folder', async ({umbracoApi}) => {
// Arrange
await umbracoApi.partialView.createFolder(partialViewFolderName);
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderName)).toBeTruthy();
partialViewFolderPath = await umbracoApi.partialView.createFolder(partialViewFolderName);
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderPath)).toBeTruthy();
// Act
await umbracoApi.partialView.deleteFolder(partialViewFolderName);
await umbracoApi.partialView.deleteFolder(partialViewFolderPath);
// Assert
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderName)).toBeFalsy();
expect(await umbracoApi.partialView.doesFolderExist(partialViewFolderPath)).toBeFalsy();
});
test('can add a partial view folder in another', async ({umbracoApi}) => {
// Arrange
const childFolderName = 'childFolder';
await umbracoApi.partialView.createFolder(partialViewFolderName);
partialViewFolderPath = await umbracoApi.partialView.createFolder(partialViewFolderName);
// Act
await umbracoApi.partialView.createFolder(childFolderName, partialViewFolderName);
const children = await umbracoApi.partialView.getChildren(partialViewFolderName);
await umbracoApi.partialView.createFolder(childFolderName, partialViewFolderPath);
// Assert
expect(children[0].name).toEqual(childFolderName);
const childrenData = await umbracoApi.partialView.getChildren(partialViewFolderPath);
expect(childrenData[0].name).toEqual(childFolderName);
});
test('can add a partial view folder in a folder in another folder', async ({umbracoApi}) => {
// Arrange
const childFolderName = 'childFolder';
const childOfChildFolderName = 'childOfChildFolder';
const childFolderPath = partialViewFolderName + '/' + childFolderName;
// Creates parent folder
await umbracoApi.partialView.createFolder(partialViewFolderName);
partialViewFolderPath = await umbracoApi.partialView.createFolder(partialViewFolderName);
// Creates child folder in parent folder
await umbracoApi.partialView.createFolder(childFolderName, partialViewFolderName);
const childFolderPath = await umbracoApi.partialView.createFolder(childFolderName, partialViewFolderPath);
// Act
// Creates childOfChild folder in child folder
@@ -63,9 +63,9 @@ test.describe('Partial View Folder tests', () => {
// Assert
// Checks if the partial views folder are in the correct folders
const childOfParent = await umbracoApi.partialView.getChildren(partialViewFolderName);
const childOfChild = await umbracoApi.partialView.getChildren(childFolderPath);
expect(childOfParent[0].name).toEqual(childFolderName);
expect(childOfChild[0].name).toEqual(childOfChildFolderName);
const childOfParentData = await umbracoApi.partialView.getChildren(partialViewFolderPath);
expect(childOfParentData[0].name).toEqual(childFolderName);
const childOfChildData = await umbracoApi.partialView.getChildren(childFolderPath);
expect(childOfChildData[0].name).toEqual(childOfChildFolderName);
});
});

View File

@@ -0,0 +1,228 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Partial View tests', () => {
const partialViewName = 'TestPartialView';
const partialViewFileName = partialViewName + '.cshtml';
const dictionaryName = 'TestDictionaryPartialView';
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoUi.goToBackOffice();
await umbracoUi.partialView.goToSection(ConstantHelper.sections.settings);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
});
test('can create an empty partial view', async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.clickCreateThreeDotsButton();
await umbracoUi.partialView.clickNewEmptyPartialViewButton();
await umbracoUi.partialView.enterPartialViewName(partialViewName);
await umbracoUi.partialView.clickSaveButton();
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesNameExist(partialViewFileName)).toBeTruthy();
// Verify the new partial view is displayed under the Partial Views section
await umbracoUi.partialView.clickRootFolderCaretButton();
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).toBeVisible();
})
test('can create a partial view from snippet', async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedPartialViewContent = '@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\n@using Umbraco.Cms.Core.Routing\n@using Umbraco.Extensions\n\n@inject IPublishedUrlProvider PublishedUrlProvider\n@*\n This snippet makes a breadcrumb of parents using an unordered HTML list.\n\n How it works:\n - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back\n - Finally it outputs the name of the current page (without a link)\n*@\n\n@{ var selection = Model.Ancestors().ToArray(); }\n\n@if (selection?.Length > 0)\n{\n <ul class=\"breadcrumb\">\n @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@\n @foreach (var item in selection.OrderBy(x => x.Level))\n {\n <li><a href=\"@item.Url(PublishedUrlProvider)\">@item.Name</a> <span class=\"divider\">/</span></li>\n }\n\n @* Display the current page as the last item in the list *@\n <li class=\"active\">@Model.Name</li>\n </ul>\n}';
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.clickCreateThreeDotsButton();
await umbracoUi.partialView.clickNewPartialViewFromSnippetButton();
await umbracoUi.partialView.clickBreadcrumbButton();
await umbracoUi.partialView.enterPartialViewName(partialViewName);
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.clickSaveButton();
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
const partialViewData = await umbracoApi.partialView.getByName(partialViewFileName);
expect(partialViewData.content.length).toBe(expectedPartialViewContent.length);
expect(partialViewData.content).toBe(expectedPartialViewContent);
// Verify the new partial view is displayed under the Partial Views section
await umbracoUi.partialView.clickRootFolderCaretButton();
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).toBeVisible();
});
test('can update a partial view name', async ({umbracoApi, umbracoUi}) => {
// Arrange
const wrongPartialViewName = 'WrongName';
const wrongPartialViewFileName = wrongPartialViewName + '.cshtml';
await umbracoApi.partialView.ensureNameNotExists(wrongPartialViewFileName);
await umbracoApi.partialView.create(wrongPartialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(wrongPartialViewFileName)).toBeTruthy();
//Act
await umbracoUi.partialView.clickRootFolderCaretButton();
await umbracoUi.partialView.clickActionsMenuForPartialView(wrongPartialViewFileName);
await umbracoUi.partialView.rename(partialViewName);
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesNameExist(partialViewFileName)).toBeTruthy();
expect(await umbracoApi.partialView.doesNameExist(wrongPartialViewFileName)).toBeFalsy();
// Verify the old partial view is NOT displayed under the Partial Views section
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(wrongPartialViewFileName)).not.toBeVisible();
// Verify the new partial view is displayed under the Partial Views section
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).toBeVisible();
});
test('can update a partial view content', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedPartialViewContent = '@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n' +
'@{\r\n' +
'\tLayout = null;\r\n' +
'}\r\n' +
'<p>AcceptanceTests</p>';
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
//Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.enterPartialViewContent(updatedPartialViewContent);
await umbracoUi.partialView.clickSaveButton();
// Assert
const updatedPartialView = await umbracoApi.partialView.getByName(partialViewFileName);
expect(updatedPartialView.content).toBe(updatedPartialViewContent);
});
test('can use query builder with Order By statement for a partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
const propertyAliasValue = 'UpdateDate';
const isAscending = false;
const expectedCode = 'Umbraco.ContentAtRoot().FirstOrDefault()\r\n' +
' .Children()\r\n' +
' .Where(x => x.IsVisible())\r\n' +
' .OrderByDescending(x => x.' + propertyAliasValue + ')';
const expectedTemplateContent = '\r\n' +
'@{\r\n' +
'\tvar selection = ' + expectedCode + ';\r\n' +
'}\r\n' +
'<ul>\r\n' +
'\t@foreach (var item in selection)\r\n' +
'\t{\r\n' +
'\t\t<li>\r\n' +
'\t\t\t<a href="@item.Url()">@item.Name()</a>\r\n' +
'\t\t</li>\r\n' +
'\t}\r\n' +
'</ul>\r\n' +
'\r\n' +
'@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n';
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
// Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
// Wait for the partial view to open
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.addQueryBuilderWithOrderByStatement(propertyAliasValue, isAscending);
// Verify that the code is shown
await umbracoUi.partialView.isQueryBuilderCodeShown(expectedCode);
await umbracoUi.partialView.clickSubmitButton();
await umbracoUi.partialView.clickSaveButton();
// Assert
const updatedPartialView = await umbracoApi.partialView.getByName(partialViewFileName);
expect(updatedPartialView.content).toBe(expectedTemplateContent);
});
test.skip('can use query builder with Where statement for a partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
const propertyAliasValue = 'Name';
const operatorValue = 'is';
const constrainValue = 'Test Content';
const expectedCode = 'Umbraco.ContentAtRoot().FirstOrDefault()\r\n' +
' .Children()\r\n' +
' .Where(x => (x.' + propertyAliasValue + ' == "' + constrainValue + '"))\r\n' +
' .Where(x => x.IsVisible())';
const expectedTemplateContent = '\r\n' +
'@{\r\n' +
'\tvar selection = ' + expectedCode + ';\r\n' +
'}\r\n' +
'<ul>\r\n' +
'\t@foreach (var item in selection)\r\n' +
'\t{\r\n' +
'\t\t<li>\r\n' +
'\t\t\t<a href="@item.Url()">@item.Name()</a>\r\n' +
'\t\t</li>\r\n' +
'\t}\r\n' +
'</ul>\r\n' +
'\r\n' +
'@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n';
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
// Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
// Wait for the partial view to open
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.addQueryBuilderWithWhereStatement(propertyAliasValue, operatorValue, constrainValue);
// Verify that the code is shown
await umbracoUi.partialView.isQueryBuilderCodeShown(expectedCode);
await umbracoUi.partialView.clickSubmitButton();
await umbracoUi.partialView.clickSaveButton();
// Assert
const updatedPartialView = await umbracoApi.partialView.getByName(partialViewFileName);
expect(updatedPartialView.content).toBe(expectedTemplateContent);
});
test('can insert dictionaryItem into a partial view', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
const partialViewContent = '@Umbraco.GetDictionaryValue("' + dictionaryName + '")@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n';
// Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
// Wait for the partial view to open
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.insertDictionaryByName(dictionaryName);
await umbracoUi.partialView.clickSaveButton();
// Assert
const partialViewData = await umbracoApi.partialView.getByName(partialViewFileName);
expect(partialViewData.content).toBe(partialViewContent);
});
test('can delete a partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
//Act
await umbracoUi.partialView.clickRootFolderCaretButton();
await umbracoUi.partialView.clickActionsMenuForPartialView(partialViewFileName);
await umbracoUi.partialView.deletePartialView();
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeFalsy();
// Verify the partial view is NOT displayed under the Partial Views section
await umbracoUi.partialView.clickRootFolderCaretButton();
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).not.toBeVisible();
});
});

View File

@@ -0,0 +1,73 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Partial View Folder tests', () => {
const partialViewName = 'TestPartialView';
const partialViewFileName = partialViewName + '.cshtml';
const folderName = 'TestFolder';
test.beforeEach(async ({umbracoUi, umbracoApi}) => {
await umbracoApi.partialView.ensureNameNotExists(folderName);
await umbracoUi.goToBackOffice();
await umbracoUi.partialView.goToSection(ConstantHelper.sections.settings);
});
test.afterEach(async ({umbracoApi}) => {
await umbracoApi.partialView.ensureNameNotExists(folderName);
});
test('can create a folder', async ({umbracoApi, umbracoUi}) => {
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.createFolder(folderName);
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesFolderExist(folderName)).toBeTruthy();
// Verify the partial view folder is displayed under the Partial Views section
await umbracoUi.partialView.clickRootFolderCaretButton();
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(folderName)).toBeVisible();
});
test('can delete a folder', async ({umbracoApi, umbracoUi}) => {
//Arrange
await umbracoApi.partialView.createFolder(folderName);
expect(await umbracoApi.partialView.doesFolderExist(folderName)).toBeTruthy();
// Act
await umbracoUi.partialView.clickRootFolderCaretButton();
await umbracoUi.partialView.clickActionsMenuForPartialView(folderName);
await umbracoUi.partialView.deletePartialView();
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
expect(await umbracoApi.partialView.doesFolderExist(folderName)).toBeFalsy();
// Verify the partial view folder is NOT displayed under the Partial Views section
await umbracoUi.partialView.clickRootFolderCaretButton();
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(folderName)).not.toBeVisible();
});
test('can place a partial view into folder', async ({umbracoApi, umbracoUi}) => {
//Arrange
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
const folderPath = await umbracoApi.partialView.createFolder(folderName);
expect(await umbracoApi.partialView.doesFolderExist(folderName)).toBeTruthy();
// Act
await umbracoUi.partialView.clickRootFolderCaretButton();
await umbracoUi.partialView.clickActionsMenuForPartialView(folderName);
await umbracoUi.partialView.clickCreateThreeDotsButton();
await umbracoUi.partialView.clickNewEmptyPartialViewButton();
await umbracoUi.partialView.enterPartialViewName(partialViewName);
await umbracoUi.partialView.clickSaveButton();
// Assert
await umbracoUi.partialView.isSuccessNotificationVisible();
const childrenData = await umbracoApi.partialView.getChildren(folderPath);
expect(childrenData[0].name).toEqual(partialViewFileName);
// Verify the partial view is displayed in the folder under the Partial Views section
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).not.toBeVisible();
await umbracoUi.partialView.clickCaretButtonForName(folderName);
await expect(umbracoUi.partialView.checkItemNameUnderPartialViewTree(partialViewFileName)).toBeVisible();
});
});

View File

@@ -1,211 +0,0 @@
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {expect} from "@playwright/test";
test.describe('Partial Views tests', () => {
const partialViewName = 'TestPartialView';
const partialViewFileName = partialViewName + ".cshtml";
test.beforeEach(async ({umbracoUi}) => {
await umbracoUi.goToBackOffice();
await umbracoUi.partialView.goToSection(ConstantHelper.sections.settings);
});
test('can create an empty partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
await umbracoApi.partialView.ensureNameNotExists(partialViewName);
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.clickNewEmptyPartialViewButton();
await umbracoUi.partialView.enterPartialViewName(partialViewName);
// TODO: Remove this timeout when frontend validation is implemented
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.clickSaveButton();
// Assert
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
// TODO: when frontend is ready, verify the new partial view is displayed under the Partial Views section
// TODO: when frontend is ready, verify the notification displays
// Clean
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
});
test.skip('can create a partial view from snippet', async ({umbracoApi, umbracoUi}) => {
// Arrange
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
const expectedTemplateContent = '@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n@using Umbraco.Cms.Core.Routing\r\n@using Umbraco.Extensions\r\n\n@inject IPublishedUrlProvider PublishedUrlProvider\r\n@*\r\n This snippet makes a breadcrumb of parents using an unordered HTML list.\r\n\r\n How it works:\r\n - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back\r\n - Finally it outputs the name of the current page (without a link)\r\n*@\r\n\r\n@{ var selection = Model.Ancestors().ToArray(); }\r\n\r\n@if (selection?.Length > 0)\r\n{\r\n <ul class=\"breadcrumb\">\r\n @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@\r\n @foreach (var item in selection.OrderBy(x => x.Level))\r\n {\r\n <li><a href=\"@item.Url(PublishedUrlProvider)\">@item.Name</a> <span class=\"divider\">/</span></li>\r\n }\r\n\r\n @* Display the current page as the last item in the list *@\r\n <li class=\"active\">@Model.Name</li>\r\n </ul>\r\n}';
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.clickNewPartialViewFromSnippetButton();
await umbracoUi.partialView.clickBreadcrumbButton();
await umbracoUi.partialView.enterPartialViewName(partialViewName);
// TODO: Remove this timeout when frontend validation is implemented
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.clickSaveButton();
// Assert
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeTruthy();
const partialViewData = await umbracoApi.partialView.getByName(partialViewFileName);
expect(partialViewData.content).toBe(expectedTemplateContent);
// TODO: when frontend is ready, verify the new partial view is displayed under the Partial Views section
// TODO: when frontend is ready, verify the notification displays
// Clean
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
});
test('can update a partial view name', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedPartialViewName = 'TestPartialViewUpdated';
const updatedPartialViewFileName = updatedPartialViewName + ".cshtml";
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
//Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.enterPartialViewName(updatedPartialViewName);
// TODO: Remove this timeout when frontend validation is implemented
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.clickSaveButton();
// Assert
expect(await umbracoApi.partialView.doesExist(updatedPartialViewFileName)).toBeTruthy();
// TODO: when frontend is ready, verify the updated partial view name is displayed under the Partial Views section
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeFalsy();
// TODO: when frontend is ready, verify the old partial view name is NOT displayed under the Partial Views section
// Clean
await umbracoApi.partialView.ensureNameNotExists(updatedPartialViewFileName);
});
test('can update a partial view content', async ({umbracoApi, umbracoUi}) => {
// Arrange
const updatedPartialViewContent = '@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n' +
'@{\r\n' +
'\tLayout = null;\r\n' +
'}\r\n' +
'<p>AcceptanceTests</p>';
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
//Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.enterPartialViewContent(updatedPartialViewContent);
// TODO: Remove this timeout when frontend validation is implemented
await umbracoUi.waitForTimeout(1000);
await umbracoUi.partialView.clickSaveButton();
// Assert
const updatedPartialView = await umbracoApi.partialView.getByName(partialViewFileName);
expect(updatedPartialView.content).toBe(updatedPartialViewContent);
// Clean
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
});
test('can use query builder for a partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
const expectedTemplateContent = '\r\n' +
'@{\r\n' +
'\tvar selection = Umbraco.ContentAtRoot().FirstOrDefault()\r\n' +
' .Children()\r\n' +
' .Where(x => x.IsVisible());\r\n' +
'}\r\n' +
'<ul>\r\n' +
'\t@foreach (var item in selection)\r\n' +
'\t{\r\n' +
'\t\t<li>\r\n' +
'\t\t\t<a href="@item.Url()">@item.Name()</a>\r\n' +
'\t\t</li>\r\n' +
'\t}\r\n' +
'</ul>\r\n' +
'\r\n' +
'@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n';
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
// Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.addQueryBuilderWithCreateDateOption();
await umbracoUi.partialView.clickSaveButton();
// Assert
const updatedPartialView = await umbracoApi.partialView.getByName(partialViewFileName);
expect(updatedPartialView.content).toBe(expectedTemplateContent);
// Clean
await umbracoApi.template.ensureNameNotExists(partialViewFileName);
});
// Skip this test now as the function delete dictionary is missing
test.skip('can insert dictionaryItem into a partial view', async ({umbracoApi, umbracoUi}) => {
// Arrange
const dictionaryName = 'TestDictionary';
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.dictionary.create(dictionaryName);
const partialViewContent = '@Umbraco.GetDictionaryValue("' + dictionaryName + '")@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n';
// Act
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.insertDictionaryByName(dictionaryName);
await umbracoUi.partialView.clickSaveButton();
// Assert
const partialViewData = await umbracoApi.partialView.getByName(partialViewFileName);
expect(partialViewData.content).toBe(partialViewContent);
// Clean
await umbracoApi.dictionary.ensureNameNotExists(dictionaryName);
await umbracoApi.template.ensureNameNotExists(partialViewFileName);
});
test.skip('can delete a partial view', async ({umbracoApi, umbracoUi}) => {
//Arrange
await umbracoApi.partialView.ensureNameNotExists(partialViewFileName);
await umbracoApi.partialView.create(partialViewFileName, "@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage\r\n", "/");
//Act
await umbracoUi.partialView.clickRootFolderCaretButton();
await umbracoUi.partialView.openPartialViewAtRoot(partialViewFileName);
await umbracoUi.partialView.deletePartialView();
// Assert
expect(await umbracoApi.partialView.doesExist(partialViewFileName)).toBeFalsy();
// TODO: when frontend is ready, verify the partial view is NOT displayed under the Partial Views section
// TODO: when frontend is ready, verify the notification displays
});
test('can create a folder', async ({umbracoApi, umbracoUi}) => {
//Arrange
const folderName = 'TestFolder';
await umbracoApi.partialView.ensureNameNotExists(folderName);
// Act
await umbracoUi.partialView.clickActionsMenuAtRoot();
await umbracoUi.partialView.createFolder(folderName);
// Assert
expect(await umbracoApi.partialView.doesFolderExist(folderName)).toBeTruthy();
// TODO: when frontend is ready, verify the new folder is displayed under the Partial Views section
// TODO: when frontend is ready, verify the notification displays
//Clean
await umbracoApi.partialView.ensureNameNotExists(folderName);
});
test.skip('can place a partial view into folder', async ({umbracoApi}) => {
// TODO: implement this later as the frontend is missing now
});
});