public void WhenFeedActionLinksNotManuallyConfigured_ConventionBasedBuilderUsesConventions() { // Arrange Uri expectedUri = new Uri("http://server/Movies/Default.Watch(param=@param)"); ODataModelBuilder builder = ODataConventionModelBuilderFactory.Create(); EntityTypeConfiguration <Movie> movie = builder.EntitySet <Movie>("Movies").EntityType; FunctionConfiguration watch = movie.Collection.Function("Watch").Returns <int>(); // function bound to collection watch.Parameter <string>("param"); IEdmModel model = builder.GetEdmModel(); var configuration = RoutingConfigurationFactory.Create(); string routeName = "Route"; configuration.MapODataServiceRoute(routeName, null, model); var request = RequestFactory.Create(HttpMethod.Get, "http://server/Movies", configuration, routeName); // Act IEdmEntityContainer container = model.SchemaElements.OfType <IEdmEntityContainer>().SingleOrDefault(); IEdmFunction watchFunction = Assert.Single(model.SchemaElements.OfType <IEdmFunction>()); // Guard IEdmEntitySet entitySet = container.EntitySets().SingleOrDefault(); ODataSerializerContextFactory.Create(model, entitySet, request); ResourceSetContext context = ResourceSetContextFactory.Create(entitySet, request); OperationLinkBuilder functionLinkBuilder = model.GetAnnotationValue <OperationLinkBuilder>(watchFunction); //Assert Assert.Equal(expectedUri, watch.GetFeedFunctionLink()(context)); Assert.NotNull(functionLinkBuilder); Assert.Equal(expectedUri, functionLinkBuilder.BuildLink(context)); }
public void Convention_GeneratesUri_ForActionBoundToCollectionOfEntity() { // Arrange ODataConventionModelBuilder builder = ODataConventionModelBuilderFactory.Create(); builder.EntitySet <Customer>("Customers"); var action = builder.EntityType <Customer>().Collection.Action("MyAction").Returns <int>(); action.Parameter <string>("param"); IEdmModel model = builder.GetEdmModel(); // Act var configuration = RoutingConfigurationFactory.Create(); configuration.MapODataServiceRoute("odata", "odata", model); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost:123", configuration, "odata"); IEdmEntitySet customers = model.EntityContainer.FindEntitySet("Customers"); var entityContext = ResourceSetContextFactory.Create(customers, request); // Assert var edmAction = model.SchemaElements.OfType <IEdmAction>().First(f => f.Name == "MyAction"); Assert.NotNull(edmAction); OperationLinkBuilder actionLinkBuilder = model.GetOperationLinkBuilder(edmAction); Uri link = actionLinkBuilder.BuildLink(entityContext); Assert.Equal("http://localhost:123/odata/Customers/Default.MyAction", link.AbsoluteUri); }
public void GenerateFunctionLinkForFeed_GeneratesLinkWithCast_IfEntitySetTypeDoesnotMatchActionEntityType() { // Arrange var request = RequestFactory.CreateFromModel(_model.Model); IEdmFunction function = _model.Model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsSpecialAllUpgraded"); Assert.NotNull(function); // Guard var context = ResourceSetContextFactory.Create(_model.Customers, request); // Act Uri link = context.GenerateFunctionLink(function); // Assert Assert.Equal("http://localhost/Customers/NS.SpecialCustomer/NS.IsSpecialAllUpgraded(param=@param)", link.AbsoluteUri); }
public void GenerateActionLinkForFeed_GeneratesLinkWithoutCast_IfEntitySetTypeMatchesActionEntityType() { // Arrange var request = RequestFactory.CreateFromModel(_model.Model); IEdmAction action = _model.Model.SchemaElements.OfType <IEdmAction>().First(a => a.Name == "UpgradeAll"); Assert.NotNull(action); // Guard var context = ResourceSetContextFactory.Create(_model.Customers, request); // Act Uri link = context.GenerateActionLink(action); Assert.Equal("http://localhost/Customers/NS.UpgradeAll", link.AbsoluteUri); }
public void GenerateFunctionLinkForFeed_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType() { // Arrange var request = RequestFactory.CreateFromModel(_model.Model); IEdmFunction function = _model.Model.SchemaElements.OfType <IEdmFunction>().First(a => a.Name == "IsAllUpgraded"); Assert.NotNull(function); // Guard IEdmEntitySet specialCustomers = new EdmEntitySet(_model.Container, "SpecialCustomers", _model.SpecialCustomer); var context = ResourceSetContextFactory.Create(specialCustomers, request); // Act Uri link = context.GenerateFunctionLink(function); // Assert Assert.Equal("http://localhost/SpecialCustomers/NS.Customer/NS.IsAllUpgraded(param=@param)", link.AbsoluteUri); }