From 78664ddd685f9fad954e1397821b953e8d37c78c Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Mon, 5 May 2025 14:01:30 +0200 Subject: [PATCH 1/7] Added tests --- .../SecondLevelBlockProperties.spec.ts | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts new file mode 100644 index 000000000000..081cdfa37178 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts @@ -0,0 +1,141 @@ +import {AliasHelper, ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +// Content Name +const contentName = 'ContentName'; + +// Document Type +const documentTypeName = 'DocumentTypeName'; +let documentTypeId = null; +const documentTypeGroupName = 'DocumentGroup'; + +// Block Grid +const blockGridDataTypeName = 'BlockGridName'; +let blockGridDataTypeId = null; + +const blockListDataTypeName = 'BlockListName'; +let blockListDataTypeId = null; + +const richTextDataTypeName = 'RichTextName'; +let richTextDataTypeId = null; + +// Element Types +const blockGridElementTypeName = 'BlockGridElementName'; +let blockGridElementTypeId = null; +const blockGridElementGroupName = 'ElementGroup'; + +const blockListElementTypeName = 'BlockListElementName'; +let blockListElementTypeId = null; +const blockListElementGroupName = 'ElementGroup'; + +const richTextElementTypeName = 'RichTextElementName'; +let richTextElementTypeId = null; +const richTextElementGroupName = 'ElementGroup'; + +// +// +// // Property Editor +// const propertyEditorName = 'ProperyEditorInBlockName'; +// let propertyEditorId = null; +// const optionValues = ['testOption1', 'testOption2']; + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); + // await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + // await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); +}); + +test('can publish a block grid editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const richTextEditorValue = 'Hello World'; + const expectedRichTextEditorOutputValue = '

Hello World

'; + const richTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(richTextDataTypeName); + richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); + blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, richTextElementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(richTextElementTypeName); + await umbracoUi.content.enterRTETipTapEditor(richTextEditorValue); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + await umbracoApi.document.doesBlockGridContainBlockWithRichTextEditorWithValue(contentName, AliasHelper.toAlias(blockGridDataTypeName)); + + // Asserts that the value in the RTE is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockGridDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.markup).toContain(expectedRichTextEditorOutputValue); +}); + +test('can publish a block grid editor with a block list editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + propertyEditorId = await umbracoApi.dataType.createRadioboxDataType(propertyEditorName, optionValues); + elementTypeId = await umbracoApi.documentType.createDefaultElementType(blockName, elementGroupName, propertyEditorName, propertyEditorId, true); + blockGridId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridName, elementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridName, blockGridId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(blockName); + // Do not select any radiobox values and the validation error appears + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue); + // Select a radiobox value and the validation error disappears + await umbracoUi.content.chooseRadioboxOption(optionValues[0]); + await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue, false); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); +}); + +test('can publish a block grid editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + propertyEditorId = await umbracoApi.dataType.createRadioboxDataType(propertyEditorName, optionValues); + elementTypeId = await umbracoApi.documentType.createDefaultElementType(blockName, elementGroupName, propertyEditorName, propertyEditorId, true); + blockGridId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridName, elementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridName, blockGridId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(blockName); + // Do not select any radiobox values and the validation error appears + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue); + // Select a radiobox value and the validation error disappears + await umbracoUi.content.chooseRadioboxOption(optionValues[0]); + await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue, false); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); +}); + From f4ee06b72fb060c06c749a1e72e1f21bbee4f241 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Mon, 5 May 2025 22:42:58 +0200 Subject: [PATCH 2/7] Added rest of tests for grid --- .../SecondLevelBlockProperties.spec.ts | 93 +++++++++++-------- 1 file changed, 54 insertions(+), 39 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts index 081cdfa37178..d0a4bac06058 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts @@ -16,28 +16,25 @@ let blockGridDataTypeId = null; const blockListDataTypeName = 'BlockListName'; let blockListDataTypeId = null; -const richTextDataTypeName = 'RichTextName'; -let richTextDataTypeId = null; // Element Types const blockGridElementTypeName = 'BlockGridElementName'; let blockGridElementTypeId = null; -const blockGridElementGroupName = 'ElementGroup'; +const blockGridElementGroupName = 'GridElementGroup'; const blockListElementTypeName = 'BlockListElementName'; let blockListElementTypeId = null; -const blockListElementGroupName = 'ElementGroup'; +const blockListElementGroupName = 'ListElementGroup'; const richTextElementTypeName = 'RichTextElementName'; let richTextElementTypeId = null; -const richTextElementGroupName = 'ElementGroup'; +const richTextElementGroupName = 'RTEElementGroup'; -// -// -// // Property Editor -// const propertyEditorName = 'ProperyEditorInBlockName'; -// let propertyEditorId = null; -// const optionValues = ['testOption1', 'testOption2']; + +const textStringElementTypeName = 'TextStringElementName'; +let textStringElementTypeId = null; +let textStringGroupName = 'TextGroup'; +const textStringDataTypeName = 'Textstring'; test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); @@ -46,12 +43,12 @@ test.afterEach(async ({umbracoApi}) => { await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); - // await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); - // await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); }); test('can publish a block grid editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { // Arrange + const richTextDataTypeName = 'RichTextName'; + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); const richTextEditorValue = 'Hello World'; const expectedRichTextEditorOutputValue = '

Hello World

'; const richTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(richTextDataTypeName); @@ -73,69 +70,87 @@ test('can publish a block grid editor with a rich text editor', async ({umbracoA // Assert await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); - await umbracoApi.document.doesBlockGridContainBlockWithRichTextEditorWithValue(contentName, AliasHelper.toAlias(blockGridDataTypeName)); - // Asserts that the value in the RTE is as expected const documentData = await umbracoApi.document.getByName(contentName); const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockGridDataTypeName)); expect(documentValues.value.contentData[0].values[0].value.markup).toContain(expectedRichTextEditorOutputValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); }); test('can publish a block grid editor with a block list editor', async ({umbracoApi, umbracoUi}) => { // Arrange - propertyEditorId = await umbracoApi.dataType.createRadioboxDataType(propertyEditorName, optionValues); - elementTypeId = await umbracoApi.documentType.createDefaultElementType(blockName, elementGroupName, propertyEditorName, propertyEditorId, true); - blockGridId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridName, elementTypeId, true); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridName, blockGridId, documentTypeGroupName); + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) + const textStringValue = 'Hello World'; + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, textStringElementTypeId); + blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, blockListDataTypeName, blockListDataTypeId); + blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, blockListElementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.goToContentWithName(contentName); // Act await umbracoUi.content.clickAddBlockElementButton(); - await umbracoUi.content.clickBlockElementWithName(blockName); - // Do not select any radiobox values and the validation error appears - await umbracoUi.content.clickCreateModalButton(); - await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue); - // Select a radiobox value and the validation error disappears - await umbracoUi.content.chooseRadioboxOption(optionValues[0]); - await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue, false); + await umbracoUi.content.clickBlockElementWithName(blockListElementTypeName); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); await umbracoUi.content.clickCreateModalButton(); await umbracoUi.content.clickSaveAndPublishButton(); // Assert await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockList is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockGridDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); }); test('can publish a block grid editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { // Arrange - propertyEditorId = await umbracoApi.dataType.createRadioboxDataType(propertyEditorName, optionValues); - elementTypeId = await umbracoApi.documentType.createDefaultElementType(blockName, elementGroupName, propertyEditorName, propertyEditorId, true); - blockGridId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridName, elementTypeId, true); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridName, blockGridId, documentTypeGroupName); + const textStringValue = 'Hello World'; + const secondBlockGridDataTypeName = 'SecondBlockGridDataTypeName'; + await umbracoApi.dataType.ensureNameNotExists(secondBlockGridDataTypeName); + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + const secondBlockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(secondBlockGridDataTypeName, textStringElementTypeId); + blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, secondBlockGridDataTypeName, secondBlockGridDataTypeId); + blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, blockGridElementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); - await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.goToContentWithName(contentName); // Act await umbracoUi.content.clickAddBlockElementButton(); - await umbracoUi.content.clickBlockElementWithName(blockName); - // Do not select any radiobox values and the validation error appears - await umbracoUi.content.clickCreateModalButton(); - await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue); - // Select a radiobox value and the validation error disappears - await umbracoUi.content.chooseRadioboxOption(optionValues[0]); - await umbracoUi.content.isValidationMessageVisible(ConstantHelper.validationMessages.emptyValue, false); + await umbracoUi.content.clickLinkWithName(blockGridElementTypeName, true); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); await umbracoUi.content.clickCreateModalButton(); await umbracoUi.content.clickSaveAndPublishButton(); // Assert await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockGrid is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockGridDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(secondBlockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); }); From 87cd6097e44b03b4a93d8eae2a33519f53b72173 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Tue, 6 May 2025 11:20:01 +0200 Subject: [PATCH 3/7] Added more tests --- .../SecondLevelBlockProperties.spec.ts | 26 ++- .../SecondLevelBlockProperties.spec.ts | 171 +++++++++++++++++ .../SecondLevelBlockProperties.spec.ts | 175 ++++++++++++++++++ 3 files changed, 362 insertions(+), 10 deletions(-) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts index d0a4bac06058..99b9cd189c4f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts @@ -13,29 +13,34 @@ const documentTypeGroupName = 'DocumentGroup'; const blockGridDataTypeName = 'BlockGridName'; let blockGridDataTypeId = null; -const blockListDataTypeName = 'BlockListName'; -let blockListDataTypeId = null; - - // Element Types +// Block Grid const blockGridElementTypeName = 'BlockGridElementName'; let blockGridElementTypeId = null; const blockGridElementGroupName = 'GridElementGroup'; - +// Block List const blockListElementTypeName = 'BlockListElementName'; let blockListElementTypeId = null; const blockListElementGroupName = 'ListElementGroup'; - +// Rich Text Editor const richTextElementTypeName = 'RichTextElementName'; let richTextElementTypeId = null; const richTextElementGroupName = 'RTEElementGroup'; - - +// Text String const textStringElementTypeName = 'TextStringElementName'; let textStringElementTypeId = null; let textStringGroupName = 'TextGroup'; const textStringDataTypeName = 'Textstring'; +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); +}); + test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); @@ -81,11 +86,12 @@ test('can publish a block grid editor with a rich text editor', async ({umbracoA test('can publish a block grid editor with a block list editor', async ({umbracoApi, umbracoUi}) => { // Arrange + const blockListDataTypeName = 'BlockListName'; await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) const textStringValue = 'Hello World'; const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); - blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, textStringElementTypeId); + const blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, textStringElementTypeId); blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, blockListDataTypeName, blockListDataTypeId); blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, blockListElementTypeId, true); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); @@ -98,6 +104,7 @@ test('can publish a block grid editor with a block list editor', async ({umbraco await umbracoUi.content.clickAddBlockElementButton(); await umbracoUi.content.clickBlockElementWithName(blockListElementTypeName); await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); await umbracoUi.content.enterTextstring(textStringValue); await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); await umbracoUi.content.clickCreateModalButton(); @@ -153,4 +160,3 @@ test('can publish a block grid editor with a block grid editor', async ({umbraco await umbracoApi.dataType.ensureNameNotExists(secondBlockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); }); - diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts new file mode 100644 index 000000000000..b8099ce5e2c7 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts @@ -0,0 +1,171 @@ +import {AliasHelper, ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +// Content Name +const contentName = 'ContentName'; + +// Document Type +const documentTypeName = 'DocumentTypeName'; +let documentTypeId = null; +const documentTypeGroupName = 'DocumentGroup'; + +// Block Grid +const blockListDataTypeName = 'BlockListName'; +let blockListDataTypeId = null; +// Element Types +// Block List +const blockListElementTypeName = 'BlockListElementName'; +let blockListElementTypeId = null; +const blockListElementGroupName = 'ListElementGroup'; +// Block Grid +const blockGridElementTypeName = 'BlockGridElementName'; +let blockGridElementTypeId = null; +const blockGridElementGroupName = 'GridElementGroup'; +// Rich Text Editor +const richTextElementTypeName = 'RichTextElementName'; +let richTextElementTypeId = null; +const richTextElementGroupName = 'RTEElementGroup'; +// Text String +const textStringElementTypeName = 'TextStringElementName'; +let textStringElementTypeId = null; +let textStringGroupName = 'TextGroup'; +const textStringDataTypeName = 'Textstring'; + +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); +}); + +test('can publish a block list editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const richTextDataTypeName = 'RichTextName'; + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + const richTextEditorValue = 'Hello World'; + const expectedRichTextEditorOutputValue = '

Hello World

'; + const richTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(richTextDataTypeName); + richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); + + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, richTextElementTypeId); + + // blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, richTextElementTypeId, true); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(richTextElementTypeName); + await umbracoUi.content.enterRTETipTapEditor(richTextEditorValue); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the RTE is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentRichTextValues = documentData.values[0].value.contentData[0].values.find(value => value.alias === AliasHelper.toAlias(richTextDataTypeName)); + expect(documentRichTextValues.value.markup).toContain(expectedRichTextEditorOutputValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); +}); + +test('can publish a block list editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const textStringValue = 'Hello World'; + const blockGridDataTypeName = 'BlockGridDataTypeName'; + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + const blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, textStringElementTypeId); + + blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); + + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockGridElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickLinkWithName(blockGridElementTypeName, true); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockGrid is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); +}); + +test('can publish a block list editor with a block list editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const textStringValue = 'Hello World'; + const secondBlockListDataTypeName = 'SecondBlockListName'; + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName) + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + + const secondBlockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(secondBlockListDataTypeName, textStringElementTypeId); + + blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, secondBlockListDataTypeName, secondBlockListDataTypeId); + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockListElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(blockListElementTypeName); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockList is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(secondBlockListDataTypeName); +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts new file mode 100644 index 000000000000..b417f25a6405 --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts @@ -0,0 +1,175 @@ +import {AliasHelper, ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +// Content Name +const contentName = 'ContentName'; + +// Document Type +const documentTypeName = 'DocumentTypeName'; +let documentTypeId = null; +const documentTypeGroupName = 'DocumentGroup'; + +// Block Grid +const richTextDataTypeName = 'RichTextDataType'; +let richTextDataTypeId = null; +// Element Types +// Block List +const blockListElementTypeName = 'BlockListElementName'; +let blockListElementTypeId = null; +const blockListElementGroupName = 'ListElementGroup'; +// Block Grid +const blockGridElementTypeName = 'BlockGridElementName'; +let blockGridElementTypeId = null; +const blockGridElementGroupName = 'GridElementGroup'; +// Rich Text Editor +const richTextElementTypeName = 'RichTextElementName'; +let richTextElementTypeId = null; +const richTextElementGroupName = 'RTEElementGroup'; +// Text String +const textStringElementTypeName = 'TextStringElementName'; +let textStringElementTypeId = null; +let textStringGroupName = 'TextGroup'; +const textStringDataTypeName = 'Textstring'; + +test.beforeEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); +}); + +test('can publish a rich text editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const secondRichTextDataTypeName = 'SecondRichTextName'; + await umbracoApi.dataType.ensureNameNotExists(secondRichTextDataTypeName); + const richTextEditorValue = 'Hello First World'; + const secondRichTextEditorValue = 'Hello Second World'; + const expectedRichTextEditorOutputValue = '

' + richTextEditorValue + '

'; + const secondExpectedRichTextEditorOutputValue = '

' + secondRichTextEditorValue + '

'; + const secondRichTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(secondRichTextDataTypeName); + richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, secondRichTextDataTypeName, secondRichTextEditorDataTypeId); + richTextDataTypeId = await umbracoApi.dataType.createRichTextEditorWithABlock(richTextDataTypeName, richTextElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, richTextDataTypeName, richTextDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.enterRTETipTapEditor(richTextEditorValue); + await umbracoUi.content.clickInsertBlockButton(); + await umbracoUi.content.clickBlockElementWithName(richTextElementTypeName); + await umbracoUi.content.enterRTETipTapEditorWithName(AliasHelper.toAlias(secondRichTextDataTypeName), secondRichTextEditorValue); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the RTE is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(richTextDataTypeName)); + // Value in the first RTE + expect(documentValues.value.markup).toContain(expectedRichTextEditorOutputValue); + // Value in the second RTE + const secondRTEInBlock = documentValues.value.blocks.contentData[0].values.find(value => value.alias === AliasHelper.toAlias(secondRichTextDataTypeName)); + expect(secondRTEInBlock.value.markup).toContain(secondExpectedRichTextEditorOutputValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); +}); + +test('can publish a block list editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const textStringValue = 'Hello World'; + const blockGridDataTypeName = 'BlockGridDataTypeName'; + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + const blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, textStringElementTypeId); + + blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); + + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockGridElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickLinkWithName(blockGridElementTypeName, true); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockGrid is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); +}); + +test('can publish a block list editor with a block list editor', async ({umbracoApi, umbracoUi}) => { + // Arrange + const textStringValue = 'Hello World'; + const secondBlockListDataTypeName = 'SecondBlockListName'; + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName) + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); + textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); + + const secondBlockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(secondBlockListDataTypeName, textStringElementTypeId); + + blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, secondBlockListDataTypeName, secondBlockListDataTypeId); + blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockListElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); + await umbracoUi.goToBackOffice(); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + await umbracoUi.content.goToContentWithName(contentName); + + // Act + await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickBlockElementWithName(blockListElementTypeName); + await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); + await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); + await umbracoUi.content.enterTextstring(textStringValue); + await umbracoUi.content.clickCreateForModalWithHeadline('Add ' + textStringElementTypeName); + await umbracoUi.content.clickCreateModalButton(); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); + await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); + // Asserts that the value in the BlockList is as expected + const documentData = await umbracoApi.document.getByName(contentName); + const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); + expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(secondBlockListDataTypeName); +}); From a601f843bf38c9bdc2fe5fc501b18b8dba7b9d1f Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Wed, 7 May 2025 11:34:29 +0200 Subject: [PATCH 4/7] Cleaned up tests --- .../SecondLevelBlockProperties.spec.ts | 53 ++++++----- .../SecondLevelBlockProperties.spec.ts | 60 ++++++------- .../SecondLevelBlockProperties.spec.ts | 89 +++++++++---------- 3 files changed, 91 insertions(+), 111 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts index 99b9cd189c4f..fd7f7533003d 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockGrid/SecondLevelBlockProperties.spec.ts @@ -13,19 +13,6 @@ const documentTypeGroupName = 'DocumentGroup'; const blockGridDataTypeName = 'BlockGridName'; let blockGridDataTypeId = null; -// Element Types -// Block Grid -const blockGridElementTypeName = 'BlockGridElementName'; -let blockGridElementTypeId = null; -const blockGridElementGroupName = 'GridElementGroup'; -// Block List -const blockListElementTypeName = 'BlockListElementName'; -let blockListElementTypeId = null; -const blockListElementGroupName = 'ListElementGroup'; -// Rich Text Editor -const richTextElementTypeName = 'RichTextElementName'; -let richTextElementTypeId = null; -const richTextElementGroupName = 'RTEElementGroup'; // Text String const textStringElementTypeName = 'TextStringElementName'; let textStringElementTypeId = null; @@ -35,29 +22,27 @@ const textStringDataTypeName = 'Textstring'; test.beforeEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); }); test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); }); test('can publish a block grid editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { // Arrange - const richTextDataTypeName = 'RichTextName'; - await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); const richTextEditorValue = 'Hello World'; const expectedRichTextEditorOutputValue = '

Hello World

'; - const richTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(richTextDataTypeName); - richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); + const richTextDataTypeName = 'RichTextDataTypeName'; + const richTextElementTypeName = 'RichTextElementName'; + const richTextElementGroupName = 'RichTextElementGroupName'; + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + + const richTextEditorDataTypeId = await umbracoApi.dataType.createDefaultTiptapDataType(richTextDataTypeName); + const richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, richTextElementTypeId, true); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -82,17 +67,23 @@ test('can publish a block grid editor with a rich text editor', async ({umbracoA // Clean await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); }); test('can publish a block grid editor with a block list editor', async ({umbracoApi, umbracoUi}) => { // Arrange - const blockListDataTypeName = 'BlockListName'; - await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) const textStringValue = 'Hello World'; + const blockListDataTypeName = 'BlockListName'; + const blockListElementTypeName = 'BlockListElementName'; + const blockListElementGroupName = 'BlockListElementGroupName'; + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); const blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, textStringElementTypeId); - blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, blockListDataTypeName, blockListDataTypeId); + const blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, blockListDataTypeName, blockListDataTypeId); blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, blockListElementTypeId, true); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -120,17 +111,24 @@ test('can publish a block grid editor with a block list editor', async ({umbraco // Clean await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); }); test('can publish a block grid editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { // Arrange const textStringValue = 'Hello World'; const secondBlockGridDataTypeName = 'SecondBlockGridDataTypeName'; + const blockGridElementTypeName = 'BlockGridElementTypeName'; + const blockGridElementGroupName = 'BlockGridElementGroupName'; await umbracoApi.dataType.ensureNameNotExists(secondBlockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); const secondBlockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(secondBlockGridDataTypeName, textStringElementTypeId); - blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, secondBlockGridDataTypeName, secondBlockGridDataTypeId); + const blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, secondBlockGridDataTypeName, secondBlockGridDataTypeId); blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, blockGridElementTypeId, true); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockGridDataTypeName, blockGridDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -158,5 +156,6 @@ test('can publish a block grid editor with a block grid editor', async ({umbraco // Clean await umbracoApi.dataType.ensureNameNotExists(secondBlockGridDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts index b8099ce5e2c7..17138338929f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts @@ -9,22 +9,10 @@ const documentTypeName = 'DocumentTypeName'; let documentTypeId = null; const documentTypeGroupName = 'DocumentGroup'; -// Block Grid +// Block List const blockListDataTypeName = 'BlockListName'; let blockListDataTypeId = null; -// Element Types -// Block List -const blockListElementTypeName = 'BlockListElementName'; -let blockListElementTypeId = null; -const blockListElementGroupName = 'ListElementGroup'; -// Block Grid -const blockGridElementTypeName = 'BlockGridElementName'; -let blockGridElementTypeId = null; -const blockGridElementGroupName = 'GridElementGroup'; -// Rich Text Editor -const richTextElementTypeName = 'RichTextElementName'; -let richTextElementTypeId = null; -const richTextElementGroupName = 'RTEElementGroup'; + // Text String const textStringElementTypeName = 'TextStringElementName'; let textStringElementTypeId = null; @@ -34,33 +22,28 @@ const textStringDataTypeName = 'Textstring'; test.beforeEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); }); test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); }); test('can publish a block list editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { // Arrange - const richTextDataTypeName = 'RichTextName'; - await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); const richTextEditorValue = 'Hello World'; const expectedRichTextEditorOutputValue = '

Hello World

'; - const richTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(richTextDataTypeName); - richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); + const richTextDataTypeName = 'RichTextName'; + const richTextElementTypeName = 'RichTextElementName'; + const richTextElementGroupName = 'RTEElementGroup'; + await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); + const richTextEditorDataTypeId = await umbracoApi.dataType.createDefaultTiptapDataType(richTextDataTypeName); + const richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, richTextDataTypeName, richTextEditorDataTypeId); blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, richTextElementTypeId); - - // blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, richTextElementTypeId, true); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); await umbracoUi.goToBackOffice(); @@ -84,21 +67,23 @@ test('can publish a block list editor with a rich text editor', async ({umbracoA // Clean await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); }); test('can publish a block list editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { // Arrange const textStringValue = 'Hello World'; const blockGridDataTypeName = 'BlockGridDataTypeName'; + const blockGridElementTypeName = 'BlockGridElementName'; + const blockGridElementGroupName = 'GridElementGroup'; await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeId); const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); const blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, textStringElementTypeId); - - blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); - + const blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockGridElementTypeId); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -127,20 +112,23 @@ test('can publish a block list editor with a block grid editor', async ({umbraco // Clean await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeId); }); test('can publish a block list editor with a block list editor', async ({umbracoApi, umbracoUi}) => { // Arrange const textStringValue = 'Hello World'; const secondBlockListDataTypeName = 'SecondBlockListName'; - await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) - await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName) + const blockListElementTypeName = 'BlockListElementName'; + const blockListElementGroupName = 'ListElementGroup'; + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); - const secondBlockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(secondBlockListDataTypeName, textStringElementTypeId); - - blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, secondBlockListDataTypeName, secondBlockListDataTypeId); + const blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, secondBlockListDataTypeName, secondBlockListDataTypeId); blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockListElementTypeId); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -167,5 +155,7 @@ test('can publish a block list editor with a block list editor', async ({umbraco expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); // Clean - await umbracoApi.dataType.ensureNameNotExists(secondBlockListDataTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); }); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts index b417f25a6405..058444d9696c 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/RichTextEditor/SecondLevelBlockProperties.spec.ts @@ -9,22 +9,10 @@ const documentTypeName = 'DocumentTypeName'; let documentTypeId = null; const documentTypeGroupName = 'DocumentGroup'; -// Block Grid +// Rich Text Editor const richTextDataTypeName = 'RichTextDataType'; let richTextDataTypeId = null; -// Element Types -// Block List -const blockListElementTypeName = 'BlockListElementName'; -let blockListElementTypeId = null; -const blockListElementGroupName = 'ListElementGroup'; -// Block Grid -const blockGridElementTypeName = 'BlockGridElementName'; -let blockGridElementTypeId = null; -const blockGridElementGroupName = 'GridElementGroup'; -// Rich Text Editor -const richTextElementTypeName = 'RichTextElementName'; -let richTextElementTypeId = null; -const richTextElementGroupName = 'RTEElementGroup'; + // Text String const textStringElementTypeName = 'TextStringElementName'; let textStringElementTypeId = null; @@ -34,31 +22,29 @@ const textStringDataTypeName = 'Textstring'; test.beforeEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); }); test.afterEach(async ({umbracoApi}) => { await umbracoApi.document.ensureNameNotExists(contentName); await umbracoApi.documentType.ensureNameNotExists(documentTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(richTextElementTypeName); await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); }); test('can publish a rich text editor with a rich text editor', async ({umbracoApi, umbracoUi}) => { // Arrange - const secondRichTextDataTypeName = 'SecondRichTextName'; - await umbracoApi.dataType.ensureNameNotExists(secondRichTextDataTypeName); const richTextEditorValue = 'Hello First World'; const secondRichTextEditorValue = 'Hello Second World'; const expectedRichTextEditorOutputValue = '

' + richTextEditorValue + '

'; const secondExpectedRichTextEditorOutputValue = '

' + secondRichTextEditorValue + '

'; - const secondRichTextEditorDataTypeId = await umbracoApi.dataType.createEmptyRichTextEditor(secondRichTextDataTypeName); - richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, secondRichTextDataTypeName, secondRichTextEditorDataTypeId); + const secondRichTextDataTypeName = 'SecondRichTextName'; + const richTextElementTypeName = 'RichTextElementName'; + const richTextElementGroupName = 'RichTextElementGroupName'; + await umbracoApi.dataType.ensureNameNotExists(secondRichTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementGroupName); + + const secondRichTextEditorDataTypeId = await umbracoApi.dataType.createDefaultTiptapDataType(secondRichTextDataTypeName); + const richTextElementTypeId = await umbracoApi.documentType.createDefaultElementType(richTextElementTypeName, richTextElementGroupName, secondRichTextDataTypeName, secondRichTextEditorDataTypeId); richTextDataTypeId = await umbracoApi.dataType.createRichTextEditorWithABlock(richTextDataTypeName, richTextElementTypeId); documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, richTextDataTypeName, richTextDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); @@ -88,30 +74,32 @@ test('can publish a rich text editor with a rich text editor', async ({umbracoAp // Clean await umbracoApi.dataType.ensureNameNotExists(richTextDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(richTextElementGroupName); }); -test('can publish a block list editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { +test('can publish a rich text editor with a block grid editor', async ({umbracoApi, umbracoUi}) => { // Arrange const textStringValue = 'Hello World'; const blockGridDataTypeName = 'BlockGridDataTypeName'; + const blockGridElementTypeName = 'BlockGridElementTypeName'; + const blockGridElementGroupName = 'BlockGridElementGroupName'; await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); const blockGridDataTypeId = await umbracoApi.dataType.createBlockGridWithABlockAndAllowAtRoot(blockGridDataTypeName, textStringElementTypeId); - - blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); - - blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockGridElementTypeId); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + const blockGridElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockGridElementTypeName, blockGridElementGroupName, blockGridDataTypeName, blockGridDataTypeId); + richTextDataTypeId = await umbracoApi.dataType.createRichTextEditorWithABlock(richTextDataTypeName, blockGridElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, richTextDataTypeName, richTextDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.goToContentWithName(contentName); // Act - await umbracoUi.content.clickAddBlockElementButton(); + await umbracoUi.content.clickInsertBlockButton(); await umbracoUi.content.clickLinkWithName(blockGridElementTypeName, true); await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); @@ -125,36 +113,38 @@ test('can publish a block list editor with a block grid editor', async ({umbraco await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); // Asserts that the value in the BlockGrid is as expected const documentData = await umbracoApi.document.getByName(contentName); - const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); - expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + expect(documentData.values[0].value.blocks.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); // Clean await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); }); -test('can publish a block list editor with a block list editor', async ({umbracoApi, umbracoUi}) => { +test('can publish a rich text editor with a block list editor', async ({umbracoApi, umbracoUi}) => { // Arrange const textStringValue = 'Hello World'; - const secondBlockListDataTypeName = 'SecondBlockListName'; - await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName) - await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName) + const blockListDataTypeName = 'BlockListName'; + const blockListElementTypeName = 'BlockListElementName'; + const blockListElementGroupName = 'BlockListGroupName'; + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); + const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); - - const secondBlockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(secondBlockListDataTypeName, textStringElementTypeId); - - blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, secondBlockListDataTypeName, secondBlockListDataTypeId); - blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, blockListElementTypeId); - documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, blockListDataTypeName, blockListDataTypeId, documentTypeGroupName); + const blockListDataTypeId = await umbracoApi.dataType.createBlockListDataTypeWithABlock(blockListDataTypeName, textStringElementTypeId); + const blockListElementTypeId = await umbracoApi.documentType.createDefaultElementType(blockListElementTypeName, blockListElementGroupName, blockListDataTypeName, blockListDataTypeId); + richTextDataTypeId = await umbracoApi.dataType.createRichTextEditorWithABlock(richTextDataTypeName, blockListElementTypeId); + documentTypeId = await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, richTextDataTypeName, richTextDataTypeId, documentTypeGroupName); await umbracoApi.document.createDefaultDocument(contentName, documentTypeId); await umbracoUi.goToBackOffice(); await umbracoUi.content.goToSection(ConstantHelper.sections.content); await umbracoUi.content.goToContentWithName(contentName); // Act - await umbracoUi.content.clickAddBlockElementButton(); - await umbracoUi.content.clickBlockElementWithName(blockListElementTypeName); + await umbracoUi.content.clickInsertBlockButton(); + await umbracoUi.content.clickLinkWithName(blockListElementTypeName, true); await umbracoUi.content.clickAddBlockWithNameButton(textStringElementTypeName); await umbracoUi.content.clickLinkWithName(textStringElementTypeName, true); await umbracoUi.content.enterTextstring(textStringValue); @@ -165,11 +155,12 @@ test('can publish a block list editor with a block list editor', async ({umbraco // Assert await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.saved); await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.published); - // Asserts that the value in the BlockList is as expected + // Asserts that the value in the BlockGrid is as expected const documentData = await umbracoApi.document.getByName(contentName); - const documentValues = documentData.values.find(value => value.alias === AliasHelper.toAlias(blockListDataTypeName)); - expect(documentValues.value.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); + expect(documentData.values[0].value.blocks.contentData[0].values[0].value.contentData[0].values[0].value).toContain(textStringValue); // Clean - await umbracoApi.dataType.ensureNameNotExists(secondBlockListDataTypeName); + await umbracoApi.dataType.ensureNameNotExists(blockListDataTypeName); + await umbracoApi.documentType.ensureNameNotExists(blockListElementTypeName); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); }); From 3c1e21a0cd849767f1c60d6058ef6029f29bfdc1 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Wed, 7 May 2025 11:34:36 +0200 Subject: [PATCH 5/7] bumped version --- tests/Umbraco.Tests.AcceptanceTest/package-lock.json | 9 +++++---- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 1353eb665acb..095ba9712e12 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.33", - "@umbraco/playwright-testhelpers": "^15.0.49", + "@umbraco/playwright-testhelpers": "^15.0.51", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" @@ -66,9 +66,10 @@ } }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "15.0.49", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.49.tgz", - "integrity": "sha512-1At/e057u6rB3T3iH8tR6SLXnYRZJsCVjmm8jm+6sftJDvgB0Q5kXKaSDyLTU6wVuLALiDNUuNuJ86FgOOdUJw==", + "version": "15.0.51", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.51.tgz", + "integrity": "sha512-BcQqymTaDDoIhFrtovdv2ypLBeW+m96UT/kGQ6OeuQZcYZw8rNqa7Oo+5+x2J0uKHkVTsCsTLkJrIYw9RFhW7g==", + "license": "MIT", "dependencies": { "@umbraco/json-models-builders": "2.0.33", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 98d612ca812c..baa8db6c5bbd 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@umbraco/json-models-builders": "^2.0.33", - "@umbraco/playwright-testhelpers": "^15.0.49", + "@umbraco/playwright-testhelpers": "^15.0.51", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" From c1e484564d887f72cf233f4a078c818da2b7edac Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Wed, 7 May 2025 12:22:34 +0200 Subject: [PATCH 6/7] Fixed --- .../Content/BlockList/SecondLevelBlockProperties.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts index 17138338929f..2368f8c9cfee 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/BlockList/SecondLevelBlockProperties.spec.ts @@ -78,7 +78,7 @@ test('can publish a block list editor with a block grid editor', async ({umbraco const blockGridElementGroupName = 'GridElementGroup'; await umbracoApi.dataType.ensureNameNotExists(blockGridDataTypeName); await umbracoApi.documentType.ensureNameNotExists(blockGridElementTypeName); - await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeId); + await umbracoApi.documentType.ensureNameNotExists(textStringElementTypeName); const textStringDataType = await umbracoApi.dataType.getByName(textStringDataTypeName); textStringElementTypeId = await umbracoApi.documentType.createDefaultElementType(textStringElementTypeName, textStringGroupName, textStringDataTypeName, textStringDataType.id); From d8da91fe231cd99a94ff1be594e0af57e5483531 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst Date: Wed, 7 May 2025 12:36:35 +0200 Subject: [PATCH 7/7] Run tests --- tests/Umbraco.Tests.AcceptanceTest/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index baa8db6c5bbd..119e2f42689f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -9,7 +9,8 @@ "testSqlite": "npx playwright test DefaultConfig --grep-invert \"Users\"", "all": "npx playwright test", "createTest": "node createTest.js", - "smokeTest": "npx playwright test DefaultConfig --grep \"@smoke\"", + "smokeTest": "npx playwright test DefaultConfig --grep \"SecondLevel\"", + "OriginalsmokeTest": "npx playwright test DefaultConfig --grep \"@smoke\"", "smokeTestSqlite": "npx playwright test DefaultConfig --grep \"@smoke\" --grep-invert \"Users\"" }, "devDependencies": {