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:
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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
|
||||
});
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user