|
5 | 5 | using Umbraco.Cms.Core.Models.DeliveryApi;
|
6 | 6 | using Umbraco.Cms.Core.Models.PublishedContent;
|
7 | 7 | using Umbraco.Cms.Core.PropertyEditors;
|
| 8 | +using Umbraco.Cms.Core.PropertyEditors.DeliveryApi; |
8 | 9 | using Umbraco.Cms.Core.PublishedCache;
|
9 | 10 | using Umbraco.Cms.Core.Services.Navigation;
|
10 | 11 | using Umbraco.Cms.Tests.Common;
|
@@ -143,4 +144,75 @@ public void ContentBuilder_ReturnsNullForUnRoutableContent()
|
143 | 144 |
|
144 | 145 | Assert.Null(result);
|
145 | 146 | }
|
| 147 | + |
| 148 | + [TestCase("Shared value", "Segmented value", false)] |
| 149 | + [TestCase(null, "Segmented value", false)] |
| 150 | + [TestCase("Shared value", null, true)] |
| 151 | + [TestCase(null, null, true)] |
| 152 | + public void ContentBuilder_ReturnsNullForRequestedSegmentThatIsNotCreated(object? sharedValue, object? segmentedValue, bool expectNull) |
| 153 | + { |
| 154 | + var content = new Mock<IPublishedContent>(); |
| 155 | + |
| 156 | + var sharedPropertyValueConverter = new Mock<IDeliveryApiPropertyValueConverter>(); |
| 157 | + sharedPropertyValueConverter.Setup(p => p.IsValue(It.IsAny<object?>(), It.IsAny<PropertyValueLevel>())).Returns(sharedValue is not null); |
| 158 | + sharedPropertyValueConverter.Setup(p => p.ConvertIntermediateToDeliveryApiObject( |
| 159 | + It.IsAny<IPublishedElement>(), |
| 160 | + It.IsAny<IPublishedPropertyType>(), |
| 161 | + It.IsAny<PropertyCacheLevel>(), |
| 162 | + It.IsAny<object?>(), |
| 163 | + It.IsAny<bool>(), |
| 164 | + It.IsAny<bool>())).Returns(sharedValue); |
| 165 | + sharedPropertyValueConverter.Setup(p => p.IsConverter(It.IsAny<IPublishedPropertyType>())).Returns(true); |
| 166 | + sharedPropertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None); |
| 167 | + sharedPropertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None); |
| 168 | + |
| 169 | + var sharedPropertyType = SetupPublishedPropertyType(sharedPropertyValueConverter.Object, "sharedMessage", "Umbraco.Textstring"); |
| 170 | + var sharedProperty = new PublishedElementPropertyBase(sharedPropertyType, content.Object, false, PropertyCacheLevel.None, new VariationContext(), Mock.Of<ICacheManager>()); |
| 171 | + |
| 172 | + var segmentedPropertyValueConverter = new Mock<IDeliveryApiPropertyValueConverter>(); |
| 173 | + segmentedPropertyValueConverter.Setup(p => p.IsValue(It.IsAny<object?>(), It.IsAny<PropertyValueLevel>())).Returns(segmentedValue is not null); |
| 174 | + segmentedPropertyValueConverter.Setup(p => p.ConvertIntermediateToDeliveryApiObject( |
| 175 | + It.IsAny<IPublishedElement>(), |
| 176 | + It.IsAny<IPublishedPropertyType>(), |
| 177 | + It.IsAny<PropertyCacheLevel>(), |
| 178 | + It.IsAny<object?>(), |
| 179 | + It.IsAny<bool>(), |
| 180 | + It.IsAny<bool>())).Returns(segmentedValue); |
| 181 | + segmentedPropertyValueConverter.Setup(p => p.IsConverter(It.IsAny<IPublishedPropertyType>())).Returns(true); |
| 182 | + segmentedPropertyValueConverter.Setup(p => p.GetPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None); |
| 183 | + segmentedPropertyValueConverter.Setup(p => p.GetDeliveryApiPropertyCacheLevel(It.IsAny<IPublishedPropertyType>())).Returns(PropertyCacheLevel.None); |
| 184 | + |
| 185 | + var segmentedPropertyType = SetupPublishedPropertyType(segmentedPropertyValueConverter.Object, "segmentedMessage", "Umbraco.Textstring", contentVariation: ContentVariation.Segment); |
| 186 | + var segmentedProperty = new PublishedElementPropertyBase(segmentedPropertyType, content.Object, false, PropertyCacheLevel.None, new VariationContext(), Mock.Of<ICacheManager>()); |
| 187 | + |
| 188 | + var contentType = new Mock<IPublishedContentType>(); |
| 189 | + contentType.SetupGet(c => c.Alias).Returns("thePageType"); |
| 190 | + contentType.SetupGet(c => c.ItemType).Returns(PublishedItemType.Content); |
| 191 | + contentType.SetupGet(c => c.Variations).Returns(ContentVariation.Segment); |
| 192 | + |
| 193 | + var key = Guid.NewGuid(); |
| 194 | + var urlSegment = "url-segment"; |
| 195 | + var name = "The page"; |
| 196 | + ConfigurePublishedContentMock(content, key, name, urlSegment, contentType.Object, [sharedProperty, segmentedProperty]); |
| 197 | + |
| 198 | + var routeBuilderMock = new Mock<IApiContentRouteBuilder>(); |
| 199 | + routeBuilderMock |
| 200 | + .Setup(r => r.Build(content.Object, It.IsAny<string?>())) |
| 201 | + .Returns(new ApiContentRoute(content.Object.UrlSegment!, new ApiContentStartItem(Guid.NewGuid(), "/"))); |
| 202 | + |
| 203 | + var variationContextAccessorMock = new Mock<IVariationContextAccessor>(); |
| 204 | + variationContextAccessorMock.Setup(v => v.VariationContext).Returns(new VariationContext(segment: "missingSegment")); |
| 205 | + |
| 206 | + var builder = new ApiContentBuilder(new ApiContentNameProvider(), routeBuilderMock.Object, CreateOutputExpansionStrategyAccessor(), variationContextAccessorMock.Object); |
| 207 | + var result = builder.Build(content.Object); |
| 208 | + |
| 209 | + if (expectNull) |
| 210 | + { |
| 211 | + Assert.IsNull(result); |
| 212 | + } |
| 213 | + else |
| 214 | + { |
| 215 | + Assert.IsNotNull(result); |
| 216 | + } |
| 217 | + } |
146 | 218 | }
|
0 commit comments