Merge branch 'release/15.1.1' into v15/dev

# Conflicts:
#	src/Umbraco.Core/Extensions/PublishedContentExtensions.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	version.json
This commit is contained in:
Sven Geusens
2024-12-12 16:36:45 +01:00
105 changed files with 2812 additions and 615 deletions

View File

@@ -11,6 +11,7 @@ using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Hosting;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Install;
@@ -34,7 +35,8 @@ internal class UmbracoCustomizations : ICustomization
.Customize(new ConstructorCustomization(typeof(DatabaseSchemaCreatorFactory), new GreedyConstructorQuery()))
.Customize(new ConstructorCustomization(typeof(InstallHelper), new GreedyConstructorQuery()))
.Customize(new ConstructorCustomization(typeof(DatabaseBuilder), new GreedyConstructorQuery()))
.Customize(new ConstructorCustomization(typeof(ContentVersionService), new GreedyConstructorQuery()));
.Customize(new ConstructorCustomization(typeof(ContentVersionService), new GreedyConstructorQuery()))
.Customize(new ConstructorCustomization(typeof(ContentFinderByUrlAlias), new GreedyConstructorQuery()));
// When requesting an IUserStore ensure we actually uses a IUserLockoutStore
fixture.Customize<IUserStore<BackOfficeIdentityUser>>(cc =>

View File

@@ -429,9 +429,10 @@ public class ContentRouteBuilderTests : DeliveryApiTests
{
var variantContextAccessor = Mock.Of<IVariationContextAccessor>();
string Url(IPublishedContent content, string? culture)
{
var ancestorsOrSelf = content.AncestorsOrSelf(contentCache, navigationQueryService).ToArray();
var ancestorsOrSelf = content.AncestorsOrSelf(variantContextAccessor, contentCache, navigationQueryService, PublishStatusQueryService).ToArray();
return ancestorsOrSelf.All(c => c.IsPublished(culture))
? string.Join("/", ancestorsOrSelf.Reverse().Skip(hideTopLevelNodeFromPath ? 1 : 0).Select(c => c.UrlSegment(variantContextAccessor, culture))).EnsureStartsWith("/")
: "#";

View File

@@ -20,6 +20,8 @@ public class DeliveryApiTests
protected IPublishedPropertyType DefaultPropertyType { get; private set; }
protected IPublishStatusQueryService PublishStatusQueryService { get; private set; }
[SetUp]
public virtual void Setup()
{
@@ -57,6 +59,13 @@ public class DeliveryApiTests
defaultPropertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None);
DefaultPropertyType = SetupPublishedPropertyType(defaultPropertyValueConverter.Object, "default", "Default.Editor");
var publishStatusQueryService = new Mock<IPublishStatusQueryService>();
publishStatusQueryService
.Setup(x => x.IsDocumentPublished(It.IsAny<Guid>(), It.IsAny<string>()))
.Returns(true);
PublishStatusQueryService = publishStatusQueryService.Object;
}
protected IPublishedPropertyType SetupPublishedPropertyType(IPropertyValueConverter valueConverter, string propertyTypeAlias, string editorAlias, object? dataTypeConfiguration = null)
@@ -117,7 +126,8 @@ public class DeliveryApiTests
IRequestPreviewService? requestPreviewService = null,
IOptionsMonitor<RequestHandlerSettings>? requestHandlerSettingsMonitor = null,
IPublishedContentCache? contentCache = null,
IDocumentNavigationQueryService? navigationQueryService = null)
IDocumentNavigationQueryService? navigationQueryService = null,
IPublishStatusQueryService? publishStatusQueryService = null)
{
if (requestHandlerSettingsMonitor == null)
{
@@ -133,6 +143,7 @@ public class DeliveryApiTests
requestPreviewService ?? Mock.Of<IRequestPreviewService>(),
requestHandlerSettingsMonitor,
contentCache ?? Mock.Of<IPublishedContentCache>(),
navigationQueryService ?? Mock.Of<IDocumentNavigationQueryService>());
navigationQueryService ?? Mock.Of<IDocumentNavigationQueryService>(),
publishStatusQueryService ?? PublishStatusQueryService);
}
}

View File

@@ -7,6 +7,7 @@ using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Services.Navigation;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Tests.UnitTests.AutoFixture;
@@ -30,6 +31,7 @@ public class ContentFinderByUrlAliasTests
[Frozen] IUmbracoContextAccessor umbracoContextAccessor,
[Frozen] IUmbracoContext umbracoContext,
[Frozen] IVariationContextAccessor variationContextAccessor,
[Frozen] IPublishStatusQueryService publishStatusQueryService,
IFileService fileService,
ContentFinderByUrlAlias sut,
IPublishedContent[] rootContents,
@@ -48,6 +50,7 @@ public class ContentFinderByUrlAliasTests
Mock.Get(urlProperty).Setup(x => x.GetValue(null, null)).Returns(relativeUrl);
Mock.Get(variationContextAccessor).Setup(x => x.VariationContext).Returns(variationContext);
Mock.Get(publishStatusQueryService).Setup(x => x.IsDocumentPublished(It.IsAny<Guid>(), It.IsAny<string>())).Returns(true);
var publishedRequestBuilder = new PublishedRequestBuilder(new Uri(absoluteUrl, UriKind.Absolute), fileService);
// Act

View File

@@ -99,7 +99,8 @@ public class HtmlImageSourceParserTests
new MediaUrlProviderCollection(() => new[] { mediaUrlProvider.Object }),
Mock.Of<IVariationContextAccessor>(),
Mock.Of<IPublishedContentCache>(),
Mock.Of<IDocumentNavigationQueryService>());
Mock.Of<IDocumentNavigationQueryService>(),
Mock.Of<IPublishStatusQueryService>());
using (var reference = umbracoContextFactory.EnsureUmbracoContext())
{

View File

@@ -235,6 +235,11 @@ public class HtmlLocalLinkParserTests
mediaCache.Setup(x => x.GetById(It.IsAny<int>())).Returns(media.Object);
mediaCache.Setup(x => x.GetById(It.IsAny<Guid>())).Returns(media.Object);
var publishStatusQueryService = new Mock<IPublishStatusQueryService>();
publishStatusQueryService
.Setup(x => x.IsDocumentPublished(It.IsAny<Guid>(), It.IsAny<string>()))
.Returns(true);
var publishedUrlProvider = new UrlProvider(
umbracoContextAccessor,
Options.Create(webRoutingSettings),
@@ -242,7 +247,8 @@ public class HtmlLocalLinkParserTests
new MediaUrlProviderCollection(() => new[] { mediaUrlProvider.Object }),
Mock.Of<IVariationContextAccessor>(),
contentCache.Object,
navigationQueryService.Object);
navigationQueryService.Object,
publishStatusQueryService.Object);
var linkParser = new HtmlLocalLinkParser(publishedUrlProvider);