public void TargetOnEntitySetReturnsCorrectNavigationRestrictionsValue(EdmVocabularyAnnotationSerializationLocation location) { // Arrange const string template = @" <Annotations Target=""NS.Default/Calendars""> {0} </Annotations>"; IEdmModel model = GetEdmModel(template, location); Assert.NotNull(model); // guard IEdmEntitySet calendars = model.EntityContainer.FindEntitySet("Calendars"); // Act NavigationRestrictionsType navigation = model.GetRecord <NavigationRestrictionsType>(calendars); // Assert VerifyNavigationRestrictions(navigation); NavigationPropertyRestriction navRestriction = navigation.RestrictedProperties.Last(); Assert.NotNull(navRestriction.Navigability); Assert.Equal(NavigationType.None, navRestriction.Navigability.Value); Assert.Equal("xyz", navRestriction.NavigationProperty); Assert.True(navigation.IsRestrictedProperty("xyz")); }
private static void VerifyNavigationRestrictions(NavigationRestrictionsType navigation) { Assert.NotNull(navigation); Assert.True(navigation.IsNavigable); Assert.NotNull(navigation.Navigability); Assert.Equal(NavigationType.Recursive, navigation.Navigability.Value); Assert.NotNull(navigation.RestrictedProperties); Assert.Equal(2, navigation.RestrictedProperties.Count); Assert.False(navigation.IsRestrictedProperty("abc")); Assert.True(navigation.IsRestrictedProperty("xyz")); // #1 NavigationPropertyRestriction navRestriction = navigation.RestrictedProperties.First(); Assert.NotNull(navRestriction.Navigability); Assert.Equal(NavigationType.Single, navRestriction.Navigability.Value); Assert.Equal("abc", navRestriction.NavigationProperty); Assert.NotNull(navRestriction.SkipSupported); Assert.False(navRestriction.SkipSupported.Value); Assert.Null(navRestriction.TopSupported); Assert.Null(navRestriction.OptimisticConcurrencyControl); // #2 navRestriction = navigation.RestrictedProperties.Last(); Assert.NotNull(navRestriction.Navigability); Assert.Equal(NavigationType.None, navRestriction.Navigability.Value); Assert.Equal("xyz", navRestriction.NavigationProperty); Assert.Null(navRestriction.SkipSupported); Assert.Null(navRestriction.TopSupported); Assert.NotNull(navRestriction.OptimisticConcurrencyControl); Assert.True(navRestriction.OptimisticConcurrencyControl.Value); }
public static OpenApiParameter CreateSelect(this ODataContext context, IEdmVocabularyAnnotatable target, IEdmStructuredType structuredType) { Utils.CheckArgumentNull(context, nameof(context)); Utils.CheckArgumentNull(target, nameof(target)); Utils.CheckArgumentNull(structuredType, nameof(structuredType)); NavigationRestrictionsType navigation = context.Model.GetRecord <NavigationRestrictionsType>(target, CapabilitiesConstants.NavigationRestrictions); if (navigation != null && !navigation.IsNavigable) { return(null); } IList <IOpenApiAny> selectItems = new List <IOpenApiAny>(); foreach (var property in structuredType.StructuralProperties()) { selectItems.Add(new OpenApiString(property.Name)); } foreach (var property in structuredType.NavigationProperties()) { if (navigation != null && navigation.IsRestrictedProperty(property.Name)) { continue; } selectItems.Add(new OpenApiString(property.Name)); } return(new OpenApiParameter { Name = "$select", In = ParameterLocation.Query, Description = "Select properties to be returned", Schema = new OpenApiSchema { Type = "array", UniqueItems = true, Items = new OpenApiSchema { Type = "string", Enum = selectItems } }, Style = ParameterStyle.Form, Explode = false }); }