From afb167581a14cffc473e93c39261cff2026b2f64 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 28 Feb 2024 15:27:12 +0700 Subject: [PATCH 01/31] Added api tests for Document - not done --- .../ApiTesting/Document/Document.spec.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts new file mode 100644 index 000000000000..ecd76bc567a6 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts @@ -0,0 +1,28 @@ +import {test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Documents tests', () => { + let documentTypeId = ''; + const documentName = 'TestDocument'; + const documentTypeName = 'TestDocumentType'; + + test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(documentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + }); + + test('can create a document', async ({umbracoApi}) => { + // Act + await umbracoApi.document.createDefaultDocument(documentName, documentTypeId); + + // Assert + await expect(umbracoApi.document.doesNameExist(documentName)).toBeTruthy(); + }); + + +}); From 7fe8706697a5f66710a1b5d594507f3343f5aaf4 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 28 Feb 2024 15:27:26 +0700 Subject: [PATCH 02/31] Added ui tests for Content - not done --- .../DefaultConfig/Content/Content.spec.ts | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts new file mode 100644 index 000000000000..cc42e6d24921 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -0,0 +1,34 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Content tests', () => { + const contentName = 'TestContent'; + const documentTypeName = 'TestDocumentTypeForContent'; + let documentTypeId = ''; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + }); + + test('can create a content', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.clickActionMenuForContent(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.dictionary.isSuccessNotificationVisible(); + + }); + + +}); From aa96d9a7dde98aeb0a63b4dcddc35ccdf530d8b9 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Fri, 8 Mar 2024 14:29:56 +0700 Subject: [PATCH 03/31] Added api test for Documents --- .../ApiTesting/Document/Document.spec.ts | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts index ecd76bc567a6..045f98e5fb3b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Document/Document.spec.ts @@ -3,6 +3,7 @@ import {expect} from "@playwright/test"; test.describe('Documents tests', () => { let documentTypeId = ''; + let documentId = ''; const documentName = 'TestDocument'; const documentTypeName = 'TestDocumentType'; @@ -21,8 +22,34 @@ test.describe('Documents tests', () => { await umbracoApi.document.createDefaultDocument(documentName, documentTypeId); // Assert - await expect(umbracoApi.document.doesNameExist(documentName)).toBeTruthy(); + expect(await umbracoApi.document.doesNameExist(documentName)).toBeTruthy(); }); + test('can delete a document', async ({umbracoApi}) => { + // Arrange + documentId = await umbracoApi.document.createDefaultDocument(documentName, documentTypeId); + expect(umbracoApi.document.doesExist(documentId)).toBeTruthy(); + // Act + await umbracoApi.document.delete(documentId); + + // Assert + expect(await umbracoApi.document.doesNameExist(documentName)).toBeFalsy(); + }); + + test('can update a document', async ({umbracoApi}) => { + // Arrange + const wrongName = 'WrongDocument'; + documentId = await umbracoApi.document.createDefaultDocument(wrongName, documentTypeId); + expect(await umbracoApi.document.doesNameExist(wrongName)).toBeTruthy(); + let documentData = await umbracoApi.document.get(documentId); + documentData.variants[0].name = documentName; + + // Act + await umbracoApi.document.update(documentData.id, documentData); + + // Assert + const updatedDocumentData = await umbracoApi.document.get(documentId); + expect(updatedDocumentData.variants[0].name).toEqual(documentName); + }); }); From d94b5d6661b445080d50ea75fdf8426f1ed2db32 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Fri, 8 Mar 2024 14:30:23 +0700 Subject: [PATCH 04/31] Added ui tests for Content --- .../Content/ChildrenContent.spec.ts | 114 ++++++++++++++++ .../DefaultConfig/Content/Content.spec.ts | 106 +++++++++++++-- .../Content/ContentInfoTab.spec.ts | 59 ++++++++ .../Content/CultureAndHostnames.spec.ts | 127 ++++++++++++++++++ .../Content/RedirectManagement.spec.ts | 63 +++++++++ 5 files changed, 461 insertions(+), 8 deletions(-) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts new file mode 100644 index 000000000000..65b2b21ff7fe --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -0,0 +1,114 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Children content tests', () => { + let documentTypeId = ''; + let childDocumentTypeId = ''; + let contentId = ''; + const contentName = 'TestContent'; + const childContentName = 'ChildContent'; + const documentTypeName = 'DocumentTypeForContent'; + const childDocumentTypeName = 'ChildDocumentTypeForContent'; + + test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + }); + + test('can create child node', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(childDocumentTypeName); + + await umbracoUi.content.enterContentName(childContentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(childContentName)).toBeTruthy(); + const childData = await umbracoApi.document.getChildren(contentId); + expect(childData[0].variants[0].name).toBe(childContentName); + // verify that the child content displays in the tree after reloading children + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickReloadChildrenThreeDotsButton(); + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.doesContentTreeHaveName(childContentName); + + // Clean + await umbracoApi.document.ensureNameNotExists(childContentName); + }); + + test('can create child node in child node', async ({umbracoApi, umbracoUi}) => { + // Arrange + const childOfChildContentName = 'ChildOfChildContent'; + const childOfChildDocumentTypeName = 'ChildOfChildDocumentType'; + let childOfChildDocumentTypeId: any; + let childContentId: any; + await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); + childOfChildDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childOfChildDocumentTypeName); + childDocumentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(childDocumentTypeName, childOfChildDocumentTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + childContentId = await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.clickActionsMenuForContent(childContentName); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(childOfChildDocumentTypeName); + await umbracoUi.content.enterContentName(childOfChildContentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const childOfChildData = await umbracoApi.document.getChildren(childContentId); + expect(childOfChildData[0].variants[0].name).toBe(childOfChildContentName); + // verify that the child content displays in the tree after reloading children + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickReloadChildrenThreeDotsButton(); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCaretButtonForContentName(childContentName); + await umbracoUi.content.doesContentTreeHaveName(childOfChildContentName); + + // Clean + await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); + await umbracoApi.document.ensureNameNotExists(childOfChildContentName); + }); + + test('cannot publish child if the parent is not published', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.clickActionsMenuForContent(childContentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isErrorNotificationVisible(); + const contentData = await umbracoApi.document.getByName(childContentName); + expect(contentData.variants[0].state).toBe('Draft'); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index cc42e6d24921..9258d0ff2a3b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -2,33 +2,123 @@ import {expect} from "@playwright/test"; test.describe('Content tests', () => { + let documentTypeId = ''; + let contentId = ''; const contentName = 'TestContent'; const documentTypeName = 'TestDocumentTypeForContent'; - let documentTypeId = ''; + const dataTypeName = 'Textstring'; + const contentText = 'This is test content text'; - test.beforeEach(async ({umbracoApi, umbracoUi}) => { + test.beforeEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + }); + + test('can create an empty content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const expectedState = 'Draft'; + await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + + // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe(expectedState); }); - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + test('can save and publish an empty content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const expectedState = 'Published'; + await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe(expectedState); }); test('can create a content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditorAndAllowAsRoot(documentTypeName, dataTypeName, dataTypeData.id); + // Act - await umbracoUi.content.clickActionMenuForContent(); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.clickLabelWithName(documentTypeName); await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterTextstring(contentText); await umbracoUi.content.clickSaveButton(); // Assert - await umbracoUi.dictionary.isSuccessNotificationVisible(); + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toBe(contentText); + }); + + test('can rename an empty content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const wrongContentName = 'Wrong Content Name' + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(wrongContentName, documentTypeId); + expect(await umbracoApi.document.doesNameExist(wrongContentName)).toBeTruthy(); + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(wrongContentName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const updatedContentData = await umbracoApi.document.get(contentId); + expect(updatedContentData.variants[0].name).toEqual(contentName); }); - + test('can update content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const wrongContentText = 'This is wrong test content text'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditorAndAllowAsRoot(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, wrongContentText, dataTypeName); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterTextstring(contentText); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const updatedContentData = await umbracoApi.document.get(contentId); + expect(updatedContentData.variants[0].name).toEqual(contentName); + expect(updatedContentData.values[0].value).toBe(contentText); + }); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts new file mode 100644 index 000000000000..7871c2ee9062 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -0,0 +1,59 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; + +test.describe('Content info tab tests', () => { + let documentTypeId = ''; + let contentId = ''; + const contentName = 'TestInfoTab'; + const documentTypeName = 'TestDocumentTypeForContent'; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + }); + + test.skip('can see correct link is shown when published', async ({umbracoApi, umbracoUi}) => { + // Arrange + const notPublishContentLink = 'This document is published but is not in the cache'; + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.doesLinkHaveText(notPublishContentLink); + await umbracoUi.content.clickSaveAndPublishButton(); + await umbracoUi.reloadPage(); + + // Assert + const contentData = await umbracoApi.document.get(contentId); + // verify the content link + await umbracoUi.content.doesLinkHaveText(contentData.urls[0].url); + // TODO: verify history of content when the front-end is ready + // TODO: verify publication status when the front-end is ready + // TODO: verify created date/time when the front-end is ready + // TODO: verify content id when the front-end is ready + }); + + test.skip('can open document type', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this test when the front-end is ready + }); + + test.skip('can switch template', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this test when the front-end is ready + }); + + test.skip('cannot switch to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this test when the front-end is ready + }); + + test.skip('can open template', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this test when the front-end is ready + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts new file mode 100644 index 000000000000..d791406319a0 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -0,0 +1,127 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Culture and Hostnames tests', () => { + let documentTypeId = ''; + let contentId = ''; + const contentName = 'TestCultureAndHostnames'; + const documentTypeName = 'TestDocumentTypeForContent'; + const languageName = 'Danish'; + const isoCode = 'da'; + const domainName = 'testdomain'; + const domainValue = [ + { + "domainName": domainName, + "isoCode": isoCode + } + ]; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.language.ensureNameNotExists(languageName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.language.create(languageName, false, false, isoCode); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.language.ensureNameNotExists(languageName); + }); + + test('can add culture', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.selectCultureLanguageOption(languageName); + await umbracoUi.content.clickSaveButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.defaultIsoCode).toEqual(isoCode); + }); + + test('can add domains', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(domainName); + await umbracoUi.content.selectDomainLanguageOption(languageName); + await umbracoUi.content.clickSaveButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(1); + expect(domainsData.domains[0].domainName).toEqual(domainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); + }); + + test('can update culture and hostname', async ({umbracoApi, umbracoUi}) => { + // Arrange + const updatedDomainName = 'updateddomain'; + let domainsData = await umbracoApi.document.getDomains(contentId); + domainsData.domains = domainValue; + await umbracoApi.document.updateDomains(contentId, domainsData); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.enterDomain(updatedDomainName); + await umbracoUi.content.clickSaveButton(); + + // Assert + domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains[0].domainName).toEqual(updatedDomainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); + }); + + test('can delete culture and hostname', async ({umbracoApi, umbracoUi}) => { + // Arrange + let domainsData = await umbracoApi.document.getDomains(contentId); + domainsData.domains = domainValue; + await umbracoApi.document.updateDomains(contentId, domainsData); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickDeleteDomainButton(); + await umbracoUi.content.clickSaveButton(); + + // Assert + domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(0); + }); + + test('can add culture and hostname for multiple languages', async ({umbracoApi, umbracoUi}) => { + // Arrange + const secondDomainName = 'testdomain2'; + const secondLanguageName = 'Vietnamese'; + const secondIsoCode = 'vi'; + await umbracoApi.language.ensureNameNotExists(secondLanguageName); + await umbracoApi.language.create(secondLanguageName, false, false, secondIsoCode); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(domainName, 0); + await umbracoUi.content.selectDomainLanguageOption(languageName, 0); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(secondDomainName, 1); + await umbracoUi.content.selectDomainLanguageOption(secondLanguageName, 1); + await umbracoUi.content.clickSaveButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(2); + expect(domainsData.domains[0].domainName).toEqual(domainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); + expect(domainsData.domains[1].domainName).toEqual(secondDomainName); + expect(domainsData.domains[1].isoCode).toEqual(secondIsoCode); + }); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts new file mode 100644 index 000000000000..2ea5cadb56a8 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -0,0 +1,63 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Redirect Management tests', () => { + const disableStatus = 'Disabled'; + const enableStatus = 'Enabled'; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.redirectManagement.setStatus(enableStatus); + await umbracoUi.goToBackOffice(); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.redirectManagement.setStatus(enableStatus); + }); + + test('can disable URL tracker', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.clickDisableURLTrackerButton(); + await umbracoUi.redirectManagement.clickDisableButton(); + await umbracoUi.waitForTimeout(1000); + + // Assert + const statusData = await umbracoApi.redirectManagement.getStatus(); + expect(statusData.status).toBe(disableStatus); + }); + + test('can re-enable URL tracker', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.redirectManagement.setStatus(disableStatus); + + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.clickEnableURLTrackerButton(); + await umbracoUi.waitForTimeout(1000); + + // Assert + const statusData = await umbracoApi.redirectManagement.getStatus(); + expect(statusData.status).toBe(enableStatus); + }); + + test.skip('can search for original URL', async ({umbracoUi}) => { + // Arrange + const searchKeyword = '/test-content/'; + // TODO: rename content to add an item in the redirect url management + + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.enterOriginalUrl(searchKeyword); + await umbracoUi.redirectManagement.clickSearchButton(); + + // Assert + // TODO: verify the search result + }); + + test.skip('can delete a redirect', async ({umbracoApi, umbracoUi}) => { + // TODO: implement this tests when front-end is ready + }); +}); From 5b3bfe1f24b45b2e6e776f681fa4b145b54d0b0b Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 13 May 2024 13:53:35 +0700 Subject: [PATCH 05/31] Updated method name due to ui changes --- .../tests/DefaultConfig/Content/ChildrenContent.spec.ts | 4 ++-- .../tests/DefaultConfig/Content/Content.spec.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 65b2b21ff7fe..a2a27443b021 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -45,7 +45,7 @@ test.describe('Children content tests', () => { expect(childData[0].variants[0].name).toBe(childContentName); // verify that the child content displays in the tree after reloading children await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickReloadChildrenThreeDotsButton(); + await umbracoUi.content.clickReloadButton(); await umbracoUi.content.clickCaretButtonForContentName(contentName); await umbracoUi.content.doesContentTreeHaveName(childContentName); @@ -82,7 +82,7 @@ test.describe('Children content tests', () => { expect(childOfChildData[0].variants[0].name).toBe(childOfChildContentName); // verify that the child content displays in the tree after reloading children await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickReloadChildrenThreeDotsButton(); + await umbracoUi.content.clickReloadButton(); await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCaretButtonForContentName(childContentName); await umbracoUi.content.doesContentTreeHaveName(childOfChildContentName); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index 9258d0ff2a3b..c14f0d7e4030 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -62,7 +62,7 @@ test.describe('Content tests', () => { test('can create a content', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditorAndAllowAsRoot(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); // Act await umbracoUi.goToBackOffice(); @@ -105,7 +105,7 @@ test.describe('Content tests', () => { // Arrange const wrongContentText = 'This is wrong test content text'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditorAndAllowAsRoot(documentTypeName, dataTypeName, dataTypeData.id); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, wrongContentText, dataTypeName); // Act From 56aa3b40e7e724cd3d776684502c4c2997a02524 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 15 May 2024 11:28:00 +0700 Subject: [PATCH 06/31] Bumped version of test helpers and json builders --- .../package-lock.json | 18 +++++++++--------- .../Umbraco.Tests.AcceptanceTest/package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 74cac48efbe7..a991b2b31e0a 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,8 +7,8 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.43", + "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.45", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", @@ -132,9 +132,9 @@ } }, "node_modules/@umbraco/json-models-builders": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.5.tgz", - "integrity": "sha512-Q9re+2yawW8/rkKiEdm2k3VKr1nlCWUhs17n5xOMBlsaFVVps0ZsmliSbIddf1OOWKuYU/uN0SKA3pn/GxV2fA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.6.tgz", + "integrity": "sha512-eoOhTSH7rcC7NESId0vhqtxNXPuoy+ZaQo1moXxpv8/T6vqmKoDdLEydjtDz0FOXzqVZ5yQ1xWK0cpag37Laag==", "dependencies": { "camelize": "^1.0.1", "faker": "^6.6.6" @@ -146,11 +146,11 @@ "integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg==" }, "node_modules/@umbraco/playwright-testhelpers": { - "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==", + "version": "2.0.0-beta.45", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.45.tgz", + "integrity": "sha512-OEmjo1nnt39veQ7kibh13VqEKjPNJiixqf8/WGB9UCknRWgTj0c0QpF/8yhpfGDlghAoqBFjtJsMnRCkTWDn6w==", "dependencies": { - "@umbraco/json-models-builders": "2.0.5", + "@umbraco/json-models-builders": "2.0.6", "camelize": "^1.0.0", "faker": "^4.1.0", "form-data": "^4.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 9049a46ee910..207aeca78b49 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,8 +21,8 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.43", + "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.45", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", From e5b2d40a22bf0da7d073ff0e321c78828bc06b24 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 15 May 2024 11:33:16 +0700 Subject: [PATCH 07/31] Added smoke tag to run all Content tests in the pipeline --- .../tests/DefaultConfig/Content/ChildrenContent.spec.ts | 3 ++- .../tests/DefaultConfig/Content/Content.spec.ts | 3 ++- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 5 +++-- .../tests/DefaultConfig/Content/CultureAndHostnames.spec.ts | 3 ++- .../tests/DefaultConfig/Content/RedirectManagement.spec.ts | 3 ++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index a2a27443b021..494bd0111f48 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -1,7 +1,8 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -test.describe('Children content tests', () => { +// Remove smoke tag before merging +test.describe('Children content tests @smoke', () => { let documentTypeId = ''; let childDocumentTypeId = ''; let contentId = ''; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index c14f0d7e4030..8cd93247d9e2 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -1,7 +1,8 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -test.describe('Content tests', () => { +// Remove smoke tag before merging +test.describe('Content tests @smoke', () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestContent'; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 7871c2ee9062..fbf5a92cbdaf 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -1,12 +1,13 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; -test.describe('Content info tab tests', () => { +// Remove smoke tag before merging +test.describe('Content info tab tests @smoke', () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestInfoTab'; const documentTypeName = 'TestDocumentTypeForContent'; - test.beforeEach(async ({umbracoApi, umbracoUi}) => { + test.beforeEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); await umbracoApi.document.ensureNameNotExists(contentName); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index d791406319a0..f6a3f082b68b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -1,7 +1,8 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -test.describe('Culture and Hostnames tests', () => { +// Remove smoke tag before merging +test.describe('Culture and Hostnames tests @smoke', () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestCultureAndHostnames'; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index 2ea5cadb56a8..c2c3231e169d 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -1,7 +1,8 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -test.describe('Redirect Management tests', () => { +// Remove smoke tag before merging +test.describe('Redirect Management tests @smoke', () => { const disableStatus = 'Disabled'; const enableStatus = 'Enabled'; From f6b03886b3101ab741d5b7623c98a1bbc3e10b6d Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Fri, 17 May 2024 15:45:39 +0700 Subject: [PATCH 08/31] Bumped version of json builder --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 2 +- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 98ae006aec9b..f8b99a9db781 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,7 +7,7 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", + "@umbraco/json-models-builders": "^2.0.6", "@umbraco/playwright-testhelpers": "^2.0.0-beta.46", "camelize": "^1.0.0", "dotenv": "^16.3.1", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 3cc0dfdc902e..8fe729770d60 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,7 +21,7 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", + "@umbraco/json-models-builders": "^2.0.6", "@umbraco/playwright-testhelpers": "^2.0.0-beta.46", "camelize": "^1.0.0", "dotenv": "^16.3.1", From 1e45429daa0ae4f7473f2287839e3aaee69c0ac8 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 20 May 2024 16:45:24 +0700 Subject: [PATCH 09/31] Revert files --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 2 +- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index f8b99a9db781..98ae006aec9b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,7 +7,7 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/json-models-builders": "^2.0.5", "@umbraco/playwright-testhelpers": "^2.0.0-beta.46", "camelize": "^1.0.0", "dotenv": "^16.3.1", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 8fe729770d60..3cc0dfdc902e 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,7 +21,7 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/json-models-builders": "^2.0.5", "@umbraco/playwright-testhelpers": "^2.0.0-beta.46", "camelize": "^1.0.0", "dotenv": "^16.3.1", From e5b1c27fff3121256642e73c6d1ff9cf1252da03 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 23 May 2024 10:08:45 +0700 Subject: [PATCH 10/31] Updated the syntax of smoke tag --- .../tests/DefaultConfig/Content/ChildrenContent.spec.ts | 2 +- .../tests/DefaultConfig/Content/Content.spec.ts | 7 ++++--- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 2 +- .../DefaultConfig/Content/CultureAndHostnames.spec.ts | 2 +- .../tests/DefaultConfig/Content/RedirectManagement.spec.ts | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 494bd0111f48..17c874f538e8 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -2,7 +2,7 @@ import {expect} from "@playwright/test"; // Remove smoke tag before merging -test.describe('Children content tests @smoke', () => { +test.describe('Children content tests', {tag: '@smoke'}, () => { let documentTypeId = ''; let childDocumentTypeId = ''; let contentId = ''; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index 8cd93247d9e2..fd7936a7238a 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -2,7 +2,7 @@ import {expect} from "@playwright/test"; // Remove smoke tag before merging -test.describe('Content tests @smoke', () => { +test.describe('Content tests', {tag: '@smoke'}, () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestContent'; @@ -15,7 +15,8 @@ test.describe('Content tests @smoke', () => { }); test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); test('can create an empty content', async ({umbracoApi, umbracoUi}) => { @@ -54,7 +55,7 @@ test.describe('Content tests @smoke', () => { await umbracoUi.content.clickSaveAndPublishButton(); // Assert - await umbracoUi.content.isSuccessNotificationVisible(); + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); const contentData = await umbracoApi.document.getByName(contentName); expect(contentData.variants[0].state).toBe(expectedState); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index fbf5a92cbdaf..a679da049269 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -1,7 +1,7 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; // Remove smoke tag before merging -test.describe('Content info tab tests @smoke', () => { +test.describe('Content info tab tests', {tag: '@smoke'}, () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestInfoTab'; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index f6a3f082b68b..1ae975b46e3f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -2,7 +2,7 @@ import {expect} from "@playwright/test"; // Remove smoke tag before merging -test.describe('Culture and Hostnames tests @smoke', () => { +test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { let documentTypeId = ''; let contentId = ''; const contentName = 'TestCultureAndHostnames'; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index c2c3231e169d..85e652a242cb 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -2,7 +2,7 @@ import {expect} from "@playwright/test"; // Remove smoke tag before merging -test.describe('Redirect Management tests @smoke', () => { +test.describe('Redirect Management tests', {tag: '@smoke'}, () => { const disableStatus = 'Disabled'; const enableStatus = 'Enabled'; From 660b98419d86a58863384cebfbe9fb9862824846 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 23 May 2024 10:09:34 +0700 Subject: [PATCH 11/31] Added tests for content with different property editors --- .../ContentWithPropertyEditors.spec.ts | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts new file mode 100644 index 000000000000..fd8165cf8fc3 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -0,0 +1,179 @@ +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +// Remove smoke tag before merging +test.describe('Content with property editors tests', {tag: '@smoke'}, () => { + const contentName = 'TestContent'; + const documentTypeName = 'TestDocumentTypeForContent'; + + test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.document.ensureNameNotExists(documentTypeName); + }); + + test('can create a content with Rich Text Editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Richtext editor'; + const contentText = 'This is Rich Text Editor content!'; + const expectedContentValue = { + blocks: { + contentData: [], + layout: {}, + propertyEditorAlias: 'Umbraco.TinyMCE', + settingsData: [], + }, + markup: '

' + contentText + '

', + }; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterRichTextArea(contentText); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(expectedContentValue); + }); + + test('can create a content with text area', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Textarea'; + const contentText = 'This is Textarea content!'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterTextArea(contentText); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(contentText); + }); + + test('can create a content with upload file', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Upload File'; + const uploadFilePath = 'Umbraco.png'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.changeFileTypeWithFileChooser('./fixtures/mediaLibrary/' + uploadFilePath); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + // TODO: Uncomment this when the front-end is ready. Currently it returns error when publishing a content + //await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value.src).toContainEqual(uploadFilePath); + }); + + test('can create a content with tags', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Tags'; + const tagName = 'test'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.addTags(tagName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual([tagName]); + }); + + test('can create a content with content picker', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Content Picker'; + const contentPickerName = 'TestContentPicker'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + const contentPickerId = await umbracoApi.document.createDefaultDocument(contentPickerName, documentTypeId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.addContentPicker(contentPickerName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(contentPickerId); + + // Clean + await umbracoApi.document.delete(contentPickerId); + }); + + // TODO: Remove skip and update the test when the front-end is ready. Currently the list of content is not displayed. + test.skip('can create a content with list view - content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'List View - Content'; + const contentListViewName = 'TestListViewContent'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + const contentPickerId = await umbracoApi.document.createDefaultDocument(contentListViewName, documentTypeId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + // TODO: add step to interact with the list + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + + // Clean + await umbracoApi.document.delete(contentPickerId); + }); +}); From 9a775ef4a5d4af05ac55ff791a519e4a007eac6a Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 27 May 2024 10:35:46 +0200 Subject: [PATCH 12/31] Added tests for Info Tab --- .../Content/ContentInfoTab.spec.ts | 121 +++++++++++++++--- 1 file changed, 103 insertions(+), 18 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index a679da049269..089a17f947db 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -1,4 +1,5 @@ -import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import { expect } from '@playwright/test'; +import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; // Remove smoke tag before merging test.describe('Content info tab tests', {tag: '@smoke'}, () => { @@ -9,7 +10,6 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { test.beforeEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.document.ensureNameNotExists(contentName); }); test.afterEach(async ({umbracoApi}) => { @@ -17,7 +17,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); - test.skip('can see correct link is shown when published', async ({umbracoApi, umbracoUi}) => { + test('can correct information when pu', async ({umbracoApi, umbracoUi}) => { // Arrange const notPublishContentLink = 'This document is published but is not in the cache'; documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); @@ -30,31 +30,116 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickInfoTab(); await umbracoUi.content.doesLinkHaveText(notPublishContentLink); await umbracoUi.content.clickSaveAndPublishButton(); - await umbracoUi.reloadPage(); // Assert const contentData = await umbracoApi.document.get(contentId); - // verify the content link - await umbracoUi.content.doesLinkHaveText(contentData.urls[0].url); - // TODO: verify history of content when the front-end is ready - // TODO: verify publication status when the front-end is ready - // TODO: verify created date/time when the front-end is ready - // TODO: verify content id when the front-end is ready + // TODO: Uncomment this when front-end is ready. Currently the link is not updated immediately after publishing + //await umbracoUi.content.doesLinkHaveText(contentData.urls[0].url); + await umbracoUi.content.doesIdHaveText(contentData.id); + await umbracoUi.content.doesPublicationStatusHaveText(contentData.variants[0].state === 'Draft' ? 'Unpublished' : contentData.variants[0].state); + const expectedCreatedDate = new Date(contentData.variants[0].createDate).toLocaleString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "numeric", + second: "numeric", + hour12: true, + }); + await umbracoUi.content.doesCreatedDateHaveText(expectedCreatedDate); }); - test.skip('can open document type', async ({umbracoApi, umbracoUi}) => { - // TODO: implement this test when the front-end is ready + test('can open document type', async ({umbracoApi, umbracoUi}) => { + // Arrange + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickDocumentTypeByName(documentTypeName); + + // Assert + await umbracoUi.content.isDocumentTypeModalVisible(documentTypeName); }); - test.skip('can switch template', async ({umbracoApi, umbracoUi}) => { - // TODO: implement this test when the front-end is ready + test('can open template', async ({umbracoApi, umbracoUi}) => { + // Arrange + const templateName = "TestTemplateForContent"; + await umbracoApi.template.ensureNameNotExists(templateName); + const templateId = await umbracoApi.template.createDefaultTemplate(templateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, templateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, templateId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickTemplateByName(templateName); + + // Assert + await umbracoUi.content.isTemplateModalVisible(templateName); + + // Clean + await umbracoApi.template.delete(templateId); }); - test.skip('cannot switch to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { - // TODO: implement this test when the front-end is ready + test('can switch template', async ({umbracoApi, umbracoUi}) => { + // Arrange + const firstTemplateName = "TestTemplateOneForContent"; + const secondTemplateName = "TestTemplateTwoForContent"; + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); + const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); + const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithTwoAllowedTemplates(documentTypeName, firstTemplateId, secondTemplateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.switchTemplate(firstTemplateName, secondTemplateName); + await umbracoUi.content.clickSaveButton(); + + // Assert + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.template.id).toBe(secondTemplateId); + + // Clean + await umbracoApi.template.delete(firstTemplateId); + await umbracoApi.template.delete(secondTemplateId); }); - test.skip('can open template', async ({umbracoApi, umbracoUi}) => { - // TODO: implement this test when the front-end is ready + test('cannot switch to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const firstTemplateName = "TestTemplateOneForContent"; + const secondTemplateName = "TestTemplateTwoForContent"; + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); + const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); + const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, firstTemplateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickEditTemplateByName(firstTemplateName); + + // Assert + // This wait is needed to make sure the template name is visible when the modal is opened + await umbracoUi.waitForTimeout(1000); + await umbracoUi.content.isTemplateNameDisabled(secondTemplateName); + + // Clean + await umbracoApi.template.delete(firstTemplateId); + await umbracoApi.template.delete(secondTemplateId); }); }); From a865c573537921059172184841091d99bacd139a Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 27 May 2024 10:37:01 +0200 Subject: [PATCH 13/31] Added more steps for before tests --- .../Content/ContentWithPropertyEditors.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts index fd8165cf8fc3..c0eb119f373c 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -13,7 +13,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.document.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); test('can create a content with Rich Text Editor', async ({umbracoApi, umbracoUi}) => { @@ -73,7 +73,8 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value).toEqual(contentText); }); - test('can create a content with upload file', async ({umbracoApi, umbracoUi}) => { + // TODO: Remove skip when the front-end is ready. Currently it returns error when publishing a content + test.skip('can create a content with upload file', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Upload File'; const uploadFilePath = 'Umbraco.png'; @@ -91,8 +92,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickSaveAndPublishButton(); // Assert - // TODO: Uncomment this when the front-end is ready. Currently it returns error when publishing a content - //await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); const contentData = await umbracoApi.document.getByName(contentName); expect(contentData.values[0].value.src).toContainEqual(uploadFilePath); From 689faa298a73949ef676be5baca656face9ddfe0 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 27 May 2024 10:37:22 +0200 Subject: [PATCH 14/31] Added more tests for Redirect Management --- .../Content/RedirectManagement.spec.ts | 60 +++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index 85e652a242cb..287319197cca 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -5,14 +5,29 @@ import {expect} from "@playwright/test"; test.describe('Redirect Management tests', {tag: '@smoke'}, () => { const disableStatus = 'Disabled'; const enableStatus = 'Enabled'; + let documentTypeId = ''; + let contentId = ''; + const contentName = 'TestContent'; + const documentTypeName = 'TestDocumentType'; + const updatedContentName = 'UpdatedContentName'; test.beforeEach(async ({umbracoApi, umbracoUi}) => { await umbracoApi.redirectManagement.setStatus(enableStatus); await umbracoUi.goToBackOffice(); + // Create a content + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + // Publish the content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); }); test.afterEach(async ({umbracoApi}) => { await umbracoApi.redirectManagement.setStatus(enableStatus); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); test('can disable URL tracker', async ({umbracoApi, umbracoUi}) => { @@ -21,9 +36,20 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { await umbracoUi.redirectManagement.clickRedirectManagementTab(); await umbracoUi.redirectManagement.clickDisableURLTrackerButton(); await umbracoUi.redirectManagement.clickDisableButton(); - await umbracoUi.waitForTimeout(1000); // Assert + // Verfiy that if renaming a published page, there are no redirects have been made + // rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); + // verify that there is no redirects have been made + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); + // Veridy that the status is Disable const statusData = await umbracoApi.redirectManagement.getStatus(); expect(statusData.status).toBe(disableStatus); }); @@ -36,13 +62,25 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.redirectManagement.clickRedirectManagementTab(); await umbracoUi.redirectManagement.clickEnableURLTrackerButton(); - await umbracoUi.waitForTimeout(1000); // Assert + // Verfiy that if renaming a published page, there are one redirects have been made + // rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); + // verify that there is no redirects have been made + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url); + // Veridy that the status is Disable const statusData = await umbracoApi.redirectManagement.getStatus(); expect(statusData.status).toBe(enableStatus); }); + // TODO: Remove skip and update this when the front-end is ready. Currently it always return "No redirects matching this search criteria" when searching. test.skip('can search for original URL', async ({umbracoUi}) => { // Arrange const searchKeyword = '/test-content/'; @@ -58,7 +96,21 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { // TODO: verify the search result }); - test.skip('can delete a redirect', async ({umbracoApi, umbracoUi}) => { - // TODO: implement this tests when front-end is ready + test('can delete a redirect', async ({umbracoApi, umbracoUi}) => { + // Arrange + // Rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.deleteFirstRedirectURL(); + + // Assert + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); }); }); From 2e22950bcfa1c26640bdaac7e433d5c94d82300b Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 27 May 2024 10:37:37 +0200 Subject: [PATCH 15/31] Added more tests for Content --- .../Content/ChildrenContent.spec.ts | 21 +++++++++ .../DefaultConfig/Content/Content.spec.ts | 43 ++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 17c874f538e8..1ff3605df88b 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -112,4 +112,25 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { const contentData = await umbracoApi.document.getByName(childContentName); expect(contentData.variants[0].state).toBe('Draft'); }); + + test('can publish with descendants', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Published'); + const childContentData = await umbracoApi.document.getByName(contentName); + expect(childContentData.variants[0].state).toBe('Published'); + }); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index fd7936a7238a..916e34e762ca 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -117,10 +117,49 @@ test.describe('Content tests', {tag: '@smoke'}, () => { await umbracoUi.content.enterTextstring(contentText); await umbracoUi.content.clickSaveButton(); - // Assert + // Assert await umbracoUi.content.isSuccessNotificationVisible(); const updatedContentData = await umbracoApi.document.get(contentId); expect(updatedContentData.variants[0].name).toEqual(contentName); expect(updatedContentData.values[0].value).toBe(contentText); }); -}); + + test('can publish a content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Published'); + }); + + test('can unpublish a content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); + const publishData = {"publishSchedules":[{"culture":null}]}; + await umbracoApi.document.publish(contentId, publishData); + + // Act + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickUnpublishButton(); + await umbracoUi.content.clickConfirmToUnpublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Draft'); + }); +}); \ No newline at end of file From c17b085089ee6967e2a6f1441543649bea60dad8 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Mon, 27 May 2024 10:44:15 +0200 Subject: [PATCH 16/31] Bumped version of test helper --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 10 +++++----- tests/Umbraco.Tests.AcceptanceTest/package.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 00eec9388acb..505d09751278 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,8 +7,8 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.49", + "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.50", "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.49", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.49.tgz", - "integrity": "sha512-fmEJjuawY8QEHLQ9xozp83GozkVFFwEAHMYnNENYt98XSyu55OA7sRxIXUabKPOUGzgcGkiSceicKG7JXBoofw==", + "version": "2.0.0-beta.50", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.50.tgz", + "integrity": "sha512-LTSKF9buqmXakrm+nRKfDvh8f4APohUoQmgQv0E3Rx5buINX9ODHk1+7Gs4wTGbC61JB0JCF8TM+J5coYk05WQ==", "dependencies": { "@umbraco/json-models-builders": "2.0.6", "camelize": "^1.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index baabb52f3f09..38bd2af86121 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,8 +21,8 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.49", + "@umbraco/json-models-builders": "^2.0.6", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.50", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", From 9f330c1bc1a8a311765ac987e55a3fbd4e1c1511 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 08:28:53 +0200 Subject: [PATCH 17/31] Changed test name --- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 089a17f947db..2575d5a90fd6 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -17,7 +17,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); - test('can correct information when pu', async ({umbracoApi, umbracoUi}) => { + test('can see correct information when published', async ({umbracoApi, umbracoUi}) => { // Arrange const notPublishContentLink = 'This document is published but is not in the cache'; documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); From d1deca7bca1eea606050f5252c45a41095a57a21 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 12:33:10 +0200 Subject: [PATCH 18/31] Updated the method name due to the test helper changes --- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 2575d5a90fd6..0974f208fd20 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -103,7 +103,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.switchTemplate(firstTemplateName, secondTemplateName); + await umbracoUi.content.changeTemplate(firstTemplateName, secondTemplateName); await umbracoUi.content.clickSaveButton(); // Assert From 596c6cc52393640c490bbdf5cc4e934ed28ac37b Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 12:33:22 +0200 Subject: [PATCH 19/31] Fixed typo --- .../tests/DefaultConfig/Content/RedirectManagement.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index 287319197cca..2a27e86df3d2 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -49,7 +49,7 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.redirectManagement.clickRedirectManagementTab(); await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); - // Veridy that the status is Disable + // Verify that the status is Disable const statusData = await umbracoApi.redirectManagement.getStatus(); expect(statusData.status).toBe(disableStatus); }); @@ -75,7 +75,7 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.redirectManagement.clickRedirectManagementTab(); await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url); - // Veridy that the status is Disable + // Verify that the status is Disable const statusData = await umbracoApi.redirectManagement.getStatus(); expect(statusData.status).toBe(enableStatus); }); From caad29b18a6773ec54f56ceaec5467671bdb64e2 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 13:33:57 +0200 Subject: [PATCH 20/31] Added more waits and skip tests --- .../tests/DefaultConfig/Content/ChildrenContent.spec.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 1ff3605df88b..1c2037706a35 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -35,7 +35,8 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.clickLabelWithName(childDocumentTypeName); - + // This wait is needed + await umbracoUi.waitForTimeout(500); await umbracoUi.content.enterContentName(childContentName); await umbracoUi.content.clickSaveButton(); @@ -54,7 +55,8 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { await umbracoApi.document.ensureNameNotExists(childContentName); }); - test('can create child node in child node', async ({umbracoApi, umbracoUi}) => { + // TODO: Remove skip when the front-end is ready. + test.skip('can create child node in child node', async ({umbracoApi, umbracoUi}) => { // Arrange const childOfChildContentName = 'ChildOfChildContent'; const childOfChildDocumentTypeName = 'ChildOfChildDocumentType'; @@ -74,6 +76,8 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickActionsMenuForContent(childContentName); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.clickLabelWithName(childOfChildDocumentTypeName); + // This wait is needed + await umbracoUi.waitForTimeout(500); await umbracoUi.content.enterContentName(childOfChildContentName); await umbracoUi.content.clickSaveButton(); @@ -84,7 +88,6 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { // verify that the child content displays in the tree after reloading children await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickReloadButton(); - await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCaretButtonForContentName(childContentName); await umbracoUi.content.doesContentTreeHaveName(childOfChildContentName); From cc80b70d41af03c78c71390a54fa6d706dc0a3b9 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 13:34:13 +0200 Subject: [PATCH 21/31] Updated the test name --- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 0974f208fd20..4d329f6fe4c2 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -49,7 +49,8 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoUi.content.doesCreatedDateHaveText(expectedCreatedDate); }); - test('can open document type', async ({umbracoApi, umbracoUi}) => { + // TODO: Remove skip when the frond-end is ready. Currently the document type is not opened after clicking to the button + test.skip('can open document type', async ({umbracoApi, umbracoUi}) => { // Arrange documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -87,7 +88,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoApi.template.delete(templateId); }); - test('can switch template', async ({umbracoApi, umbracoUi}) => { + test('can change template', async ({umbracoApi, umbracoUi}) => { // Arrange const firstTemplateName = "TestTemplateOneForContent"; const secondTemplateName = "TestTemplateTwoForContent"; @@ -115,7 +116,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoApi.template.delete(secondTemplateId); }); - test('cannot switch to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { + test('cannot change to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { // Arrange const firstTemplateName = "TestTemplateOneForContent"; const secondTemplateName = "TestTemplateTwoForContent"; From 04b05d1b91b9b5654812ffe68463f8f36b5d4095 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 13:34:59 +0200 Subject: [PATCH 22/31] Changed click action for save button --- .../DefaultConfig/Content/CultureAndHostnames.spec.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index 1ae975b46e3f..b5a4829c1228 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -39,7 +39,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); await umbracoUi.content.selectCultureLanguageOption(languageName); - await umbracoUi.content.clickSaveButton(); + await umbracoUi.content.clickSaveModalButton(); // Assert const domainsData = await umbracoApi.document.getDomains(contentId); @@ -53,7 +53,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickAddNewDomainButton(); await umbracoUi.content.enterDomain(domainName); await umbracoUi.content.selectDomainLanguageOption(languageName); - await umbracoUi.content.clickSaveButton(); + await umbracoUi.content.clickSaveModalButton(); // Assert const domainsData = await umbracoApi.document.getDomains(contentId); @@ -73,7 +73,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); await umbracoUi.content.enterDomain(updatedDomainName); - await umbracoUi.content.clickSaveButton(); + await umbracoUi.content.clickSaveModalButton(); // Assert domainsData = await umbracoApi.document.getDomains(contentId); @@ -91,7 +91,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); await umbracoUi.content.clickDeleteDomainButton(); - await umbracoUi.content.clickSaveButton(); + await umbracoUi.content.clickSaveModalButton(); // Assert domainsData = await umbracoApi.document.getDomains(contentId); @@ -115,7 +115,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoUi.content.clickAddNewDomainButton(); await umbracoUi.content.enterDomain(secondDomainName, 1); await umbracoUi.content.selectDomainLanguageOption(secondLanguageName, 1); - await umbracoUi.content.clickSaveButton(); + await umbracoUi.content.clickSaveModalButton(); // Assert const domainsData = await umbracoApi.document.getDomains(contentId); From 1fa13b8d4cd00ce2aee733d1276a1e78b04d6013 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Tue, 28 May 2024 13:38:01 +0200 Subject: [PATCH 23/31] Bumped version of test helper --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 8 ++++---- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 29384f472849..408c592e3320 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "dependencies": { "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.51", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.52", "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.51", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.51.tgz", - "integrity": "sha512-MVPsjv5nInf5oZ5F7NbnqjguWWOJ5/Dv/EHWBhv5QKBxanub+NeJGujJLBPPI7ifijNb2fWPzV6G5M3cD+aPvA==", + "version": "2.0.0-beta.52", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.52.tgz", + "integrity": "sha512-AG75pOWQUnfNn3VLkcEmKdktTcV1qK+EoQv3lhWlo2lHSpVUjJXoUVtLIFOOfDVKpzj759H9kKWUUnpNcMhubA==", "dependencies": { "@umbraco/json-models-builders": "2.0.6", "camelize": "^1.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index e4a061402451..0a5a2e6497d5 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.51", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.52", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", From e54e0f7000e073d34230aafe1279c7e970b6e784 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 29 May 2024 12:36:38 +0200 Subject: [PATCH 24/31] Bumped version of test helper --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 8 ++++---- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 408c592e3320..0ee8eeaea89d 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "dependencies": { "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.52", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.54", "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.52", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.52.tgz", - "integrity": "sha512-AG75pOWQUnfNn3VLkcEmKdktTcV1qK+EoQv3lhWlo2lHSpVUjJXoUVtLIFOOfDVKpzj759H9kKWUUnpNcMhubA==", + "version": "2.0.0-beta.54", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.54.tgz", + "integrity": "sha512-5nj4aMd2eDI04qEi6iPgh1FlhC86UbMpucBcliZyyZDlC8WGleiOf3jwPzYMIDOR0xuju3i65OHgcmDT0QWuOg==", "dependencies": { "@umbraco/json-models-builders": "2.0.6", "camelize": "^1.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 0a5a2e6497d5..81cd3194bdb4 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^2.0.5", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.52", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.54", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", From 2a8af2db6df39b8d325e3a77781fb3811f68fd11 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 29 May 2024 12:37:25 +0200 Subject: [PATCH 25/31] Updated choose document type step after clicking create button due to UI changes --- .../DefaultConfig/Content/ChildrenContent.spec.ts | 4 +--- .../tests/DefaultConfig/Content/Content.spec.ts | 6 +++--- .../Content/ContentWithPropertyEditors.spec.ts | 12 ++++++------ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 1c2037706a35..55f306b95bd1 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -34,9 +34,7 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(childDocumentTypeName); - // This wait is needed - await umbracoUi.waitForTimeout(500); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(childContentName); await umbracoUi.content.clickSaveButton(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index 916e34e762ca..a449847a54fa 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -29,7 +29,7 @@ test.describe('Content tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.clickSaveButton(); @@ -50,7 +50,7 @@ test.describe('Content tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.clickSaveAndPublishButton(); @@ -71,7 +71,7 @@ test.describe('Content tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.enterTextstring(contentText); await umbracoUi.content.clickSaveButton(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts index c0eb119f373c..17eb07d644ec 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -37,7 +37,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.enterRichTextArea(contentText); await umbracoUi.content.clickSaveAndPublishButton(); @@ -61,7 +61,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.enterTextArea(contentText); await umbracoUi.content.clickSaveAndPublishButton(); @@ -86,7 +86,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.changeFileTypeWithFileChooser('./fixtures/mediaLibrary/' + uploadFilePath); await umbracoUi.content.clickSaveAndPublishButton(); @@ -110,7 +110,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.addTags(tagName); await umbracoUi.content.clickSaveAndPublishButton(); @@ -135,7 +135,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.addContentPicker(contentPickerName); await umbracoUi.content.clickSaveAndPublishButton(); @@ -164,7 +164,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(documentTypeName); + await umbracoUi.content.chooseDocumentType(documentTypeName); await umbracoUi.content.enterContentName(contentName); // TODO: add step to interact with the list await umbracoUi.content.clickSaveAndPublishButton(); From 563200b7e3f6e2b8bdf9ab7dd3341a4d2086e1f5 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Wed, 29 May 2024 13:54:02 +0200 Subject: [PATCH 26/31] Added skip tests --- .../DefaultConfig/Content/RedirectManagement.spec.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index 2a27e86df3d2..e6da0363f3a2 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -54,7 +54,8 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { expect(statusData.status).toBe(disableStatus); }); - test('can re-enable URL tracker', async ({umbracoApi, umbracoUi}) => { + // TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page + test.skip('can re-enable URL tracker', async ({umbracoApi, umbracoUi}) => { // Arrange await umbracoApi.redirectManagement.setStatus(disableStatus); @@ -70,12 +71,12 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { await umbracoUi.content.openContent(contentName); await umbracoUi.content.enterContentName(updatedContentName); await umbracoUi.content.clickSaveAndPublishButton(); - // verify that there is no redirects have been made + // verify that there is one redirects have been made const contentData = await umbracoApi.document.get(contentId); await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.redirectManagement.clickRedirectManagementTab(); await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url); - // Verify that the status is Disable + // Verify that the status is Enable const statusData = await umbracoApi.redirectManagement.getStatus(); expect(statusData.status).toBe(enableStatus); }); @@ -96,7 +97,8 @@ test.describe('Redirect Management tests', {tag: '@smoke'}, () => { // TODO: verify the search result }); - test('can delete a redirect', async ({umbracoApi, umbracoUi}) => { + // TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page + test.skip('can delete a redirect', async ({umbracoApi, umbracoUi}) => { // Arrange // Rename the published content await umbracoUi.content.goToSection(ConstantHelper.sections.content); From c5f3e5f9304c48b0d80175ef3271204f8b92a9ab Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 30 May 2024 13:07:35 +0200 Subject: [PATCH 27/31] Changed clean method --- .../tests/DefaultConfig/Content/ContentInfoTab.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 4d329f6fe4c2..35a1c78719c2 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -85,7 +85,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoUi.content.isTemplateModalVisible(templateName); // Clean - await umbracoApi.template.delete(templateId); + await umbracoApi.template.ensureNameNotExists(templateName); }); test('can change template', async ({umbracoApi, umbracoUi}) => { @@ -112,8 +112,8 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { expect(contentData.template.id).toBe(secondTemplateId); // Clean - await umbracoApi.template.delete(firstTemplateId); - await umbracoApi.template.delete(secondTemplateId); + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); }); test('cannot change to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { From 984e29fdf239de992856f00a3cc5ad767a87be35 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 30 May 2024 13:07:57 +0200 Subject: [PATCH 28/31] Fixed arrange step --- .../Content/ChildrenContent.spec.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 55f306b95bd1..675d55794820 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -28,10 +28,10 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -66,10 +66,10 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); childContentId = await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickCaretButtonForContentName(contentName); await umbracoUi.content.clickActionsMenuForContent(childContentName); await umbracoUi.content.clickCreateButton(); @@ -100,10 +100,10 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickCaretButtonForContentName(contentName); await umbracoUi.content.clickActionsMenuForContent(childContentName); await umbracoUi.content.clickPublishButton(); @@ -120,10 +120,10 @@ test.describe('Children content tests', {tag: '@smoke'}, () => { documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickPublishButton(); From 3e6d17ca67ff532b392ca48d010dadda22e4c7d9 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 30 May 2024 13:31:03 +0200 Subject: [PATCH 29/31] Fixed the arrange steps --- .../DefaultConfig/Content/Content.spec.ts | 42 +++++++++---------- .../Content/ContentInfoTab.spec.ts | 24 +++++------ .../ContentWithPropertyEditors.spec.ts | 38 ++++++++--------- .../Content/CultureAndHostnames.spec.ts | 4 +- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index a449847a54fa..f0a60cd9cbe0 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -19,14 +19,14 @@ test.describe('Content tests', {tag: '@smoke'}, () => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); - test('can create an empty content', async ({umbracoApi, umbracoUi}) => { + test('can create empty content', async ({umbracoApi, umbracoUi}) => { // Arrange const expectedState = 'Draft'; await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -40,14 +40,14 @@ test.describe('Content tests', {tag: '@smoke'}, () => { expect(contentData.variants[0].state).toBe(expectedState); }); - test('can save and publish an empty content', async ({umbracoApi, umbracoUi}) => { + test('can save and publish empty content', async ({umbracoApi, umbracoUi}) => { // Arrange const expectedState = 'Published'; await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -61,14 +61,14 @@ test.describe('Content tests', {tag: '@smoke'}, () => { expect(contentData.variants[0].state).toBe(expectedState); }); - test('can create a content', async ({umbracoApi, umbracoUi}) => { + test('can create content', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -83,16 +83,16 @@ test.describe('Content tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value).toBe(contentText); }); - test('can rename an empty content', async ({umbracoApi, umbracoUi}) => { + test('can rename content', async ({umbracoApi, umbracoUi}) => { // Arrange - const wrongContentName = 'Wrong Content Name' + const wrongContentName = 'Wrong Content Name'; documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); contentId = await umbracoApi.document.createDefaultDocument(wrongContentName, documentTypeId); expect(await umbracoApi.document.doesNameExist(wrongContentName)).toBeTruthy(); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(wrongContentName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.clickSaveButton(); @@ -109,10 +109,10 @@ test.describe('Content tests', {tag: '@smoke'}, () => { const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, wrongContentText, dataTypeName); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.enterTextstring(contentText); await umbracoUi.content.clickSaveButton(); @@ -124,15 +124,15 @@ test.describe('Content tests', {tag: '@smoke'}, () => { expect(updatedContentData.values[0].value).toBe(contentText); }); - test('can publish a content', async ({umbracoApi, umbracoUi}) => { + test('can publish content', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickPublishButton(); @@ -142,17 +142,17 @@ test.describe('Content tests', {tag: '@smoke'}, () => { expect(contentData.variants[0].state).toBe('Published'); }); - test('can unpublish a content', async ({umbracoApi, umbracoUi}) => { + test('can unpublish content', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); const publishData = {"publishSchedules":[{"culture":null}]}; await umbracoApi.document.publish(contentId, publishData); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickUnpublishButton(); await umbracoUi.content.clickConfirmToUnpublishButton(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 35a1c78719c2..99daa22e4124 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -22,10 +22,10 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { const notPublishContentLink = 'This document is published but is not in the cache'; documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); await umbracoUi.content.doesLinkHaveText(notPublishContentLink); @@ -54,10 +54,10 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { // Arrange documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); await umbracoUi.content.clickDocumentTypeByName(documentTypeName); @@ -73,10 +73,10 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { const templateId = await umbracoApi.template.createDefaultTemplate(templateName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, templateId, true); contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, templateId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); await umbracoUi.content.clickTemplateByName(templateName); @@ -98,10 +98,10 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithTwoAllowedTemplates(documentTypeName, firstTemplateId, secondTemplateId, true); contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); await umbracoUi.content.changeTemplate(firstTemplateName, secondTemplateName); @@ -126,10 +126,10 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, firstTemplateId, true); contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.openContent(contentName); await umbracoUi.content.clickInfoTab(); await umbracoUi.content.clickEditTemplateByName(firstTemplateName); @@ -140,7 +140,7 @@ test.describe('Content info tab tests', {tag: '@smoke'}, () => { await umbracoUi.content.isTemplateNameDisabled(secondTemplateName); // Clean - await umbracoApi.template.delete(firstTemplateId); - await umbracoApi.template.delete(secondTemplateId); + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); }); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts index 17eb07d644ec..9a9d8a8d0620 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -16,7 +16,7 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); - test('can create a content with Rich Text Editor', async ({umbracoApi, umbracoUi}) => { + test('can create content with the Rich Text Editor datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Richtext editor'; const contentText = 'This is Rich Text Editor content!'; @@ -31,10 +31,10 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { }; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -49,16 +49,16 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value).toEqual(expectedContentValue); }); - test('can create a content with text area', async ({umbracoApi, umbracoUi}) => { + test('can create content with the text area datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Textarea'; const contentText = 'This is Textarea content!'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -74,16 +74,16 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { }); // TODO: Remove skip when the front-end is ready. Currently it returns error when publishing a content - test.skip('can create a content with upload file', async ({umbracoApi, umbracoUi}) => { + test.skip('can create content with the upload file datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Upload File'; const uploadFilePath = 'Umbraco.png'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -98,16 +98,16 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value.src).toContainEqual(uploadFilePath); }); - test('can create a content with tags', async ({umbracoApi, umbracoUi}) => { + test('can create content with the tags datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Tags'; const tagName = 'test'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -122,17 +122,17 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value).toEqual([tagName]); }); - test('can create a content with content picker', async ({umbracoApi, umbracoUi}) => { + test('can create content with the content picker datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Content Picker'; const contentPickerName = 'TestContentPicker'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); const contentPickerId = await umbracoApi.document.createDefaultDocument(contentPickerName, documentTypeId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); @@ -147,21 +147,21 @@ test.describe('Content with property editors tests', {tag: '@smoke'}, () => { expect(contentData.values[0].value).toEqual(contentPickerId); // Clean - await umbracoApi.document.delete(contentPickerId); + await umbracoApi.document.ensureNameNotExists(contentPickerName); }); // TODO: Remove skip and update the test when the front-end is ready. Currently the list of content is not displayed. - test.skip('can create a content with list view - content', async ({umbracoApi, umbracoUi}) => { + test.skip('can create content with the list view - content datatype', async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'List View - Content'; const contentListViewName = 'TestListViewContent'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); const contentPickerId = await umbracoApi.document.createDefaultDocument(contentListViewName, documentTypeId); - - // Act await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateButton(); await umbracoUi.content.chooseDocumentType(documentTypeName); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index b5a4829c1228..5dcd932a82e5 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -34,7 +34,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { await umbracoApi.language.ensureNameNotExists(languageName); }); - test('can add culture', async ({umbracoApi, umbracoUi}) => { + test('can add a culture', async ({umbracoApi, umbracoUi}) => { // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); @@ -46,7 +46,7 @@ test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { expect(domainsData.defaultIsoCode).toEqual(isoCode); }); - test('can add domains', async ({umbracoApi, umbracoUi}) => { + test('can add a domain', async ({umbracoApi, umbracoUi}) => { // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); From e9dc481aa0f6c821af7e96e28a29451634592fe4 Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 30 May 2024 15:06:23 +0200 Subject: [PATCH 30/31] Removed test.describe and unnecessary variables --- .../Content/ChildrenContent.spec.ts | 263 +++++++------ .../DefaultConfig/Content/Content.spec.ts | 319 ++++++++-------- .../Content/ContentInfoTab.spec.ts | 267 +++++++------- .../ContentWithPropertyEditors.spec.ts | 347 +++++++++--------- .../Content/CultureAndHostnames.spec.ts | 245 ++++++------- .../Content/RedirectManagement.spec.ts | 201 +++++----- 6 files changed, 812 insertions(+), 830 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 675d55794820..88cfac62c6d1 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -1,137 +1,134 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -// Remove smoke tag before merging -test.describe('Children content tests', {tag: '@smoke'}, () => { - let documentTypeId = ''; - let childDocumentTypeId = ''; - let contentId = ''; - const contentName = 'TestContent'; - const childContentName = 'ChildContent'; - const documentTypeName = 'DocumentTypeForContent'; - const childDocumentTypeName = 'ChildDocumentTypeForContent'; - - test.beforeEach(async ({umbracoApi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); - }); - - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); - - test('can create child node', async ({umbracoApi, umbracoUi}) => { - // Arrange - childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(childContentName); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - expect(await umbracoApi.document.doesNameExist(childContentName)).toBeTruthy(); - const childData = await umbracoApi.document.getChildren(contentId); - expect(childData[0].variants[0].name).toBe(childContentName); - // verify that the child content displays in the tree after reloading children - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickReloadButton(); - await umbracoUi.content.clickCaretButtonForContentName(contentName); - await umbracoUi.content.doesContentTreeHaveName(childContentName); - - // Clean - await umbracoApi.document.ensureNameNotExists(childContentName); - }); - - // TODO: Remove skip when the front-end is ready. - test.skip('can create child node in child node', async ({umbracoApi, umbracoUi}) => { - // Arrange - const childOfChildContentName = 'ChildOfChildContent'; - const childOfChildDocumentTypeName = 'ChildOfChildDocumentType'; - let childOfChildDocumentTypeId: any; - let childContentId: any; - await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); - childOfChildDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childOfChildDocumentTypeName); - childDocumentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(childDocumentTypeName, childOfChildDocumentTypeId, true); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - childContentId = await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickCaretButtonForContentName(contentName); - await umbracoUi.content.clickActionsMenuForContent(childContentName); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.clickLabelWithName(childOfChildDocumentTypeName); - // This wait is needed - await umbracoUi.waitForTimeout(500); - await umbracoUi.content.enterContentName(childOfChildContentName); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const childOfChildData = await umbracoApi.document.getChildren(childContentId); - expect(childOfChildData[0].variants[0].name).toBe(childOfChildContentName); - // verify that the child content displays in the tree after reloading children - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickReloadButton(); - await umbracoUi.content.clickCaretButtonForContentName(childContentName); - await umbracoUi.content.doesContentTreeHaveName(childOfChildContentName); - - // Clean - await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); - await umbracoApi.document.ensureNameNotExists(childOfChildContentName); - }); - - test('cannot publish child if the parent is not published', async ({umbracoApi, umbracoUi}) => { - // Arrange - childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickCaretButtonForContentName(contentName); - await umbracoUi.content.clickActionsMenuForContent(childContentName); - await umbracoUi.content.clickPublishButton(); - - // Assert - await umbracoUi.content.isErrorNotificationVisible(); - const contentData = await umbracoApi.document.getByName(childContentName); - expect(contentData.variants[0].state).toBe('Draft'); - }); - - test('can publish with descendants', async ({umbracoApi, umbracoUi}) => { - // Arrange - childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickPublishButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.variants[0].state).toBe('Published'); - const childContentData = await umbracoApi.document.getByName(contentName); - expect(childContentData.variants[0].state).toBe('Published'); - }); +let documentTypeId = ''; +let childDocumentTypeId = ''; +let contentId = ''; +const contentName = 'TestContent'; +const childContentName = 'ChildContent'; +const documentTypeName = 'DocumentTypeForContent'; +const childDocumentTypeName = 'ChildDocumentTypeForContent'; + +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); + +test('can create child node', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(childContentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(childContentName)).toBeTruthy(); + const childData = await umbracoApi.document.getChildren(contentId); + expect(childData[0].variants[0].name).toBe(childContentName); + // verify that the child content displays in the tree after reloading children + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickReloadButton(); + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.doesContentTreeHaveName(childContentName); + + // Clean + await umbracoApi.document.ensureNameNotExists(childContentName); +}); + +// TODO: Remove skip when the front-end is ready. +test.skip('can create child node in child node', async ({umbracoApi, umbracoUi}) => { + // Arrange + const childOfChildContentName = 'ChildOfChildContent'; + const childOfChildDocumentTypeName = 'ChildOfChildDocumentType'; + let childOfChildDocumentTypeId: any; + let childContentId: any; + await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); + childOfChildDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childOfChildDocumentTypeName); + childDocumentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(childDocumentTypeName, childOfChildDocumentTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + childContentId = await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.clickActionsMenuForContent(childContentName); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.clickLabelWithName(childOfChildDocumentTypeName); + // This wait is needed + await umbracoUi.waitForTimeout(500); + await umbracoUi.content.enterContentName(childOfChildContentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const childOfChildData = await umbracoApi.document.getChildren(childContentId); + expect(childOfChildData[0].variants[0].name).toBe(childOfChildContentName); + // verify that the child content displays in the tree after reloading children + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickReloadButton(); + await umbracoUi.content.clickCaretButtonForContentName(childContentName); + await umbracoUi.content.doesContentTreeHaveName(childOfChildContentName); + + // Clean + await umbracoApi.documentType.ensureNameNotExists(childOfChildDocumentTypeName); + await umbracoApi.document.ensureNameNotExists(childOfChildContentName); +}); + +test('cannot publish child if the parent is not published', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickCaretButtonForContentName(contentName); + await umbracoUi.content.clickActionsMenuForContent(childContentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isErrorNotificationVisible(); + const contentData = await umbracoApi.document.getByName(childContentName); + expect(contentData.variants[0].state).toBe('Draft'); +}); + +test('can publish with descendants', async ({umbracoApi, umbracoUi}) => { + // Arrange + childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, contentId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Published'); + const childContentData = await umbracoApi.document.getByName(contentName); + expect(childContentData.variants[0].state).toBe('Published'); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index f0a60cd9cbe0..43d14564573d 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -1,165 +1,162 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -// Remove smoke tag before merging -test.describe('Content tests', {tag: '@smoke'}, () => { - let documentTypeId = ''; - let contentId = ''; - const contentName = 'TestContent'; - const documentTypeName = 'TestDocumentTypeForContent'; - const dataTypeName = 'Textstring'; - const contentText = 'This is test content text'; - - test.beforeEach(async ({umbracoApi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); - - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); - - test('can create empty content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const expectedState = 'Draft'; - await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.variants[0].state).toBe(expectedState); - }); - - test('can save and publish empty content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const expectedState = 'Published'; - await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.variants[0].state).toBe(expectedState); - }); - - test('can create content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.enterTextstring(contentText); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value).toBe(contentText); - }); - - test('can rename content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const wrongContentName = 'Wrong Content Name'; - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - contentId = await umbracoApi.document.createDefaultDocument(wrongContentName, documentTypeId); - expect(await umbracoApi.document.doesNameExist(wrongContentName)).toBeTruthy(); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(wrongContentName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const updatedContentData = await umbracoApi.document.get(contentId); - expect(updatedContentData.variants[0].name).toEqual(contentName); - }); - - test('can update content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const wrongContentText = 'This is wrong test content text'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, wrongContentText, dataTypeName); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.enterTextstring(contentText); - await umbracoUi.content.clickSaveButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const updatedContentData = await umbracoApi.document.get(contentId); - expect(updatedContentData.variants[0].name).toEqual(contentName); - expect(updatedContentData.values[0].value).toBe(contentText); - }); - - test('can publish content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickPublishButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.variants[0].state).toBe('Published'); - }); - - test('can unpublish content', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); - const publishData = {"publishSchedules":[{"culture":null}]}; - await umbracoApi.document.publish(contentId, publishData); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickUnpublishButton(); - await umbracoUi.content.clickConfirmToUnpublishButton(); - - // Assert - await umbracoUi.content.isSuccessNotificationVisible(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.variants[0].state).toBe('Draft'); - }); +let documentTypeId = ''; +let contentId = ''; +const contentName = 'TestContent'; +const documentTypeName = 'TestDocumentTypeForContent'; +const dataTypeName = 'Textstring'; +const contentText = 'This is test content text'; + +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); + +test('can create empty content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const expectedState = 'Draft'; + await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe(expectedState); +}); + +test('can save and publish empty content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const expectedState = 'Published'; + await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe(expectedState); +}); + +test('can create content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterTextstring(contentText); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toBe(contentText); +}); + +test('can rename content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const wrongContentName = 'Wrong Content Name'; + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(wrongContentName, documentTypeId); + expect(await umbracoApi.document.doesNameExist(wrongContentName)).toBeTruthy(); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(wrongContentName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const updatedContentData = await umbracoApi.document.get(contentId); + expect(updatedContentData.variants[0].name).toEqual(contentName); +}); + +test('can update content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const wrongContentText = 'This is wrong test content text'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, wrongContentText, dataTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterTextstring(contentText); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const updatedContentData = await umbracoApi.document.get(contentId); + expect(updatedContentData.variants[0].name).toEqual(contentName); + expect(updatedContentData.values[0].value).toBe(contentText); +}); + +test('can publish content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Published'); +}); + +test('can unpublish content', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + contentId = await umbracoApi.document.createDocumentWithTextContent(contentName, documentTypeId, contentText, dataTypeName); + const publishData = {"publishSchedules":[{"culture":null}]}; + await umbracoApi.document.publish(contentId, publishData); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickUnpublishButton(); + await umbracoUi.content.clickConfirmToUnpublishButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.variants[0].state).toBe('Draft'); }); \ No newline at end of file diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts index 99daa22e4124..79cf1211e052 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentInfoTab.spec.ts @@ -1,146 +1,143 @@ import { expect } from '@playwright/test'; import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; -// Remove smoke tag before merging -test.describe('Content info tab tests', {tag: '@smoke'}, () => { - let documentTypeId = ''; - let contentId = ''; - const contentName = 'TestInfoTab'; - const documentTypeName = 'TestDocumentTypeForContent'; - - test.beforeEach(async ({umbracoApi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); +let documentTypeId = ''; +let contentId = ''; +const contentName = 'TestInfoTab'; +const documentTypeName = 'TestDocumentTypeForContent'; - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); - test('can see correct information when published', async ({umbracoApi, umbracoUi}) => { - // Arrange - const notPublishContentLink = 'This document is published but is not in the cache'; - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.doesLinkHaveText(notPublishContentLink); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - const contentData = await umbracoApi.document.get(contentId); - // TODO: Uncomment this when front-end is ready. Currently the link is not updated immediately after publishing - //await umbracoUi.content.doesLinkHaveText(contentData.urls[0].url); - await umbracoUi.content.doesIdHaveText(contentData.id); - await umbracoUi.content.doesPublicationStatusHaveText(contentData.variants[0].state === 'Draft' ? 'Unpublished' : contentData.variants[0].state); - const expectedCreatedDate = new Date(contentData.variants[0].createDate).toLocaleString("en-US", { - year: "numeric", - month: "long", - day: "numeric", - hour: "numeric", - minute: "numeric", - second: "numeric", - hour12: true, - }); - await umbracoUi.content.doesCreatedDateHaveText(expectedCreatedDate); - }); +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); - // TODO: Remove skip when the frond-end is ready. Currently the document type is not opened after clicking to the button - test.skip('can open document type', async ({umbracoApi, umbracoUi}) => { - // Arrange - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.clickDocumentTypeByName(documentTypeName); - - // Assert - await umbracoUi.content.isDocumentTypeModalVisible(documentTypeName); +test('can see correct information when published', async ({umbracoApi, umbracoUi}) => { + // Arrange + const notPublishContentLink = 'This document is published but is not in the cache'; + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.doesLinkHaveText(notPublishContentLink); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + const contentData = await umbracoApi.document.get(contentId); + // TODO: Uncomment this when front-end is ready. Currently the link is not updated immediately after publishing + //await umbracoUi.content.doesLinkHaveText(contentData.urls[0].url); + await umbracoUi.content.doesIdHaveText(contentData.id); + await umbracoUi.content.doesPublicationStatusHaveText(contentData.variants[0].state === 'Draft' ? 'Unpublished' : contentData.variants[0].state); + const expectedCreatedDate = new Date(contentData.variants[0].createDate).toLocaleString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + hour: "numeric", + minute: "numeric", + second: "numeric", + hour12: true, }); + await umbracoUi.content.doesCreatedDateHaveText(expectedCreatedDate); +}); - test('can open template', async ({umbracoApi, umbracoUi}) => { - // Arrange - const templateName = "TestTemplateForContent"; - await umbracoApi.template.ensureNameNotExists(templateName); - const templateId = await umbracoApi.template.createDefaultTemplate(templateName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, templateId, true); - contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, templateId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.clickTemplateByName(templateName); - - // Assert - await umbracoUi.content.isTemplateModalVisible(templateName); - - // Clean - await umbracoApi.template.ensureNameNotExists(templateName); - }); +// TODO: Remove skip when the frond-end is ready. Currently the document type is not opened after clicking to the button +test.skip('can open document type', async ({umbracoApi, umbracoUi}) => { + // Arrange + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickDocumentTypeByName(documentTypeName); + + // Assert + await umbracoUi.content.isDocumentTypeModalVisible(documentTypeName); +}); - test('can change template', async ({umbracoApi, umbracoUi}) => { - // Arrange - const firstTemplateName = "TestTemplateOneForContent"; - const secondTemplateName = "TestTemplateTwoForContent"; - await umbracoApi.template.ensureNameNotExists(firstTemplateName); - await umbracoApi.template.ensureNameNotExists(secondTemplateName); - const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); - const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithTwoAllowedTemplates(documentTypeName, firstTemplateId, secondTemplateId, true); - contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.changeTemplate(firstTemplateName, secondTemplateName); - await umbracoUi.content.clickSaveButton(); - - // Assert - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.template.id).toBe(secondTemplateId); - - // Clean - await umbracoApi.template.ensureNameNotExists(firstTemplateName); - await umbracoApi.template.ensureNameNotExists(secondTemplateName); - }); +test('can open template', async ({umbracoApi, umbracoUi}) => { + // Arrange + const templateName = "TestTemplateForContent"; + await umbracoApi.template.ensureNameNotExists(templateName); + const templateId = await umbracoApi.template.createDefaultTemplate(templateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, templateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, templateId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickTemplateByName(templateName); + + // Assert + await umbracoUi.content.isTemplateModalVisible(templateName); + + // Clean + await umbracoApi.template.ensureNameNotExists(templateName); +}); - test('cannot change to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { - // Arrange - const firstTemplateName = "TestTemplateOneForContent"; - const secondTemplateName = "TestTemplateTwoForContent"; - await umbracoApi.template.ensureNameNotExists(firstTemplateName); - await umbracoApi.template.ensureNameNotExists(secondTemplateName); - const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); - const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, firstTemplateId, true); - contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.clickInfoTab(); - await umbracoUi.content.clickEditTemplateByName(firstTemplateName); - - // Assert - // This wait is needed to make sure the template name is visible when the modal is opened - await umbracoUi.waitForTimeout(1000); - await umbracoUi.content.isTemplateNameDisabled(secondTemplateName); - - // Clean - await umbracoApi.template.ensureNameNotExists(firstTemplateName); - await umbracoApi.template.ensureNameNotExists(secondTemplateName); - }); +test('can change template', async ({umbracoApi, umbracoUi}) => { + // Arrange + const firstTemplateName = "TestTemplateOneForContent"; + const secondTemplateName = "TestTemplateTwoForContent"; + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); + const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); + const secondTemplateId = await umbracoApi.template.createDefaultTemplate(secondTemplateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithTwoAllowedTemplates(documentTypeName, firstTemplateId, secondTemplateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.changeTemplate(firstTemplateName, secondTemplateName); + await umbracoUi.content.clickSaveButton(); + + // Assert + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.template.id).toBe(secondTemplateId); + + // Clean + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); +}); + +test('cannot change to a template that is not allowed in the document type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const firstTemplateName = "TestTemplateOneForContent"; + const secondTemplateName = "TestTemplateTwoForContent"; + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); + const firstTemplateId = await umbracoApi.template.createDefaultTemplate(firstTemplateName); + await umbracoApi.template.createDefaultTemplate(secondTemplateName); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedTemplate(documentTypeName, firstTemplateId, true); + contentId = await umbracoApi.document.createDocumentWithTemplate(contentName, documentTypeId, firstTemplateId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.clickInfoTab(); + await umbracoUi.content.clickEditTemplateByName(firstTemplateName); + + // Assert + // This wait is needed to make sure the template name is visible when the modal is opened + await umbracoUi.waitForTimeout(1000); + await umbracoUi.content.isTemplateNameDisabled(secondTemplateName); + + // Clean + await umbracoApi.template.ensureNameNotExists(firstTemplateName); + await umbracoApi.template.ensureNameNotExists(secondTemplateName); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts index 9a9d8a8d0620..87baa77dbd11 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -1,179 +1,176 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -// Remove smoke tag before merging -test.describe('Content with property editors tests', {tag: '@smoke'}, () => { - const contentName = 'TestContent'; - const documentTypeName = 'TestDocumentTypeForContent'; - - test.beforeEach(async ({umbracoApi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.document.ensureNameNotExists(contentName); - }); - - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); - - test('can create content with the Rich Text Editor datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'Richtext editor'; - const contentText = 'This is Rich Text Editor content!'; - const expectedContentValue = { - blocks: { - contentData: [], - layout: {}, - propertyEditorAlias: 'Umbraco.TinyMCE', - settingsData: [], - }, - markup: '

' + contentText + '

', - }; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.enterRichTextArea(contentText); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value).toEqual(expectedContentValue); - }); - - test('can create content with the text area datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'Textarea'; - const contentText = 'This is Textarea content!'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.enterTextArea(contentText); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value).toEqual(contentText); - }); - - // TODO: Remove skip when the front-end is ready. Currently it returns error when publishing a content - test.skip('can create content with the upload file datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'Upload File'; - const uploadFilePath = 'Umbraco.png'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.changeFileTypeWithFileChooser('./fixtures/mediaLibrary/' + uploadFilePath); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value.src).toContainEqual(uploadFilePath); - }); - - test('can create content with the tags datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'Tags'; - const tagName = 'test'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.addTags(tagName); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value).toEqual([tagName]); - }); - - test('can create content with the content picker datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'Content Picker'; - const contentPickerName = 'TestContentPicker'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - const contentPickerId = await umbracoApi.document.createDefaultDocument(contentPickerName, documentTypeId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - await umbracoUi.content.addContentPicker(contentPickerName); - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - const contentData = await umbracoApi.document.getByName(contentName); - expect(contentData.values[0].value).toEqual(contentPickerId); - - // Clean - await umbracoApi.document.ensureNameNotExists(contentPickerName); - }); - - // TODO: Remove skip and update the test when the front-end is ready. Currently the list of content is not displayed. - test.skip('can create content with the list view - content datatype', async ({umbracoApi, umbracoUi}) => { - // Arrange - const dataTypeName = 'List View - Content'; - const contentListViewName = 'TestListViewContent'; - const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); - const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); - const contentPickerId = await umbracoApi.document.createDefaultDocument(contentListViewName, documentTypeId); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - - // Act - await umbracoUi.content.clickActionsMenuAtRoot(); - await umbracoUi.content.clickCreateButton(); - await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.enterContentName(contentName); - // TODO: add step to interact with the list - await umbracoUi.content.clickSaveAndPublishButton(); - - // Assert - await umbracoUi.content.doesSuccessNotificationsHaveCount(2); - expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); - - // Clean - await umbracoApi.document.delete(contentPickerId); - }); +const contentName = 'TestContent'; +const documentTypeName = 'TestDocumentTypeForContent'; + +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); + +test('can create content with the Rich Text Editor datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Richtext editor'; + const contentText = 'This is Rich Text Editor content!'; + const expectedContentValue = { + blocks: { + contentData: [], + layout: {}, + propertyEditorAlias: 'Umbraco.TinyMCE', + settingsData: [], + }, + markup: '

' + contentText + '

', + }; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterRichTextArea(contentText); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(expectedContentValue); +}); + +test('can create content with the text area datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Textarea'; + const contentText = 'This is Textarea content!'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.enterTextArea(contentText); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(contentText); +}); + +// TODO: Remove skip when the front-end is ready. Currently it returns error when publishing a content +test.skip('can create content with the upload file datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Upload File'; + const uploadFilePath = 'Umbraco.png'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.changeFileTypeWithFileChooser('./fixtures/mediaLibrary/' + uploadFilePath); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value.src).toContainEqual(uploadFilePath); +}); + +test('can create content with the tags datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Tags'; + const tagName = 'test'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.addTags(tagName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual([tagName]); +}); + +test('can create content with the content picker datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'Content Picker'; + const contentPickerName = 'TestContentPicker'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + const contentPickerId = await umbracoApi.document.createDefaultDocument(contentPickerName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.addContentPicker(contentPickerName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].value).toEqual(contentPickerId); + + // Clean + await umbracoApi.document.ensureNameNotExists(contentPickerName); +}); + +// TODO: Remove skip and update the test when the front-end is ready. Currently the list of content is not displayed. +test.skip('can create content with the list view - content datatype', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeName = 'List View - Content'; + const contentListViewName = 'TestListViewContent'; + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + const contentPickerId = await umbracoApi.document.createDefaultDocument(contentListViewName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + // TODO: add step to interact with the list + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + + // Clean + await umbracoApi.document.delete(contentPickerId); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index 5dcd932a82e5..bd138d66d5c6 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -1,128 +1,125 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -// Remove smoke tag before merging -test.describe('Culture and Hostnames tests', {tag: '@smoke'}, () => { - let documentTypeId = ''; - let contentId = ''; - const contentName = 'TestCultureAndHostnames'; - const documentTypeName = 'TestDocumentTypeForContent'; - const languageName = 'Danish'; - const isoCode = 'da'; - const domainName = 'testdomain'; - const domainValue = [ - { - "domainName": domainName, - "isoCode": isoCode - } - ]; - - test.beforeEach(async ({umbracoApi, umbracoUi}) => { - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.language.ensureNameNotExists(languageName); - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoApi.language.create(languageName, false, false, isoCode); - await umbracoUi.goToBackOffice(); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - }); - - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.language.ensureNameNotExists(languageName); - }); - - test('can add a culture', async ({umbracoApi, umbracoUi}) => { - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCultureAndHostnamesButton(); - await umbracoUi.content.selectCultureLanguageOption(languageName); - await umbracoUi.content.clickSaveModalButton(); - - // Assert - const domainsData = await umbracoApi.document.getDomains(contentId); - expect(domainsData.defaultIsoCode).toEqual(isoCode); - }); - - test('can add a domain', async ({umbracoApi, umbracoUi}) => { - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCultureAndHostnamesButton(); - await umbracoUi.content.clickAddNewDomainButton(); - await umbracoUi.content.enterDomain(domainName); - await umbracoUi.content.selectDomainLanguageOption(languageName); - await umbracoUi.content.clickSaveModalButton(); - - // Assert - const domainsData = await umbracoApi.document.getDomains(contentId); - expect(domainsData.domains.length).toBe(1); - expect(domainsData.domains[0].domainName).toEqual(domainName); - expect(domainsData.domains[0].isoCode).toEqual(isoCode); - }); - - test('can update culture and hostname', async ({umbracoApi, umbracoUi}) => { - // Arrange - const updatedDomainName = 'updateddomain'; - let domainsData = await umbracoApi.document.getDomains(contentId); - domainsData.domains = domainValue; - await umbracoApi.document.updateDomains(contentId, domainsData); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCultureAndHostnamesButton(); - await umbracoUi.content.enterDomain(updatedDomainName); - await umbracoUi.content.clickSaveModalButton(); - - // Assert - domainsData = await umbracoApi.document.getDomains(contentId); - expect(domainsData.domains[0].domainName).toEqual(updatedDomainName); - expect(domainsData.domains[0].isoCode).toEqual(isoCode); - }); - - test('can delete culture and hostname', async ({umbracoApi, umbracoUi}) => { - // Arrange - let domainsData = await umbracoApi.document.getDomains(contentId); - domainsData.domains = domainValue; - await umbracoApi.document.updateDomains(contentId, domainsData); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCultureAndHostnamesButton(); - await umbracoUi.content.clickDeleteDomainButton(); - await umbracoUi.content.clickSaveModalButton(); - - // Assert - domainsData = await umbracoApi.document.getDomains(contentId); - expect(domainsData.domains.length).toBe(0); - }); - - test('can add culture and hostname for multiple languages', async ({umbracoApi, umbracoUi}) => { - // Arrange - const secondDomainName = 'testdomain2'; - const secondLanguageName = 'Vietnamese'; - const secondIsoCode = 'vi'; - await umbracoApi.language.ensureNameNotExists(secondLanguageName); - await umbracoApi.language.create(secondLanguageName, false, false, secondIsoCode); - - // Act - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickCultureAndHostnamesButton(); - await umbracoUi.content.clickAddNewDomainButton(); - await umbracoUi.content.enterDomain(domainName, 0); - await umbracoUi.content.selectDomainLanguageOption(languageName, 0); - await umbracoUi.content.clickAddNewDomainButton(); - await umbracoUi.content.enterDomain(secondDomainName, 1); - await umbracoUi.content.selectDomainLanguageOption(secondLanguageName, 1); - await umbracoUi.content.clickSaveModalButton(); - - // Assert - const domainsData = await umbracoApi.document.getDomains(contentId); - expect(domainsData.domains.length).toBe(2); - expect(domainsData.domains[0].domainName).toEqual(domainName); - expect(domainsData.domains[0].isoCode).toEqual(isoCode); - expect(domainsData.domains[1].domainName).toEqual(secondDomainName); - expect(domainsData.domains[1].isoCode).toEqual(secondIsoCode); - }); +let documentTypeId = ''; +let contentId = ''; +const contentName = 'TestCultureAndHostnames'; +const documentTypeName = 'TestDocumentTypeForContent'; +const languageName = 'Danish'; +const isoCode = 'da'; +const domainName = 'testdomain'; +const domainValue = [ + { + "domainName": domainName, + "isoCode": isoCode + } +]; + +test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.language.ensureNameNotExists(languageName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoApi.language.create(languageName, false, false, isoCode); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.language.ensureNameNotExists(languageName); +}); + +test('can add a culture', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.selectCultureLanguageOption(languageName); + await umbracoUi.content.clickSaveModalButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.defaultIsoCode).toEqual(isoCode); +}); + +test('can add a domain', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(domainName); + await umbracoUi.content.selectDomainLanguageOption(languageName); + await umbracoUi.content.clickSaveModalButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(1); + expect(domainsData.domains[0].domainName).toEqual(domainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); +}); + +test('can update culture and hostname', async ({umbracoApi, umbracoUi}) => { + // Arrange + const updatedDomainName = 'updateddomain'; + let domainsData = await umbracoApi.document.getDomains(contentId); + domainsData.domains = domainValue; + await umbracoApi.document.updateDomains(contentId, domainsData); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.enterDomain(updatedDomainName); + await umbracoUi.content.clickSaveModalButton(); + + // Assert + domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains[0].domainName).toEqual(updatedDomainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); +}); + +test('can delete culture and hostname', async ({umbracoApi, umbracoUi}) => { + // Arrange + let domainsData = await umbracoApi.document.getDomains(contentId); + domainsData.domains = domainValue; + await umbracoApi.document.updateDomains(contentId, domainsData); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickDeleteDomainButton(); + await umbracoUi.content.clickSaveModalButton(); + + // Assert + domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(0); +}); + +test('can add culture and hostname for multiple languages', async ({umbracoApi, umbracoUi}) => { + // Arrange + const secondDomainName = 'testdomain2'; + const secondLanguageName = 'Vietnamese'; + const secondIsoCode = 'vi'; + await umbracoApi.language.ensureNameNotExists(secondLanguageName); + await umbracoApi.language.create(secondLanguageName, false, false, secondIsoCode); + + // Act + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickCultureAndHostnamesButton(); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(domainName, 0); + await umbracoUi.content.selectDomainLanguageOption(languageName, 0); + await umbracoUi.content.clickAddNewDomainButton(); + await umbracoUi.content.enterDomain(secondDomainName, 1); + await umbracoUi.content.selectDomainLanguageOption(secondLanguageName, 1); + await umbracoUi.content.clickSaveModalButton(); + + // Assert + const domainsData = await umbracoApi.document.getDomains(contentId); + expect(domainsData.domains.length).toBe(2); + expect(domainsData.domains[0].domainName).toEqual(domainName); + expect(domainsData.domains[0].isoCode).toEqual(isoCode); + expect(domainsData.domains[1].domainName).toEqual(secondDomainName); + expect(domainsData.domains[1].isoCode).toEqual(secondIsoCode); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts index e6da0363f3a2..0cfe5e2c18d7 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RedirectManagement.spec.ts @@ -1,118 +1,115 @@ import {ConstantHelper, test} from '@umbraco/playwright-testhelpers'; import {expect} from "@playwright/test"; -// Remove smoke tag before merging -test.describe('Redirect Management tests', {tag: '@smoke'}, () => { - const disableStatus = 'Disabled'; - const enableStatus = 'Enabled'; - let documentTypeId = ''; - let contentId = ''; - const contentName = 'TestContent'; - const documentTypeName = 'TestDocumentType'; - const updatedContentName = 'UpdatedContentName'; +const disableStatus = 'Disabled'; +const enableStatus = 'Enabled'; +let documentTypeId = ''; +let contentId = ''; +const contentName = 'TestContent'; +const documentTypeName = 'TestDocumentType'; +const updatedContentName = 'UpdatedContentName'; - test.beforeEach(async ({umbracoApi, umbracoUi}) => { - await umbracoApi.redirectManagement.setStatus(enableStatus); - await umbracoUi.goToBackOffice(); - // Create a content - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); - contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - // Publish the content - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.content.clickActionsMenuForContent(contentName); - await umbracoUi.content.clickPublishButton(); - }); +test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.redirectManagement.setStatus(enableStatus); + await umbracoUi.goToBackOffice(); + // Create a content + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + documentTypeId = await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); + contentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + // Publish the content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.clickActionsMenuForContent(contentName); + await umbracoUi.content.clickPublishButton(); +}); - test.afterEach(async ({umbracoApi}) => { - await umbracoApi.redirectManagement.setStatus(enableStatus); - await umbracoApi.document.ensureNameNotExists(contentName); - await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - }); +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.redirectManagement.setStatus(enableStatus); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); - test('can disable URL tracker', async ({umbracoApi, umbracoUi}) => { - // Act - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.clickDisableURLTrackerButton(); - await umbracoUi.redirectManagement.clickDisableButton(); +test('can disable URL tracker', async ({umbracoApi, umbracoUi}) => { + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.clickDisableURLTrackerButton(); + await umbracoUi.redirectManagement.clickDisableButton(); - // Assert - // Verfiy that if renaming a published page, there are no redirects have been made - // rename the published content - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.enterContentName(updatedContentName); - await umbracoUi.content.clickSaveAndPublishButton(); - // verify that there is no redirects have been made - const contentData = await umbracoApi.document.get(contentId); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); - // Verify that the status is Disable - const statusData = await umbracoApi.redirectManagement.getStatus(); - expect(statusData.status).toBe(disableStatus); - }); + // Assert + // Verfiy that if renaming a published page, there are no redirects have been made + // rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); + // verify that there is no redirects have been made + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); + // Verify that the status is Disable + const statusData = await umbracoApi.redirectManagement.getStatus(); + expect(statusData.status).toBe(disableStatus); +}); - // TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page - test.skip('can re-enable URL tracker', async ({umbracoApi, umbracoUi}) => { - // Arrange - await umbracoApi.redirectManagement.setStatus(disableStatus); +// TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page +test.skip('can re-enable URL tracker', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.redirectManagement.setStatus(disableStatus); - // Act - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.clickEnableURLTrackerButton(); + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.clickEnableURLTrackerButton(); - // Assert - // Verfiy that if renaming a published page, there are one redirects have been made - // rename the published content - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.enterContentName(updatedContentName); - await umbracoUi.content.clickSaveAndPublishButton(); - // verify that there is one redirects have been made - const contentData = await umbracoApi.document.get(contentId); - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url); - // Verify that the status is Enable - const statusData = await umbracoApi.redirectManagement.getStatus(); - expect(statusData.status).toBe(enableStatus); - }); + // Assert + // Verfiy that if renaming a published page, there are one redirects have been made + // rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); + // verify that there is one redirects have been made + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url); + // Verify that the status is Enable + const statusData = await umbracoApi.redirectManagement.getStatus(); + expect(statusData.status).toBe(enableStatus); +}); - // TODO: Remove skip and update this when the front-end is ready. Currently it always return "No redirects matching this search criteria" when searching. - test.skip('can search for original URL', async ({umbracoUi}) => { - // Arrange - const searchKeyword = '/test-content/'; - // TODO: rename content to add an item in the redirect url management +// TODO: Remove skip and update this when the front-end is ready. Currently it always return "No redirects matching this search criteria" when searching. +test.skip('can search for original URL', async ({umbracoUi}) => { + // Arrange + const searchKeyword = '/test-content/'; + // TODO: rename content to add an item in the redirect url management - // Act - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.enterOriginalUrl(searchKeyword); - await umbracoUi.redirectManagement.clickSearchButton(); - - // Assert - // TODO: verify the search result - }); + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.enterOriginalUrl(searchKeyword); + await umbracoUi.redirectManagement.clickSearchButton(); + + // Assert + // TODO: verify the search result +}); - // TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page - test.skip('can delete a redirect', async ({umbracoApi, umbracoUi}) => { - // Arrange - // Rename the published content - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.content.openContent(contentName); - await umbracoUi.content.enterContentName(updatedContentName); - await umbracoUi.content.clickSaveAndPublishButton(); +// TODO: Remove skip when the frond-end is ready. Currently there is no redirect have been made after renaming a published page +test.skip('can delete a redirect', async ({umbracoApi, umbracoUi}) => { + // Arrange + // Rename the published content + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.openContent(contentName); + await umbracoUi.content.enterContentName(updatedContentName); + await umbracoUi.content.clickSaveAndPublishButton(); - // Act - await umbracoUi.content.goToSection(ConstantHelper.sections.content); - await umbracoUi.redirectManagement.clickRedirectManagementTab(); - await umbracoUi.redirectManagement.deleteFirstRedirectURL(); + // Act + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.redirectManagement.clickRedirectManagementTab(); + await umbracoUi.redirectManagement.deleteFirstRedirectURL(); - // Assert - const contentData = await umbracoApi.document.get(contentId); - await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); - }); + // Assert + const contentData = await umbracoApi.document.get(contentId); + await umbracoUi.redirectManagement.isTextWithExactNameVisible(contentData.urls[0].url, false); }); From ed9909657ed1b63910657ed0137ff00310b86b7a Mon Sep 17 00:00:00 2001 From: Nhu Dinh Date: Thu, 30 May 2024 15:11:39 +0200 Subject: [PATCH 31/31] Added smoke tests --- .../tests/DefaultConfig/Content/ChildrenContent.spec.ts | 4 ++-- .../tests/DefaultConfig/Content/Content.spec.ts | 8 ++++---- .../Content/ContentWithPropertyEditors.spec.ts | 2 +- .../DefaultConfig/Content/CultureAndHostnames.spec.ts | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts index 88cfac62c6d1..bcbb9656dc66 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ChildrenContent.spec.ts @@ -21,7 +21,7 @@ test.afterEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); -test('can create child node', async ({umbracoApi, umbracoUi}) => { +test('can create child node', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); @@ -112,7 +112,7 @@ test('cannot publish child if the parent is not published', async ({umbracoApi, expect(contentData.variants[0].state).toBe('Draft'); }); -test('can publish with descendants', async ({umbracoApi, umbracoUi}) => { +test('can publish with descendants', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange childDocumentTypeId = await umbracoApi.documentType.createDefaultDocumentType(childDocumentTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAllowedChildNode(documentTypeName, childDocumentTypeId, true); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts index 43d14564573d..98f0a6ec2170 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -38,7 +38,7 @@ test('can create empty content', async ({umbracoApi, umbracoUi}) => { expect(contentData.variants[0].state).toBe(expectedState); }); -test('can save and publish empty content', async ({umbracoApi, umbracoUi}) => { +test('can save and publish empty content', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange const expectedState = 'Published'; await umbracoApi.documentType.createDefaultDocumentTypeWithAllowAsRoot(documentTypeName); @@ -59,7 +59,7 @@ test('can save and publish empty content', async ({umbracoApi, umbracoUi}) => { expect(contentData.variants[0].state).toBe(expectedState); }); -test('can create content', async ({umbracoApi, umbracoUi}) => { +test('can create content', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); @@ -101,7 +101,7 @@ test('can rename content', async ({umbracoApi, umbracoUi}) => { expect(updatedContentData.variants[0].name).toEqual(contentName); }); -test('can update content', async ({umbracoApi, umbracoUi}) => { +test('can update content', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange const wrongContentText = 'This is wrong test content text'; const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); @@ -140,7 +140,7 @@ test('can publish content', async ({umbracoApi, umbracoUi}) => { expect(contentData.variants[0].state).toBe('Published'); }); -test('can unpublish content', async ({umbracoApi, umbracoUi}) => { +test('can unpublish content', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts index 87baa77dbd11..a6f998e80acf 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithPropertyEditors.spec.ts @@ -14,7 +14,7 @@ test.afterEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(documentTypeName); }); -test('can create content with the Rich Text Editor datatype', async ({umbracoApi, umbracoUi}) => { +test('can create content with the Rich Text Editor datatype', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Arrange const dataTypeName = 'Richtext editor'; const contentText = 'This is Rich Text Editor content!'; diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts index bd138d66d5c6..4a09329f9bcd 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CultureAndHostnames.spec.ts @@ -32,7 +32,7 @@ test.afterEach(async ({umbracoApi}) => { await umbracoApi.language.ensureNameNotExists(languageName); }); -test('can add a culture', async ({umbracoApi, umbracoUi}) => { +test('can add a culture', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton(); @@ -44,7 +44,7 @@ test('can add a culture', async ({umbracoApi, umbracoUi}) => { expect(domainsData.defaultIsoCode).toEqual(isoCode); }); -test('can add a domain', async ({umbracoApi, umbracoUi}) => { +test('can add a domain', {tag: '@smoke'}, async ({umbracoApi, umbracoUi}) => { // Act await umbracoUi.content.clickActionsMenuForContent(contentName); await umbracoUi.content.clickCultureAndHostnamesButton();