Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/DeliveryApi/CacheTests.cs
Kenn Jacobsen 4d98937af9 Delivery API nested property expansion and output limiting (#15124)
* 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>
2023-11-14 11:16:12 +01:00

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