From 3dace4fc9d8fd68b829c49a7746a302b37bd3bea Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Tue, 4 Jun 2024 10:32:37 +0200 Subject: [PATCH] RTE and media picker should route medias the same way in the Delivery API (#16550) * RTE and media picker should route medias the same way in the Delivery API * Fix failing unit test * Fixed failing tests --- .../DeliveryApi/ApiMediaUrlProvider.cs | 2 +- .../DeliveryApi/ApiRichTextElementParser.cs | 19 ++----------------- .../DeliveryApi/ApiRichTextMarkupParser.cs | 5 ++--- .../DeliveryApi/ApiRichTextParserBase.cs | 11 +++++------ .../DeliveryApi/ApiMediaUrlProviderTests.cs | 2 +- .../DeliveryApi/RichTextParserTests.cs | 11 +++++------ 6 files changed, 16 insertions(+), 34 deletions(-) diff --git a/src/Umbraco.Core/DeliveryApi/ApiMediaUrlProvider.cs b/src/Umbraco.Core/DeliveryApi/ApiMediaUrlProvider.cs index 20373b1d3b..f8ebee826b 100644 --- a/src/Umbraco.Core/DeliveryApi/ApiMediaUrlProvider.cs +++ b/src/Umbraco.Core/DeliveryApi/ApiMediaUrlProvider.cs @@ -17,6 +17,6 @@ public sealed class ApiMediaUrlProvider : IApiMediaUrlProvider throw new ArgumentException("Media URLs can only be generated from Media items.", nameof(media)); } - return _publishedUrlProvider.GetMediaUrl(media, UrlMode.Relative); + return _publishedUrlProvider.GetMediaUrl(media); } } diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs index eeb279e1b7..eed3b848eb 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs @@ -22,28 +22,13 @@ internal sealed class ApiRichTextElementParser : ApiRichTextParserBase, IApiRich private const string TextNodeName = "#text"; private const string CommentNodeName = "#comment"; - [Obsolete($"Please use the constructor that accepts {nameof(IApiElementBuilder)}. Will be removed in V15.")] public ApiRichTextElementParser( IApiContentRouteBuilder apiContentRouteBuilder, - IPublishedUrlProvider publishedUrlProvider, - IPublishedSnapshotAccessor publishedSnapshotAccessor, - ILogger logger) - : this( - apiContentRouteBuilder, - publishedUrlProvider, - publishedSnapshotAccessor, - StaticServiceProvider.Instance.GetRequiredService(), - logger) - { - } - - public ApiRichTextElementParser( - IApiContentRouteBuilder apiContentRouteBuilder, - IPublishedUrlProvider publishedUrlProvider, + IApiMediaUrlProvider mediaUrlProvider, IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiElementBuilder apiElementBuilder, ILogger logger) - : base(apiContentRouteBuilder, publishedUrlProvider) + : base(apiContentRouteBuilder, mediaUrlProvider) { _publishedSnapshotAccessor = publishedSnapshotAccessor; _apiElementBuilder = apiElementBuilder; diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs index f7eeba0f18..42c8829868 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs @@ -3,7 +3,6 @@ using Microsoft.Extensions.Logging; using Umbraco.Cms.Core; using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.PublishedCache; -using Umbraco.Cms.Core.Routing; using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.DeliveryApi; @@ -15,10 +14,10 @@ internal sealed class ApiRichTextMarkupParser : ApiRichTextParserBase, IApiRichT public ApiRichTextMarkupParser( IApiContentRouteBuilder apiContentRouteBuilder, - IPublishedUrlProvider publishedUrlProvider, + IApiMediaUrlProvider mediaUrlProvider, IPublishedSnapshotAccessor publishedSnapshotAccessor, ILogger logger) - : base(apiContentRouteBuilder, publishedUrlProvider) + : base(apiContentRouteBuilder, mediaUrlProvider) { _publishedSnapshotAccessor = publishedSnapshotAccessor; _logger = logger; diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs index 0509105b05..7723fc835c 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs @@ -4,19 +4,18 @@ using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.Models.DeliveryApi; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PublishedCache; -using Umbraco.Cms.Core.Routing; namespace Umbraco.Cms.Infrastructure.DeliveryApi; internal abstract partial class ApiRichTextParserBase { private readonly IApiContentRouteBuilder _apiContentRouteBuilder; - private readonly IPublishedUrlProvider _publishedUrlProvider; + private readonly IApiMediaUrlProvider _apiMediaUrlProvider; - protected ApiRichTextParserBase(IApiContentRouteBuilder apiContentRouteBuilder, IPublishedUrlProvider publishedUrlProvider) + protected ApiRichTextParserBase(IApiContentRouteBuilder apiContentRouteBuilder, IApiMediaUrlProvider apiMediaUrlProvider) { _apiContentRouteBuilder = apiContentRouteBuilder; - _publishedUrlProvider = publishedUrlProvider; + _apiMediaUrlProvider = apiMediaUrlProvider; } protected void ReplaceLocalLinks(IPublishedSnapshot publishedSnapshot, string href, Action handleContentRoute, Action handleMediaUrl, Action handleInvalidLink) @@ -52,7 +51,7 @@ internal abstract partial class ApiRichTextParserBase if (media != null) { handled = true; - handleMediaUrl(_publishedUrlProvider.GetMediaUrl(media, UrlMode.Absolute)); + handleMediaUrl(_apiMediaUrlProvider.GetUrl(media)); } break; @@ -77,7 +76,7 @@ internal abstract partial class ApiRichTextParserBase return; } - handleMediaUrl(_publishedUrlProvider.GetMediaUrl(media, UrlMode.Absolute)); + handleMediaUrl(_apiMediaUrlProvider.GetUrl(media)); } [GeneratedRegex("{localLink:(?umb:.+)}")] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ApiMediaUrlProviderTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ApiMediaUrlProviderTests.cs index e1900d203f..0dfffbf638 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ApiMediaUrlProviderTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/ApiMediaUrlProviderTests.cs @@ -21,7 +21,7 @@ public class ApiMediaUrlProviderTests : PropertyValueConverterTests var publishedUrlProvider = new Mock(); publishedUrlProvider - .Setup(p => p.GetMediaUrl(content.Object, UrlMode.Relative, It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(p => p.GetMediaUrl(content.Object, UrlMode.Default, It.IsAny(), It.IsAny(), It.IsAny())) .Returns(publishedUrl); var apiMediaUrlProvider = new ApiMediaUrlProvider(publishedUrlProvider.Object); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/RichTextParserTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/RichTextParserTests.cs index b7712b5346..a2522a5ecd 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/RichTextParserTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/RichTextParserTests.cs @@ -9,7 +9,6 @@ using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.PropertyEditors.ValueConverters; using Umbraco.Cms.Core.PublishedCache; -using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Infrastructure.DeliveryApi; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.DeliveryApi; @@ -474,7 +473,7 @@ public class RichTextParserTests : PropertyValueConverterTests Mock.Of>()); } - private void SetupTestContent(out IApiContentRouteBuilder routeBuilder, out IPublishedSnapshotAccessor snapshotAccessor, out IPublishedUrlProvider urlProvider) + private void SetupTestContent(out IApiContentRouteBuilder routeBuilder, out IPublishedSnapshotAccessor snapshotAccessor, out IApiMediaUrlProvider apiMediaUrlProvider) { var contentMock = new Mock(); contentMock.SetupGet(m => m.Key).Returns(_contentKey); @@ -502,14 +501,14 @@ public class RichTextParserTests : PropertyValueConverterTests .Setup(m => m.Build(contentMock.Object, null)) .Returns(new ApiContentRoute("/some-content-path", new ApiContentStartItem(_contentRootKey, "the-root-path"))); - var urlProviderMock = new Mock(); - urlProviderMock - .Setup(m => m.GetMediaUrl(mediaMock.Object, It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + var apiMediaUrlProviderMock = new Mock(); + apiMediaUrlProviderMock + .Setup(m => m.GetUrl(mediaMock.Object)) .Returns("/some-media-url"); routeBuilder = routeBuilderMock.Object; snapshotAccessor = snapshotAccessorMock.Object; - urlProvider = urlProviderMock.Object; + apiMediaUrlProvider = apiMediaUrlProviderMock.Object; } private IPublishedElement CreateElement(Guid id, int propertyValue)