Merge branch 'v15/dev' into v16/dev

This commit is contained in:
Niels Lyngsø
2025-03-10 16:54:38 +01:00
37 changed files with 843 additions and 33 deletions

View File

@@ -8,7 +8,7 @@
"hasInstallScript": true,
"dependencies": {
"@umbraco/json-models-builders": "^2.0.29",
"@umbraco/playwright-testhelpers": "^15.0.32",
"@umbraco/playwright-testhelpers": "^15.0.33",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"node-fetch": "^2.6.7"
@@ -67,9 +67,9 @@
}
},
"node_modules/@umbraco/playwright-testhelpers": {
"version": "15.0.32",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.32.tgz",
"integrity": "sha512-4wzLTtqbzIc0TokP+/nC/vbKfcboYQFGam6eLzZj4oMQmkBExxv5EBhI06qrpst8/rQc5OK4TTwJAGL3GCuKew==",
"version": "15.0.33",
"resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-15.0.33.tgz",
"integrity": "sha512-EboW4KNFN5wG4UR8tsLWhjpQVZY0lkVNDbNFu9iohFE2bSfrV2CETcWAthVx8IwJja4nP3dOdwwMKb39/MUNdw==",
"dependencies": {
"@umbraco/json-models-builders": "2.0.30",
"node-fetch": "^2.6.7"

View File

@@ -21,7 +21,7 @@
},
"dependencies": {
"@umbraco/json-models-builders": "^2.0.29",
"@umbraco/playwright-testhelpers": "^15.0.32",
"@umbraco/playwright-testhelpers": "^15.0.33",
"camelize": "^1.0.0",
"dotenv": "^16.3.1",
"node-fetch": "^2.6.7"

View File

@@ -22,7 +22,8 @@ test.afterEach(async ({umbracoApi}) => {
await umbracoApi.documentType.ensureNameNotExists(childDocumentTypeName);
});
test('can create content with the list view data type', async ({umbracoApi, umbracoUi}) => {
// Remove .fixme when the issue is fixed: https://github.com/umbraco/Umbraco-CMS/issues/18615
test.fixme('can create content with the list view data type', async ({umbracoApi, umbracoUi}) => {
// Arrange
const expectedState = 'Draft';
const defaultListViewDataTypeName = 'List View - Content';
@@ -40,6 +41,7 @@ test('can create content with the list view data type', async ({umbracoApi, umbr
// Assert
await umbracoUi.content.isSuccessNotificationVisible();
await umbracoUi.content.isErrorNotificationVisible(false);
expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy();
const contentData = await umbracoApi.document.getByName(contentName);
expect(contentData.variants[0].state).toBe(expectedState);
@@ -204,8 +206,7 @@ test('can publish child content from list', async ({umbracoApi, umbracoUi}) => {
const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAPropertyEditorAndAnAllowedChildNode(documentTypeName, dataTypeName, dataTypeData.id, childDocumentTypeId);
const documentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId);
await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, documentId);
const publishData = {"publishSchedules": [{"culture": null}]};
await umbracoApi.document.publish(documentId, publishData);
await umbracoApi.document.publish(documentId);
await umbracoUi.content.goToSection(ConstantHelper.sections.content);
await umbracoUi.content.goToContentWithName(contentName);
@@ -251,9 +252,8 @@ test('can unpublish child content from list', async ({umbracoApi, umbracoUi}) =>
const documentTypeId = await umbracoApi.documentType.createDocumentTypeWithAPropertyEditorAndAnAllowedChildNode(documentTypeName, dataTypeName, dataTypeData.id, childDocumentTypeId);
const documentId = await umbracoApi.document.createDefaultDocument(contentName, documentTypeId);
const childDocumentId = await umbracoApi.document.createDefaultDocumentWithParent(childContentName, childDocumentTypeId, documentId);
const publishData = {"publishSchedules": [{"culture": null}]};
await umbracoApi.document.publish(documentId, publishData);
await umbracoApi.document.publish(childDocumentId, publishData);
await umbracoApi.document.publish(documentId);
await umbracoApi.document.publish(childDocumentId);
const childContentDataBeforeUnpublished = await umbracoApi.document.getByName(childContentName);
expect(childContentDataBeforeUnpublished.variants[0].state).toBe('Published');
await umbracoUi.content.goToSection(ConstantHelper.sections.content);

View File

@@ -1,5 +1,5 @@
import {expect} from '@playwright/test';
import {ConstantHelper, test} from '@umbraco/playwright-testhelpers';
import {ConstantHelper, NotificationConstantHelper, test} from '@umbraco/playwright-testhelpers';
const dataTypeName = 'List View - Media';
let dataTypeDefaultData = null;
@@ -105,7 +105,7 @@ test('can allow bulk trash in the media section', async ({umbracoApi, umbracoUi}
await umbracoUi.media.clickConfirmTrashButton();
// Assert
await umbracoUi.media.reloadMediaTree();
await umbracoUi.media.isSuccessNotificationVisible();
expect(await umbracoApi.media.doesNameExist(firstMediaFileName)).toBeFalsy();
expect(await umbracoApi.media.doesNameExist(secondMediaFileName)).toBeFalsy();
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(firstMediaFileName)).toBeTruthy();
@@ -114,8 +114,8 @@ test('can allow bulk trash in the media section', async ({umbracoApi, umbracoUi}
await umbracoUi.media.isItemVisibleInRecycleBin(secondMediaFileName, true, false);
});
// TODO: Remove skip when update code to select media successfully.
test.skip('can allow bulk move in the media section', async ({umbracoApi, umbracoUi}) => {
// TODO: Remove fixme when update code to select media successfully.
test.fixme('can allow bulk move in the media section', async ({umbracoApi, umbracoUi}) => {
// Arrange
const mediaFolderName = 'Test Folder Name';
await umbracoApi.media.ensureNameNotExists(mediaFolderName);

View File

@@ -74,7 +74,6 @@ for (const mediaFileType of mediaFileTypes) {
await umbracoUi.media.doesSuccessNotificationHaveText(NotificationConstantHelper.success.created);
const mediaData = await umbracoApi.media.getByName(mediaFileType.fileName);
await umbracoUi.media.doesMediaHaveThumbnail(mediaData.id, mediaFileType.thumbnail, mediaData.urls[0].url);
await umbracoUi.media.reloadMediaTree();
await umbracoUi.media.isMediaTreeItemVisible(mediaFileType.fileName);
expect(await umbracoApi.media.doesNameExist(mediaFileType.fileName)).toBeTruthy();
@@ -200,7 +199,7 @@ test('can restore a media item from the recycle bin', async ({umbracoApi, umbrac
// Assert
await umbracoUi.media.doesSuccessNotificationHaveText(NotificationConstantHelper.success.restored);
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false);
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false, false);
await umbracoUi.media.reloadMediaTree();
await umbracoUi.media.isMediaTreeItemVisible(mediaFileName);
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeTruthy();
@@ -223,7 +222,7 @@ test('can delete a media item from the recycle bin', async ({umbracoApi, umbraco
// Assert
await umbracoUi.media.doesSuccessNotificationHaveText(NotificationConstantHelper.success.deleted);
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false);
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false, false);
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();
});
@@ -241,7 +240,7 @@ test('can empty the recycle bin', async ({umbracoApi, umbracoUi}) => {
await umbracoUi.media.clickConfirmEmptyRecycleBinButton();
// Assert
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false);
await umbracoUi.media.isItemVisibleInRecycleBin(mediaFileName, false, false);
await umbracoUi.media.doesSuccessNotificationHaveText(NotificationConstantHelper.success.emptiedRecycleBin);
expect(await umbracoApi.media.doesNameExist(mediaFileName)).toBeFalsy();
expect(await umbracoApi.media.doesMediaItemExistInRecycleBin(mediaFileName)).toBeFalsy();

View File

@@ -64,6 +64,13 @@
<Right>lib/net9.0/Umbraco.Tests.Integration.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Services.ContentPublishingServiceTests.Publish_Branch_Does_Not_Publish_Unpublished_Children_Unless_Explicitly_Instructed_To(System.Boolean)</Target>
<Left>lib/net9.0/Umbraco.Tests.Integration.dll</Left>
<Right>lib/net9.0/Umbraco.Tests.Integration.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Services.TemplateServiceTests.Deleting_Master_Template_Also_Deletes_Children</Target>

View File

@@ -42,12 +42,6 @@ public partial class ContentPublishingServiceTests
VerifyIsPublished(Subpage.Key);
}
[Obsolete("Replaced by Publish_Branch_Does_Not_Publish_Unpublished_Children_Unless_Instructed_To. This will be removed in Umbraco 16.")]
public Task Publish_Branch_Does_Not_Publish_Unpublished_Children_Unless_Explicitly_Instructed_To(bool force)
{
return Task.CompletedTask;
}
[TestCase(PublishBranchFilter.Default)]
[TestCase(PublishBranchFilter.IncludeUnpublished)]
[TestCase(PublishBranchFilter.ForceRepublish)]

View File

@@ -205,6 +205,21 @@ public class SliderPropertyValueEditorTests
}
}
[Test]
public void Max_Item_Validation_Respects_0_As_Unlimited()
{
var value = new JsonObject
{
{ "from", 1.0m },
{ "to", 1.0m },
};
var editor = CreateValueEditor();
editor.ConfigurationObject = new SliderConfiguration();
var result = editor.Validate(value, false, null, PropertyValidationContext.Empty());
Assert.IsEmpty(result);
}
[TestCase(0.2, 1.3, 1.7, true)]
[TestCase(0.2, 1.4, 1.7, false)]
[TestCase(0.2, 1.3, 1.6, false)]