Skip to content

Commit

Permalink
RTE and media picker should route medias the same way in the Delivery…
Browse files Browse the repository at this point in the history
… API (#16550)

* RTE and media picker should route medias the same way in the Delivery API

* Fix failing unit test

* Fixed failing tests
  • Loading branch information
kjac authored Jun 4, 2024
1 parent 32912b0 commit 3dace4f
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 34 deletions.
2 changes: 1 addition & 1 deletion src/Umbraco.Core/DeliveryApi/ApiMediaUrlProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ public string GetUrl(IPublishedContent media)
throw new ArgumentException("Media URLs can only be generated from Media items.", nameof(media));
}

return _publishedUrlProvider.GetMediaUrl(media, UrlMode.Relative);
return _publishedUrlProvider.GetMediaUrl(media);
}
}
19 changes: 2 additions & 17 deletions src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
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;
Expand All @@ -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;
Expand Down
11 changes: 5 additions & 6 deletions src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,18 @@
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)
Expand Down Expand Up @@ -52,7 +51,7 @@ protected void ReplaceLocalLinks(IPublishedSnapshot publishedSnapshot, string hr
if (media != null)
{
handled = true;
handleMediaUrl(_publishedUrlProvider.GetMediaUrl(media, UrlMode.Absolute));
handleMediaUrl(_apiMediaUrlProvider.GetUrl(media));
}

break;
Expand All @@ -77,7 +76,7 @@ protected void ReplaceLocalImages(IPublishedSnapshot publishedSnapshot, string u
return;
}

handleMediaUrl(_publishedUrlProvider.GetMediaUrl(media, UrlMode.Absolute));
handleMediaUrl(_apiMediaUrlProvider.GetUrl(media));
}

[GeneratedRegex("{localLink:(?<udi>umb:.+)}")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public void Media_Url_Provider_Returns_Relative_Published_Media_Url(string publi

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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
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;
Expand Down Expand Up @@ -474,7 +473,7 @@ private ApiRichTextMarkupParser CreateRichTextMarkupParser()
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);
Expand Down Expand Up @@ -502,14 +501,14 @@ private void SetupTestContent(out IApiContentRouteBuilder routeBuilder, out IPub
.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)
Expand Down

0 comments on commit 3dace4f

Please sign in to comment.