From 76fed82e91a254fe2a52779614cc985644c0e374 Mon Sep 17 00:00:00 2001 From: Andreas Zerbst <73799582+andr317c@users.noreply.github.com> Date: Tue, 4 Nov 2025 08:23:04 +0100 Subject: [PATCH] E2E: QA cherry picked acceptance tests updates from 17 (#20714) * Updated tests * Bumped version * Added v16 to nightly e2e run --- build/nightly-E2E-test-pipelines.yml | 3 ++- .../Umbraco.Tests.AcceptanceTest/package-lock.json | 8 ++++---- tests/Umbraco.Tests.AcceptanceTest/package.json | 2 +- .../Clipboard/ClipboardBlockGridBlocks.spec.ts | 3 ++- .../Clipboard/ClipboardBlockListBlocks.spec.ts | 3 ++- .../tests/DefaultConfig/Content/Content.spec.ts | 4 ++-- .../Content/ContentWithTrueFalse.spec.ts | 2 +- .../CreateContentFromDocumentBlueprint.spec.ts | 14 +++++++------- .../DataType/BlockGrid/BlockGridEditor.spec.ts | 2 +- .../BlockListEditor/BlockListEditor.spec.ts | 2 +- .../tests/DefaultConfig/Media/Media.spec.ts | 1 + .../tests/DefaultConfig/Webhook/Webhook.spec.ts | 8 ++++---- 12 files changed, 28 insertions(+), 24 deletions(-) diff --git a/build/nightly-E2E-test-pipelines.yml b/build/nightly-E2E-test-pipelines.yml index e95d6ac403..b7f261fa8e 100644 --- a/build/nightly-E2E-test-pipelines.yml +++ b/build/nightly-E2E-test-pipelines.yml @@ -9,6 +9,7 @@ schedules: branches: include: - v15/dev + - v16/dev - main parameters: @@ -674,4 +675,4 @@ stages: --data "$PAYLOAD" \ "$SLACK_WEBHOOK_URL" env: - SLACK_WEBHOOK_URL: $(E2ESLACKWEBHOOKURL) \ No newline at end of file + SLACK_WEBHOOK_URL: $(E2ESLACKWEBHOOKURL) diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 6a65872266..780a70464b 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.40", - "@umbraco/playwright-testhelpers": "^16.0.55", + "@umbraco/playwright-testhelpers": "^16.0.58", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" @@ -67,9 +67,9 @@ } }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "16.0.55", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-16.0.55.tgz", - "integrity": "sha512-715l112FHB7snWq0sY7e0fUD2ppWSSysBKHFhcQkGGw+3Gbo68Z6iXfeAketzKohWji19un4KC3mvZU0IICr9g==", + "version": "16.0.58", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-16.0.58.tgz", + "integrity": "sha512-8NWupbb526Ni3eDF/0dVGDSuIYGPP+4lGxtcpTtA0/0p3Ud/9vTYym/k+KgBElDdlY278yXaWez0IpKhShdLOw==", "license": "MIT", "dependencies": { "@umbraco/json-models-builders": "2.0.40", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index adf43dd326..d0bb5fee82 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.40", - "@umbraco/playwright-testhelpers": "^16.0.55", + "@umbraco/playwright-testhelpers": "^16.0.58", "camelize": "^1.0.0", "dotenv": "^16.3.1", "node-fetch": "^2.6.7" diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockGridBlocks.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockGridBlocks.spec.ts index 0cfdccd38b..6c3f51690f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockGridBlocks.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockGridBlocks.spec.ts @@ -106,7 +106,8 @@ test('can copy and paste a single block into the same document but different gro await umbracoUi.content.doesBlockEditorBlockWithNameContainValue(elementGroupName, elementPropertyName, ConstantHelper.inputTypes.tipTap, blockPropertyValue); }); -test('can copy and paste a single block into another document', async ({umbracoApi, umbracoUi}) => { +// Remove skip after this issue is resolved: https://github.com/umbraco/Umbraco-CMS/issues/20680 +test.skip('can copy and paste a single block into another document', async ({umbracoApi, umbracoUi}) => { // Arrange await umbracoApi.document.ensureNameNotExists(secondContentName); await umbracoApi.document.createDefaultDocumentWithABlockGridEditorAndBlockWithValue(contentName, documentTypeName, blockGridDataTypeName, elementTypeId, AliasHelper.toAlias(elementPropertyName), blockPropertyValue, richTextDataTypeUiAlias); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockListBlocks.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockListBlocks.spec.ts index 615112ef45..40ccfe598c 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockListBlocks.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Clipboard/ClipboardBlockListBlocks.spec.ts @@ -106,7 +106,8 @@ test('can copy and paste a single block into the same document but different gro await umbracoUi.content.doesBlockEditorBlockWithNameContainValue(elementGroupName, elementPropertyName, ConstantHelper.inputTypes.tipTap, blockPropertyValue); }); -test('can copy and paste a single block into another document', async ({umbracoApi, umbracoUi}) => { +// Remove skip after this issue is resolved: https://github.com/umbraco/Umbraco-CMS/issues/20680 +test.skip('can copy and paste a single block into another document', async ({umbracoApi, umbracoUi}) => { // Arrange await umbracoApi.document.ensureNameNotExists(secondContentName); await umbracoApi.document.createDefaultDocumentWithABlockListEditorAndBlockWithValue(contentName, documentTypeName, blockListDataTypeName, elementTypeId, AliasHelper.toAlias(elementPropertyName), blockPropertyValue, elementDataTypeUiAlias, groupName); 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 f4b69a1231..edea7a59e4 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/Content.spec.ts @@ -234,8 +234,8 @@ test('can duplicate a content node to other parent', async ({umbracoApi, umbraco await umbracoUi.content.doesSuccessNotificationHaveText(NotificationConstantHelper.success.duplicated); await umbracoUi.content.isContentInTreeVisible(contentName); await umbracoUi.content.isContentInTreeVisible(parentContentName); - await umbracoUi.content.openContentCaretButtonForName(parentContentName); - await umbracoUi.content.isChildContentInTreeVisible(parentContentName, contentName); + await umbracoUi.content.goToContentWithName(parentContentName); + await umbracoUi.content.isContentWithNameVisibleInList(contentName); // Clean await umbracoApi.document.ensureNameNotExists(parentContentName); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithTrueFalse.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithTrueFalse.spec.ts index 75e252c28c..f58f224b6c 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithTrueFalse.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithTrueFalse.spec.ts @@ -58,7 +58,7 @@ test('can publish content with the true/false data type', async ({umbracoApi, um expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); const contentData = await umbracoApi.document.getByName(contentName); expect(contentData.variants[0].state).toBe(expectedState); - expect(contentData.values).toEqual([]); + expect(contentData.values[0].value).toEqual(false); }); test('can toggle the true/false value in the content', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => { diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CreateContentFromDocumentBlueprint.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CreateContentFromDocumentBlueprint.spec.ts index 7ec3a9223f..0b3bf06cf0 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CreateContentFromDocumentBlueprint.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/CreateContentFromDocumentBlueprint.spec.ts @@ -51,7 +51,7 @@ test('can create content using an invariant document blueprint', async ({umbraco await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.clickSaveButtonForContent(); // Assert @@ -75,7 +75,7 @@ test('can create content using a variant document blueprint', async ({umbracoApi await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.clickSaveButtonForContent(); await umbracoUi.content.clickSaveButton(); @@ -104,7 +104,7 @@ test('can create content with different name using an invariant document bluepri await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.clickSaveButtonForContent(); @@ -130,7 +130,7 @@ test('can create content with different name using a variant document blueprint' await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.enterContentName(contentName); await umbracoUi.content.clickSaveButtonForContent(); await umbracoUi.content.clickSaveButton(); @@ -161,7 +161,7 @@ test('can create content using a document blueprint with block list', async ({um await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.clickSaveButtonForContent(); // Assert @@ -187,7 +187,7 @@ test('can create content using a document blueprint with block grid', async ({um await umbracoUi.content.clickActionsMenuAtRoot(); await umbracoUi.content.clickCreateActionMenuOption(); await umbracoUi.content.chooseDocumentType(documentTypeName); - await umbracoUi.content.clickModalMenuItemWithName(documentBlueprintName); + await umbracoUi.content.selectDocumentBlueprintWithName(documentBlueprintName); await umbracoUi.content.clickSaveButtonForContent(); // Assert @@ -197,4 +197,4 @@ test('can create content using a document blueprint with block grid', async ({um expect(contentData.values[0].value.contentData[0].values[0].value.markup).toEqual(textContent); const blockListValue = contentData.values.find(item => item.editorAlias === "Umbraco.BlockGrid")?.value; expect(blockListValue).toBeTruthy(); -}); \ No newline at end of file +}); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockGrid/BlockGridEditor.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockGrid/BlockGridEditor.spec.ts index 54eed6a464..e2b5d799ec 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockGrid/BlockGridEditor.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockGrid/BlockGridEditor.spec.ts @@ -275,7 +275,7 @@ test('max can not be less than min in a block grid editor', async ({umbracoApi, // Assert await umbracoUi.dataType.isFailedStateButtonVisible(); - await umbracoUi.dataType.doesAmountContainErrorMessageWithText('The low value must not be exceed the high value'); + await umbracoUi.dataType.doesAmountContainErrorMessageWithText('The low value must not exceed the high value.'); const dataTypeData = await umbracoApi.dataType.getByName(blockGridEditorName); expect(dataTypeData.values[0].value.min).toBe(minAmount); // The max value should not be updated diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockListEditor/BlockListEditor.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockListEditor/BlockListEditor.spec.ts index 1239425d20..5db02e7d48 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockListEditor/BlockListEditor.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataType/BlockListEditor/BlockListEditor.spec.ts @@ -173,7 +173,7 @@ test('max can not be less than min', async ({umbracoApi, umbracoUi}) => { // Assert await umbracoUi.dataType.isFailedStateButtonVisible(); const dataTypeData = await umbracoApi.dataType.getByName(blockListEditorName); - await umbracoUi.dataType.doesAmountContainErrorMessageWithText('The low value must not be exceed the high value'); + await umbracoUi.dataType.doesAmountContainErrorMessageWithText('The low value must not exceed the high value.'); expect(dataTypeData.values[0].value.min).toBe(minAmount); // The max value should not be updated expect(dataTypeData.values[0].value.max).toBe(oldMaxAmount); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/Media.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/Media.spec.ts index ab749dc20a..e70132f3c5 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/Media.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/Media.spec.ts @@ -73,6 +73,7 @@ for (const mediaFileType of mediaFileTypes) { // Assert await umbracoUi.media.waitForMediaItemToBeCreated(); + await umbracoUi.media.goToSection(ConstantHelper.sections.media); const mediaData = await umbracoApi.media.getByName(mediaFileType.fileName); const mediaUrl = await umbracoApi.media.getFullMediaUrl(mediaData.id); await umbracoUi.media.doesMediaHaveThumbnail(mediaData.id, mediaFileType.thumbnail, mediaUrl); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Webhook/Webhook.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Webhook/Webhook.spec.ts index 650c7d09d6..2caf826919 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Webhook/Webhook.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Webhook/Webhook.spec.ts @@ -14,7 +14,7 @@ test.afterEach(async ({umbracoApi}) => { await umbracoApi.webhook.ensureNameNotExists(webhookName); }); -test('can create a webhook', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => { +test('can create a webhook', async ({umbracoApi, umbracoUi}) => { // Arrange const event = 'Content Deleted'; const webhookSiteUrl = umbracoApi.webhook.webhookSiteUrl + webhookSiteToken; @@ -122,7 +122,7 @@ test('can disable a webhook', async ({umbracoApi, umbracoUi}) => { await umbracoApi.webhook.isWebhookEnabled(webhookName, false); }); -test('cannot remove all events from a webhook', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => { +test('cannot remove all events from a webhook', async ({umbracoApi, umbracoUi}) => { // Arrange const event = 'Content Deleted'; await umbracoApi.webhook.createDefaultWebhook(webhookName, webhookSiteToken, event); @@ -173,7 +173,7 @@ test('can remove a header from a webhook', async ({umbracoApi, umbracoUi}) => { expect(await umbracoApi.webhook.doesWebhookHaveHeader(webhookName, headerName, headerValue)).toBeFalsy(); }); -test('cannot add both content event and media event for a webhook', {tag: '@release'}, async ({umbracoApi, umbracoUi}) => { +test('cannot add both content event and media event for a webhook', async ({umbracoApi, umbracoUi}) => { // Arrange const event = 'Content Published'; await umbracoApi.webhook.createDefaultWebhook(webhookName, webhookSiteToken, event); @@ -185,4 +185,4 @@ test('cannot add both content event and media event for a webhook', {tag: '@rele // Assert await umbracoUi.webhook.isModalMenuItemWithNameDisabled('Media Saved'); await umbracoUi.webhook.isModalMenuItemWithNameDisabled('Media Deleted'); -}); \ No newline at end of file +});