Segments: Property level default segment fallback (#20309)
Property level default segment fallback
This commit is contained in:
@@ -144,75 +144,4 @@ public class ContentBuilderTests : DeliveryApiTests
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[TestCase("Shared value", "Segmented value", false)]
|
||||
[TestCase(null, "Segmented value", false)]
|
||||
[TestCase("Shared value", null, true)]
|
||||
[TestCase(null, null, true)]
|
||||
public void ContentBuilder_ReturnsNullForRequestedSegmentThatIsNotCreated(object? sharedValue, object? segmentedValue, bool expectNull)
|
||||
{
|
||||
var content = new Mock<IPublishedContent>();
|
||||
|
||||
var sharedPropertyValueConverter = new Mock<IDeliveryApiPropertyValueConverter>();
|
||||
sharedPropertyValueConverter.Setup(p => p.IsValue(It.IsAny<object?>(), It.IsAny<PropertyValueLevel>())).Returns(sharedValue is not null);
|
||||
sharedPropertyValueConverter.Setup(p => p.ConvertIntermediateToDeliveryApiObject(
|
||||
It.IsAny<IPublishedElement>(),
|
||||
It.IsAny<IPublishedPropertyType>(),
|
||||
It.IsAny<PropertyCacheLevel>(),
|
||||
It.IsAny<object?>(),
|
||||
It.IsAny<bool>(),
|
||||
It.IsAny<bool>())).Returns(sharedValue);
|
||||
sharedPropertyValueConverter.Setup(p => p.IsConverter(It.IsAny<IPublishedPropertyType>())).Returns(true);
|
||||
sharedPropertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None);
|
||||
sharedPropertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None);
|
||||
|
||||
var sharedPropertyType = SetupPublishedPropertyType(sharedPropertyValueConverter.Object, "sharedMessage", "Umbraco.Textstring");
|
||||
var sharedProperty = new PublishedElementPropertyBase(sharedPropertyType, content.Object, false, PropertyCacheLevel.None, new VariationContext(), Mock.Of<ICacheManager>());
|
||||
|
||||
var segmentedPropertyValueConverter = new Mock<IDeliveryApiPropertyValueConverter>();
|
||||
segmentedPropertyValueConverter.Setup(p => p.IsValue(It.IsAny<object?>(), It.IsAny<PropertyValueLevel>())).Returns(segmentedValue is not null);
|
||||
segmentedPropertyValueConverter.Setup(p => p.ConvertIntermediateToDeliveryApiObject(
|
||||
It.IsAny<IPublishedElement>(),
|
||||
It.IsAny<IPublishedPropertyType>(),
|
||||
It.IsAny<PropertyCacheLevel>(),
|
||||
It.IsAny<object?>(),
|
||||
It.IsAny<bool>(),
|
||||
It.IsAny<bool>())).Returns(segmentedValue);
|
||||
segmentedPropertyValueConverter.Setup(p => p.IsConverter(It.IsAny<IPublishedPropertyType>())).Returns(true);
|
||||
segmentedPropertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None);
|
||||
segmentedPropertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None);
|
||||
|
||||
var segmentedPropertyType = SetupPublishedPropertyType(segmentedPropertyValueConverter.Object, "segmentedMessage", "Umbraco.Textstring", contentVariation: ContentVariation.Segment);
|
||||
var segmentedProperty = new PublishedElementPropertyBase(segmentedPropertyType, content.Object, false, PropertyCacheLevel.None, new VariationContext(), Mock.Of<ICacheManager>());
|
||||
|
||||
var contentType = new Mock<IPublishedContentType>();
|
||||
contentType.SetupGet(c => c.Alias).Returns("thePageType");
|
||||
contentType.SetupGet(c => c.ItemType).Returns(PublishedItemType.Content);
|
||||
contentType.SetupGet(c => c.Variations).Returns(ContentVariation.Segment);
|
||||
|
||||
var key = Guid.NewGuid();
|
||||
var urlSegment = "url-segment";
|
||||
var name = "The page";
|
||||
ConfigurePublishedContentMock(content, key, name, urlSegment, contentType.Object, [sharedProperty, segmentedProperty]);
|
||||
|
||||
var routeBuilderMock = new Mock<IApiContentRouteBuilder>();
|
||||
routeBuilderMock
|
||||
.Setup(r => r.Build(content.Object, It.IsAny<string?>()))
|
||||
.Returns(new ApiContentRoute(content.Object.UrlSegment!, new ApiContentStartItem(Guid.NewGuid(), "/")));
|
||||
|
||||
var variationContextAccessorMock = new Mock<IVariationContextAccessor>();
|
||||
variationContextAccessorMock.Setup(v => v.VariationContext).Returns(new VariationContext(segment: "missingSegment"));
|
||||
|
||||
var builder = new ApiContentBuilder(new ApiContentNameProvider(), routeBuilderMock.Object, CreateOutputExpansionStrategyAccessor(), variationContextAccessorMock.Object);
|
||||
var result = builder.Build(content.Object);
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.IsNull(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.IsNotNull(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user