public void Apply_Doesnot_Override_UserConfiguration() { ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var vehicles = builder.EntitySet<Vehicle>("vehicles"); var car = builder.AddEntityType(typeof(Car)); var paintAction = vehicles.EntityType.Action("Paint"); paintAction.HasActionLink(ctxt => new Uri("http://localhost/ActionTestWorks"), followsConventions: false); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(paintAction, builder); IEdmModel model = builder.GetEdmModel(); var vehiclesEdmSet = model.EntityContainer.FindEntitySet("vehicles"); var carEdmType = model.FindDeclaredType("System.Web.OData.Builder.TestModels.Car") as IEdmEntityType; var paintEdmAction = model.GetAvailableProcedures( model.FindDeclaredType("System.Web.OData.Builder.TestModels.Car") as IEdmEntityType).Single() as IEdmAction; Assert.NotNull(paintEdmAction); HttpConfiguration configuration = new HttpConfiguration(); configuration.Routes.MapODataServiceRoute(model); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost"); request.SetConfiguration(configuration); ActionLinkBuilder actionLinkBuilder = model.GetActionLinkBuilder(paintEdmAction); var serializerContext = new ODataSerializerContext { Model = model, NavigationSource = vehiclesEdmSet, Url = request.GetUrlHelper() }; var entityContext = new EntityInstanceContext(serializerContext, carEdmType.AsReference(), new Car { Model = 2009, Name = "Contoso" }); Uri link = actionLinkBuilder.BuildActionLink(entityContext); Assert.Equal("http://localhost/ActionTestWorks", link.AbsoluteUri); }
public void Apply_FollowsConventions() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); ActionConfiguration action = new ActionConfiguration(builder, "IgnoreAction"); Mock<IEdmTypeConfiguration> mockBindingParameterType = new Mock<IEdmTypeConfiguration>(); mockBindingParameterType.Setup(o => o.Kind).Returns(EdmTypeKind.Entity); action.SetBindingParameter("IgnoreParameter", mockBindingParameterType.Object, alwaysBindable: false); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(action, builder); // Assert Assert.True(action.FollowsConventions); }
public void Apply_FollowsConventions() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); ActionConfiguration action = new ActionConfiguration(builder, "IgnoreAction"); Mock <IEdmTypeConfiguration> mockBindingParameterType = new Mock <IEdmTypeConfiguration>(); mockBindingParameterType.Setup(o => o.Kind).Returns(EdmTypeKind.Entity); action.SetBindingParameter("IgnoreParameter", mockBindingParameterType.Object); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(action, builder); // Assert Assert.True(action.FollowsConventions); }
public void Apply_SetsActionLinkBuilder_OnlyIfActionIsBindable() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var vehicles = builder.EntitySet <Vehicle>("vehicles"); var paintAction = builder.Action("Paint"); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(paintAction, builder); // Assert IEdmModel model = builder.GetEdmModel(); var paintEdmAction = model.EntityContainer.Elements.OfType <IEdmActionImport>().Single(); ActionLinkBuilder actionLinkBuilder = model.GetAnnotationValue <ActionLinkBuilder>(paintEdmAction); Assert.Null(actionLinkBuilder); }
public void Apply_Doesnot_Override_UserConfiguration() { ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var vehicles = builder.EntitySet <Vehicle>("vehicles"); var car = builder.AddEntityType(typeof(Car)); var paintAction = vehicles.EntityType.Action("Paint"); paintAction.HasActionLink(ctxt => new Uri("http://localhost/ActionTestWorks"), followsConventions: false); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(paintAction, builder); IEdmModel model = builder.GetEdmModel(); var vehiclesEdmSet = model.EntityContainer.FindEntitySet("vehicles"); var carEdmType = model.FindDeclaredType("System.Web.OData.Builder.TestModels.Car") as IEdmEntityType; var paintEdmAction = model.GetAvailableProcedures( model.FindDeclaredType("System.Web.OData.Builder.TestModels.Car") as IEdmEntityType).Single() as IEdmAction; Assert.NotNull(paintEdmAction); HttpConfiguration configuration = new HttpConfiguration(); configuration.MapODataServiceRoute(model); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost"); request.SetConfiguration(configuration); ActionLinkBuilder actionLinkBuilder = model.GetActionLinkBuilder(paintEdmAction); var serializerContext = new ODataSerializerContext { Model = model, NavigationSource = vehiclesEdmSet, Url = request.GetUrlHelper() }; var entityContext = new EntityInstanceContext(serializerContext, carEdmType.AsReference(), new Car { Model = 2009, Name = "Contoso" }); Uri link = actionLinkBuilder.BuildActionLink(entityContext); Assert.Equal("http://localhost/ActionTestWorks", link.AbsoluteUri); }
public void Apply_SetsActionLinkBuilder_OnlyIfActionIsBindable() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var vehicles = builder.EntitySet<Vehicle>("vehicles"); var paintAction = builder.Action("Paint"); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(paintAction, builder); // Assert IEdmModel model = builder.GetEdmModel(); var paintEdmAction = model.EntityContainer.Elements.OfType<IEdmActionImport>().Single(); ActionLinkBuilder actionLinkBuilder = model.GetAnnotationValue<ActionLinkBuilder>(paintEdmAction); Assert.Null(actionLinkBuilder); }
public void Apply_Doesnot_Override_UserConfiguration() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var customers = builder.EntitySet <Customer>("Customers"); var paintAction = customers.EntityType.Action("Paint"); paintAction.HasActionLink(ctxt => new Uri("http://localhost/ActionTestWorks"), followsConventions: false); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(paintAction, builder); IEdmModel model = builder.GetEdmModel(); var edmCustomers = model.EntityContainer.FindEntitySet("Customers"); var edmCustomer = model.SchemaElements.OfType <IEdmEntityType>().First(c => c.Name == "Customer"); var edmAction = model.SchemaElements.OfType <IEdmAction>().First(a => a.Name == "Paint"); Assert.NotNull(edmAction); HttpConfiguration configuration = new HttpConfiguration(); configuration.MapODataServiceRoute(model); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost"); request.SetConfiguration(configuration); OperationLinkBuilder actionLinkBuilder = model.GetOperationLinkBuilder(edmAction); var serializerContext = new ODataSerializerContext { Model = model, NavigationSource = edmCustomers, Url = request.GetUrlHelper() }; var entityContext = new ResourceContext(serializerContext, edmCustomer.AsReference(), new Customer { Id = 2009 }); // Assert Uri link = actionLinkBuilder.BuildLink(entityContext); Assert.Equal("http://localhost/ActionTestWorks", link.AbsoluteUri); }
public void Apply_SetFunctionLinkBuilder_ForActionBoundToEntity() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var action = builder.EntityType<Customer>().Action("MyAction"); // Act Assert.Null(action.GetActionLink()); // Guard Assert.Null(action.GetFeedActionLink()); // Guard ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(action, builder); // Assert var actionLink = action.GetActionLink(); Assert.NotNull(actionLink); Assert.IsType<Func<EntityInstanceContext, Uri>>(actionLink); Assert.Null(action.GetFeedActionLink()); }
public void Apply_SetsOperationLinkBuilder_OnlyIfFunctionIsBindable() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var function = builder.Function("MyFunction").Returns <int>(); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(function, builder); // Assert IEdmModel model = builder.GetEdmModel(); var edmFunction = model.EntityContainer.Elements.OfType <IEdmFunctionImport>().Single(); Assert.NotNull(edmFunction); OperationLinkBuilder linkBuilder = model.GetAnnotationValue <OperationLinkBuilder>(edmFunction); Assert.Null(linkBuilder); }
public void Apply_WorksFor_ActionBoundToCollectionOfEntity() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var action = builder.EntityType<Customer>().Collection.Action("MyFunction").Returns<int>(); action.Parameter<string>("param"); // Act Assert.Null(action.GetActionLink()); // Guard Assert.Null(action.GetFeedActionLink()); // Guard ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(action, builder); // Assert var actionLink = action.GetFeedActionLink(); Assert.NotNull(actionLink); Assert.IsType<Func<FeedContext, Uri>>(actionLink); Assert.Null(action.GetActionLink()); }
public void Apply_SetOperationLinkBuilder_ForActionBoundToEntity() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var action = builder.EntityType <Customer>().Action("MyAction"); // Act Assert.Null(action.GetActionLink()); // Guard Assert.Null(action.GetFeedActionLink()); // Guard ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(action, builder); // Assert var actionLink = action.GetActionLink(); Assert.NotNull(actionLink); Assert.IsType <Func <ResourceContext, Uri> >(actionLink); Assert.Null(action.GetFeedActionLink()); }
public void Apply_WorksFor_ActionBoundToCollectionOfEntity() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var action = builder.EntityType <Customer>().Collection.Action("MyFunction").Returns <int>(); action.Parameter <string>("param"); // Act Assert.Null(action.GetActionLink()); // Guard Assert.Null(action.GetFeedActionLink()); // Guard ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); convention.Apply(action, builder); // Assert var actionLink = action.GetFeedActionLink(); Assert.NotNull(actionLink); Assert.IsType <Func <ResourceSetContext, Uri> >(actionLink); Assert.Null(action.GetActionLink()); }
public void Apply_Doesnot_Override_UserConfiguration() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var customers = builder.EntitySet<Customer>("Customers"); var paintAction = customers.EntityType.Action("Paint"); paintAction.HasActionLink(ctxt => new Uri("http://localhost/ActionTestWorks"), followsConventions: false); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(paintAction, builder); IEdmModel model = builder.GetEdmModel(); var edmCustomers = model.EntityContainer.FindEntitySet("Customers"); var edmCustomer = model.SchemaElements.OfType<IEdmEntityType>().First(c => c.Name == "Customer"); var edmAction = model.SchemaElements.OfType<IEdmAction>().First(a => a.Name == "Paint"); Assert.NotNull(edmAction); HttpConfiguration configuration = new HttpConfiguration(); configuration.MapODataServiceRoute(model); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://localhost"); request.SetConfiguration(configuration); ActionLinkBuilder actionLinkBuilder = model.GetActionLinkBuilder(edmAction); var serializerContext = new ODataSerializerContext { Model = model, NavigationSource = edmCustomers, Url = request.GetUrlHelper() }; var entityContext = new EntityInstanceContext(serializerContext, edmCustomer.AsReference(), new Customer { Id = 2009 }); // Assert Uri link = actionLinkBuilder.BuildActionLink(entityContext); Assert.Equal("http://localhost/ActionTestWorks", link.AbsoluteUri); }
public void Apply_SetsFunctionLinkBuilder_OnlyIfFunctionIsBindable() { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); var function = builder.Function("MyFunction").Returns<int>(); ActionLinkGenerationConvention convention = new ActionLinkGenerationConvention(); // Act convention.Apply(function, builder); // Assert IEdmModel model = builder.GetEdmModel(); var edmFunction = model.EntityContainer.Elements.OfType<IEdmFunctionImport>().Single(); Assert.NotNull(edmFunction); FunctionLinkBuilder linkBuilder = model.GetAnnotationValue<FunctionLinkBuilder>(edmFunction); Assert.Null(linkBuilder); }