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
This commit is contained in:
Kenn Jacobsen
2024-06-04 10:32:37 +02:00
committed by GitHub
parent 32912b0c35
commit 3dace4fc9d
6 changed files with 16 additions and 34 deletions

View File

@@ -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);
}
}

View File

@@ -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<ApiRichTextElementParser> logger)
: this(
apiContentRouteBuilder,
publishedUrlProvider,
publishedSnapshotAccessor,
StaticServiceProvider.Instance.GetRequiredService<IApiElementBuilder>(),
logger)
{
}
public ApiRichTextElementParser(
IApiContentRouteBuilder apiContentRouteBuilder,
IPublishedUrlProvider publishedUrlProvider,
IApiMediaUrlProvider mediaUrlProvider,
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IApiElementBuilder apiElementBuilder,
ILogger<ApiRichTextElementParser> logger)
: base(apiContentRouteBuilder, publishedUrlProvider)
: base(apiContentRouteBuilder, mediaUrlProvider)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_apiElementBuilder = apiElementBuilder;

View File

@@ -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<ApiRichTextMarkupParser> logger)
: base(apiContentRouteBuilder, publishedUrlProvider)
: base(apiContentRouteBuilder, mediaUrlProvider)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_logger = logger;

View File

@@ -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<IApiContentRoute> handleContentRoute, Action<string> 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:(?<udi>umb:.+)}")]

View File

@@ -21,7 +21,7 @@ public class ApiMediaUrlProviderTests : PropertyValueConverterTests
var publishedUrlProvider = new Mock<IPublishedUrlProvider>();
publishedUrlProvider
.Setup(p => p.GetMediaUrl(content.Object, UrlMode.Relative, It.IsAny<string?>(), It.IsAny<string?>(), It.IsAny<Uri?>()))
.Setup(p => p.GetMediaUrl(content.Object, UrlMode.Default, It.IsAny<string?>(), It.IsAny<string?>(), It.IsAny<Uri?>()))
.Returns(publishedUrl);
var apiMediaUrlProvider = new ApiMediaUrlProvider(publishedUrlProvider.Object);

View File

@@ -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<ILogger<ApiRichTextMarkupParser>>());
}
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<IPublishedContent>();
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<IPublishedUrlProvider>();
urlProviderMock
.Setup(m => m.GetMediaUrl(mediaMock.Object, It.IsAny<UrlMode>(), It.IsAny<string?>(), It.IsAny<string>(), It.IsAny<Uri?>()))
var apiMediaUrlProviderMock = new Mock<IApiMediaUrlProvider>();
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)