* V2 output expansion + field limiting incl. deprecation of V1 APIs * Performance optimizations for Content and Block based property editors * A little formatting * Support API versioning in Delivery API endpoint matcher policy * Add V2 "expand" and "fields" to Swagger docs * Renamed route for "multiple items by ID" * Review changes * Update src/Umbraco.Cms.Api.Delivery/Controllers/Media/ByIdMediaApiController.cs Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com> * Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com> * Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com> * Revert "Performance optimizations for Content and Block based property editors" This reverts commit 0d5a57956b36e94ce951f1dad7a7f3f43eb1f60b. * Introduce explicit API cache levels for property expansion * Friendly handling of bad expand/fields parameters --------- Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
64 lines
3.0 KiB
C#
64 lines
3.0 KiB
C#
using Moq;
|
|
using NUnit.Framework;
|
|
using Umbraco.Cms.Core.Models.PublishedContent;
|
|
using Umbraco.Cms.Core.PropertyEditors;
|
|
using Umbraco.Cms.Core.PropertyEditors.DeliveryApi;
|
|
using Umbraco.Cms.Core.PublishedCache;
|
|
|
|
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.DeliveryApi;
|
|
|
|
[TestFixture]
|
|
public class CacheTests : DeliveryApiTests
|
|
{
|
|
[TestCase(PropertyCacheLevel.Snapshot, false, 1)]
|
|
[TestCase(PropertyCacheLevel.Snapshot, true, 1)]
|
|
[TestCase(PropertyCacheLevel.Elements, false, 1)]
|
|
[TestCase(PropertyCacheLevel.Elements, true, 1)]
|
|
[TestCase(PropertyCacheLevel.Element, false, 1)]
|
|
[TestCase(PropertyCacheLevel.Element, true, 1)]
|
|
[TestCase(PropertyCacheLevel.None, false, 4)]
|
|
[TestCase(PropertyCacheLevel.None, true, 4)]
|
|
public void PublishedElementProperty_CachesDeliveryApiValueConversion(PropertyCacheLevel cacheLevel, bool expanding, int expectedConverterHits)
|
|
{
|
|
var propertyValueConverter = new Mock<IDeliveryApiPropertyValueConverter>();
|
|
var invocationCount = 0;
|
|
propertyValueConverter.Setup(p => p.ConvertIntermediateToDeliveryApiObject(
|
|
It.IsAny<IPublishedElement>(),
|
|
It.IsAny<IPublishedPropertyType>(),
|
|
It.IsAny<PropertyCacheLevel>(),
|
|
It.IsAny<object?>(),
|
|
It.IsAny<bool>(),
|
|
It.IsAny<bool>())
|
|
).Returns(() => $"Delivery API value: {++invocationCount}");
|
|
propertyValueConverter.Setup(p => p.IsConverter(It.IsAny<IPublishedPropertyType>())).Returns(true);
|
|
propertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(cacheLevel);
|
|
propertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(cacheLevel);
|
|
propertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevelForExpansion(It.IsAny<IPublishedPropertyType>())).Returns(cacheLevel);
|
|
|
|
var propertyType = SetupPublishedPropertyType(propertyValueConverter.Object, "something", "Some.Thing");
|
|
|
|
var element = new Mock<IPublishedElement>();
|
|
|
|
var prop1 = new PublishedElementPropertyBase(propertyType, element.Object, false, cacheLevel);
|
|
|
|
var results = new List<string>();
|
|
results.Add(prop1.GetDeliveryApiValue(expanding)!.ToString());
|
|
results.Add(prop1.GetDeliveryApiValue(expanding)!.ToString());
|
|
results.Add(prop1.GetDeliveryApiValue(expanding)!.ToString());
|
|
results.Add(prop1.GetDeliveryApiValue(expanding)!.ToString());
|
|
|
|
Assert.AreEqual("Delivery API value: 1", results.First());
|
|
Assert.AreEqual(expectedConverterHits, results.Distinct().Count());
|
|
|
|
propertyValueConverter.Verify(
|
|
converter => converter.ConvertIntermediateToDeliveryApiObject(
|
|
It.IsAny<IPublishedElement>(),
|
|
It.IsAny<IPublishedPropertyType>(),
|
|
It.IsAny<PropertyCacheLevel>(),
|
|
It.IsAny<object?>(),
|
|
It.IsAny<bool>(),
|
|
It.IsAny<bool>()),
|
|
Times.Exactly(expectedConverterHits));
|
|
}
|
|
}
|