public void SelectAction_ReturnsNull_IfActionIsMissing(string httpMethod) { ODataPath odataPath = new DefaultODataPathHandler().Parse(ODataRoutingModel.GetModel(), "RoutingCustomers"); ILookup<string, HttpActionDescriptor> emptyActionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); string selectedAction = new EntitySetRoutingConvention().SelectAction(odataPath, controllerContext, emptyActionMap); Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void SelectController_RetrunsSingletonName_ForSingletonRequest() { // Arrange Mock<HttpRequestMessage> request = new Mock<HttpRequestMessage>(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://any/", "VipCustomer"); // Act string controller = new MockNavigationSourceRoutingConvention().SelectController(odataPath, request.Object); // Assert Assert.Equal("VipCustomer", controller); }
public void SelectAction_ReturnsFunctionName_ForSingletonFunctionOnEntity() { // Arrange FunctionRoutingConvention functionConvention = new FunctionRoutingConvention(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer/NS.IsUpgraded"); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("IsUpgraded"); // Act string selectedAction = SelectActionHelper.SelectAction(functionConvention, odataPath, request, actionMap); // Assert Assert.Equal("IsUpgraded", selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
public void SelectAction_OnSingletonPath_ReturnsTheActionNameWithCast(string httpMethod, string prefix) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer/Account/NS.SpecialAccount"); var request = RequestFactory.Create(new HttpMethod(httpMethod), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap(prefix + "AccountOfSpecialAccountFromCustomer"); // Act string selectedAction = SelectActionHelper.SelectAction(new PropertyRoutingConvention(), odataPath, request, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(prefix + "AccountOfSpecialAccountFromCustomer", selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
public void Can_find_action_overload_using_bindingparameter_type() { IEdmModel model = GetModel(); string url = "Vehicles(8)/System.Web.Http.OData.Builder.TestModels.Car/Wash"; ODataPath path = new DefaultODataPathHandler().Parse(model, url); Assert.NotNull(path); // Guard ODataDeserializerContext context = new ODataDeserializerContext { Path = path, Model = model }; IEdmFunctionImport action = ODataActionPayloadDeserializer.GetFunctionImport(context); Assert.NotNull(action); Assert.Equal("Wash", action.Name); }
public void SelectAction_ReturnsNull_IfNotCorrectMethod(string methodName) { // Arrange HttpMethod method = new HttpMethod(methodName); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://localhost/", "Orders(7)/DynamicPropertyA"); var request = RequestFactory.Create(method, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("GetDynamicProperty"); // Act string selectedAction = SelectActionHelper.SelectAction(_routingConvention, odataPath, request, actionMap); // Assert Assert.Null(selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
/// <summary> /// Gets the <see cref="IODataPathHandler"/> to use for generating links. /// </summary> /// <param name="request">The request.</param> /// <returns>The <see cref="IODataPathHandler"/> to use for generating links.</returns> public static IODataPathHandler GetODataPathHandler(this HttpRequestMessage request) { if (request == null) { throw Error.ArgumentNull("request"); } object pathHandler; if (!request.Properties.TryGetValue(ODataPathHandlerKey, out pathHandler)) { IODataPathHandler defaultPathHandler = new DefaultODataPathHandler(); request.SetODataPathHandler(defaultPathHandler); return defaultPathHandler; } return pathHandler as IODataPathHandler; }
public void SelectAction_ReturnsTheActionName_ForSingletonActionBoundToEntity() { // Arrange ActionRoutingConvention actionConvention = new ActionRoutingConvention(); IEdmModel model = new CustomersModelWithInheritance().Model; ODataPath odataPath = new DefaultODataPathHandler().Parse(model, _serviceRoot, "VipCustomer/NS.upgrade"); var request = RequestFactory.Create(HttpMethod.Post, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("upgrade"); // Act string selectedAction = SelectActionHelper.SelectAction(new ActionRoutingConvention(), odataPath, request, actionMap); // Assert Assert.Equal("upgrade", selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
public void SelectAction_ReturnsTheActionName_ForEntitySetActionBoundToEntitySet() { // Arrange ActionRoutingConvention actionConvention = new ActionRoutingConvention(); IEdmModel model = ODataRoutingModel.GetModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model, _serviceRoot, "RoutingCustomers/Default.GetVIPs"); var request = RequestFactory.Create(HttpMethod.Post, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("GetVIPs"); // Act string selectedAction = SelectActionHelper.SelectAction(new ActionRoutingConvention(), odataPath, request, actionMap); // Assert Assert.Equal("GetVIPs", selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
public void SelectAction_ReturnsFunctionImportName() { // Arrange OperationImportRoutingConvention importConvention = new OperationImportRoutingConvention(); ODataPath odataPath = new DefaultODataPathHandler().Parse(EdmModel, "http://localhost/", "RateByOrder(order=2)"); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("RateByOrder"); // Act string selectedAction = SelectActionHelper.SelectAction(importConvention, odataPath, request, actionMap); // Assert Assert.Equal("RateByOrder", selectedAction); Assert.Single(SelectActionHelper.GetRouteData(request).Values); Assert.Equal(2, SelectActionHelper.GetRouteData(request).Values["order"]); }
public void GetResponseStatusCode_ReturnsNoContentForProperties_AndNotFoundForEntities(string odataPath, HttpStatusCode?expected) { // Arrange IEdmModel model = BuildModel(); IODataPathHandler pathHandler = new DefaultODataPathHandler(); ODataPath path = pathHandler.Parse(model, "http://localhost/any", odataPath); // Guard Assert.NotNull(path); // Act HttpStatusCode?statusCode = ODataNullValueMessageHandler.GetUpdatedResponseStatusCodeOrNull(path); // Assert Assert.Equal(expected, statusCode); }
public void BuildQuery_SetValueFlagToTrue_IfPathHasValueSegment(string path, string expectedQuery) { var model = ODataPathQueryModel.GetModel(); var pathHandler = new DefaultODataPathHandler(); var odataPath = pathHandler.Parse(model, "http://any/", path); IQueryable source = Array.CreateInstance(typeof(ODataPathQuery_Customer), 0).AsQueryable(); var queryBuilder = new ODataPathQueryBuilder(source, odataPath); ODataPathQueryResult result = queryBuilder.BuildQuery(); string queryExpression = ExpressionStringBuilder.ToString(result.Result.Expression); queryExpression = RemoveNameSpace(queryExpression); Assert.Equal(expectedQuery, queryExpression); Assert.True(result.HasValueSegment); Assert.False(result.HasCountSegment); }
public void SelectAction_SetsRelatedKey_ForDeleteRefRequestsWithDollarId(string uri) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://any/", uri); var request = RequestFactory.Create(HttpMethod.Delete, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("DeleteRef"); // Act string selectedAction = SelectActionHelper.SelectAction(new RefRoutingConvention(), odataPath, request, actionMap); // Assert Assert.Equal("DeleteRef", selectedAction); Assert.Equal(42, SelectActionHelper.GetRouteData(request).Values["key"]); Assert.Equal("Orders", SelectActionHelper.GetRouteData(request).Values["navigationProperty"]); Assert.Equal(24, SelectActionHelper.GetRouteData(request).Values["relatedKey"]); }
public void SelectAction_OnEnumCollection_ReturnsTheActionName(string httpMethod, string prefix) { // Arrange IEdmModel model = ODataCountTest.GetEdmModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model, _serviceRoot, "DollarCountEntities(7)/EnumCollectionProp"); var request = RequestFactory.Create(new HttpMethod(httpMethod), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap(prefix + "EnumCollectionProp"); // Act string selectedAction = SelectActionHelper.SelectAction(new PropertyRoutingConvention(), odataPath, request, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(prefix + "EnumCollectionProp", selectedAction); Assert.Single(SelectActionHelper.GetRouteData(request).Values); Assert.Equal(7, SelectActionHelper.GetRouteData(request).Values["key"]); }
public void GetSingleEntityEntityType_ReturnsEntityTypeForSingleEntityResources(string odataPath, string typeName) { // Arrange IEdmModel model = SetupModel(); IODataPathHandler pathHandler = new DefaultODataPathHandler(); ODataPath path = pathHandler.Parse(model, "http://localhost/any", odataPath); // Guard Assert.NotNull(path); // Act IEdmEntityType entityType = ETagMessageHandler.GetSingleEntityEntityType(path); // Assert Assert.NotNull(entityType); Assert.Equal(typeName, entityType.FullName()); }
public void SelectAction_ReturnsNull_ForInvalidHttpMethods(string httpMethod) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer"); ILookup <string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); // Act string actionName = new SingletonRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Act & Assert Assert.Null(actionName); }
public void Validate_Throws_DollarCountAppliedOnNotCountableCollection(string uri, string message) { // Arrange IEdmModel model = GetEdmModel(); var pathHandler = new DefaultODataPathHandler(); string serviceRoot = "http://localhost/"; ODataPath path = pathHandler.Parse(model, serviceRoot, uri); var context = new ODataQueryContext( model, EdmCoreModel.Instance.GetInt32(false).Definition, path); var option = new CountQueryOption("true", context); var settings = new ODataValidationSettings(); // Act & Assert ExceptionAssert.Throws <InvalidOperationException>(() => _validator.Validate(option, settings), message); }
public void SelectAction_OnEntitySetPath_ReturnsTheActionName(string httpMethod, string prefix) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "Customers(7)/Name"); var request = RequestFactory.Create(new HttpMethod(httpMethod), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap(prefix + "NameFromCustomer"); // Act string selectedAction = SelectActionHelper.SelectAction(new PropertyRoutingConvention(), odataPath, request, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(prefix + "NameFromCustomer", selectedAction); Assert.Single(SelectActionHelper.GetRouteData(request).Values); Assert.Equal(7, SelectActionHelper.GetRouteData(request).Values["key"]); }
public void SelectAction_UpdatesRouteData_ForEntityFunctionWithParameters() { // Arrange FunctionRoutingConvention functionConvention = new FunctionRoutingConvention(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "Customers(1)/NS.IsUpgradedWithParam(city='any')"); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("IsUpgradedWithParam"); // Act string selectedAction = SelectActionHelper.SelectAction(functionConvention, odataPath, request, actionMap); // Assert Assert.Equal("IsUpgradedWithParam", selectedAction); Assert.Equal(2, SelectActionHelper.GetRouteData(request).Values.Count); Assert.Equal(1, SelectActionHelper.GetRouteData(request).Values["key"]); Assert.Equal("any", SelectActionHelper.GetRouteData(request).Values["city"]); }
public void SelectAction_ReturnsFunctionName_DollarCount() { // Arrange var model = new CustomersModelWithInheritance(); var handler = new DefaultODataPathHandler(); ODataPath odataPath = handler.Parse(model.Model, _serviceRoot, "Customers(1)/NS.GetOrders(parameter=5)/$count"); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("GetOrders"); // Act string selectedAction = SelectActionHelper.SelectAction(new FunctionRoutingConvention(), odataPath, request, actionMap); // Assert Assert.Equal("GetOrders", selectedAction); Assert.Equal(2, SelectActionHelper.GetRouteData(request).Values.Count); Assert.Equal(1, SelectActionHelper.GetRouteData(request).Values["key"]); Assert.Equal(5, SelectActionHelper.GetRouteData(request).Values["parameter"]); }
public void SelectAction_ReturnsTheActionName_ForValidHttpMethods(string httpMethod, string httpMethodNamePrefix) { // Arrange const string SingletonName = "VipCustomer"; string actionName = httpMethodNamePrefix + SingletonName; CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, SingletonName); var request = RequestFactory.Create(new HttpMethod(httpMethod), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap(actionName); // Act string selectedAction = SelectActionHelper.SelectAction(new SingletonRoutingConvention(), odataPath, request, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(actionName, selectedAction); Assert.Empty(SelectActionHelper.GetRouteData(request).Values); }
public void SelectAction_SetsRelatedKey_ForDeleteRefRequestsWithDollarId(string uri) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://any/", uri); HttpControllerContext controllerContext = CreateControllerContext("DELETE"); var actionMap = GetMockActionMap("DeleteRef"); // Act var actionName = new RefRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); var routeData = controllerContext.RouteData; // Assert Assert.Equal("DeleteRef", actionName); Assert.Equal(42, routeData.Values["key"]); Assert.Equal("Orders", routeData.Values["navigationProperty"]); Assert.Equal(24, routeData.Values["relatedKey"]); }
public void SelectAction_ReturnsNull_IfActionIsMissing(string httpMethod) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer"); ILookup <string, HttpActionDescriptor> emptyActionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); // Act string selectedAction = new EntitySetRoutingConvention().SelectAction(odataPath, controllerContext, emptyActionMap); // Assert Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void Can_Find_Customized_Namespace_Action(string url) { // Arrange IEdmModel model = GetModel(); ODataPath path = new DefaultODataPathHandler().Parse(model, _serviceRoot, url); Assert.NotNull(path); // Guard ODataDeserializerContext context = new ODataDeserializerContext { Path = path, Model = model }; // Act IEdmAction action = ODataActionPayloadDeserializer.GetAction(context); // Assert Assert.NotNull(action); Assert.Equal("NSAction", action.Name); }
public void Can_find_action_overload_using_bindingparameter_type(string url) { // Arrange IEdmModel model = GetModel(); ODataPath path = new DefaultODataPathHandler().Parse(model, _serviceRoot, url); Assert.NotNull(path); // Guard ODataDeserializerContext context = new ODataDeserializerContext { Path = path, Model = model }; // Act IEdmAction action = ODataActionPayloadDeserializer.GetAction(context); // Assert Assert.NotNull(action); Assert.Equal("Wash", action.Name); }
private static object CovertResourceId(object source, ODataResource resource, IEdmEntityTypeReference entityTypeReference, ODataDeserializerContext readContext) { Contract.Assert(resource != null); Contract.Assert(source != null); if (resource.Id == null || resource.Properties.Any()) { return(source); } HttpRequestMessage request = readContext.Request; DefaultODataPathHandler pathHandler = new DefaultODataPathHandler(); string serviceRoot = GetServiceRoot(request); IEnumerable <KeyValuePair <string, object> > keyValues = GetKeys(pathHandler, serviceRoot, resource.Id, request.GetRequestContainer()); IList <IEdmStructuralProperty> keys = entityTypeReference.Key().ToList(); if (keys.Count == 1 && keyValues.Count() == 1) { // TODO: make sure the enum key works object propertyValue = keyValues.First().Value; DeserializationHelpers.SetDeclaredProperty(source, EdmTypeKind.Primitive, keys[0].Name, propertyValue, keys[0], readContext); return(source); } IDictionary <string, object> keyValuesDic = keyValues.ToDictionary(e => e.Key, e => e.Value); foreach (IEdmStructuralProperty key in keys) { object value; if (keyValuesDic.TryGetValue(key.Name, out value)) { // TODO: make sure the enum key works DeserializationHelpers.SetDeclaredProperty(source, EdmTypeKind.Primitive, key.Name, value, key, readContext); } } return(source); }
public void SelectAction_ReturnsFunctionName_ForEntityFunctionOnEntity() { // Arrange FunctionRoutingConvention functionConvention = new FunctionRoutingConvention(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "Customers(1)/NS.IsUpgraded"); var request = RequestFactory.Create(HttpMethod.Get, "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("IsUpgraded"); // Act string selectedAction = SelectActionHelper.SelectAction(functionConvention, odataPath, request, actionMap); // Assert Assert.Equal("IsUpgraded", selectedAction); Assert.Equal(2, SelectActionHelper.GetRouteData(request).Values.Count); Assert.Equal(1, SelectActionHelper.GetRouteData(request).Values["key"]); Assert.Equal(1, SelectActionHelper.GetRouteData(request).Values["keyID"]); Assert.Equal(1, SelectActionHelper.GetRoutingConventionsStore(request)[ODataRouteConstants.KeyCount]); }
public void SelectAction_OnComplexCollection_ReturnsTheActionName(string httpMethod, string prefix) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "Customers(7)/OtherAccounts"); var request = RequestFactory.Create(new HttpMethod(httpMethod), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap(prefix + "OtherAccountsFromCustomer"); // Act string selectedAction = SelectActionHelper.SelectAction(new PropertyRoutingConvention(), odataPath, request, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(prefix + "OtherAccountsFromCustomer", selectedAction); Assert.Equal(2, SelectActionHelper.GetRouteData(request).Values.Count); Assert.Equal(7, SelectActionHelper.GetRouteData(request).Values["key"]); Assert.Equal(7, SelectActionHelper.GetRouteData(request).Values["keyID"]); Assert.Equal(1, SelectActionHelper.GetRoutingConventionsStore(request)[ODataRouteConstants.KeyCount]); }
public void SelectAction_ReturnsNull_ForNonDeleteRequestWithDollarId(string method) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse( model.Model, "http://any/", "http://any/Customers(42)/Orders/$ref?$id=http://any/Orders(24)"); var request = RequestFactory.Create(new HttpMethod(method), "http://localhost/"); var actionMap = SelectActionHelper.CreateActionMap("DeleteRef", "CreateRef", "GetRef", "PutRef", "PostRef"); // Act string selectedAction = SelectActionHelper.SelectAction(new RefRoutingConvention(), odataPath, request, actionMap); // Assert Assert.Null(selectedAction); }
public void SelectAction_ReturnsNull_ForNonDeleteRequestWithDollarId(string method) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse( model.Model, "http://any/", "http://any/Customers(42)/Orders/$ref?$id=http://any/Orders(24)"); HttpControllerContext controllerContext = CreateControllerContext(method); var actionMap = GetMockActionMap("DeleteRef", "CreateRef", "GetRef", "PutRef", "PostRef"); // Act string actionName = new RefRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Null(actionName); }
public void SelectAction_ReturnsTheActionName_ForValidHttpMethods(string httpMethod, string httpMethodNamePrefix) { // Arrange const string SingletonName = "VipCustomer"; string actionName = httpMethodNamePrefix + SingletonName; CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, SingletonName); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => actionName); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); // Act string selectedAction = new SingletonRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(actionName, selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void GetODataPayloadSerializer_ReturnsRawValueSerializer_ForDollarCountRequests(string uri, Type elementType) { // Arrange IEdmModel model = ODataCountTest.GetEdmModel(); Type type = typeof(ICollection <>).MakeGenericType(elementType); var pathHandler = new DefaultODataPathHandler(); var path = pathHandler.Parse(model, "http://localhost/", uri); var request = RequestFactory.CreateFromModel(model); request.ODataContext().Path = path; // Act var serializer = _serializerProvider.GetODataPayloadSerializer(type, request); // Assert Assert.NotNull(serializer); var rawValueSerializer = Assert.IsType <ODataRawValueSerializer>(serializer); Assert.Equal(ODataPayloadKind.Value, rawValueSerializer.ODataPayloadKind); }
public ODataFunctionTests() { DefaultODataPathHandler pathHandler = new DefaultODataPathHandler(); HttpConfiguration configuration = new[] { typeof(MetadataController), typeof(FCustomersController) }.GetHttpConfiguration(); var model = GetUnTypedEdmModel(); // without attribute routing configuration.MapODataServiceRoute("odata1", "odata", model, pathHandler, ODataRoutingConventions.CreateDefault()); // only with attribute routing IList <IODataRoutingConvention> routingConventions = new List <IODataRoutingConvention> { new AttributeRoutingConvention("odata2", configuration) }; configuration.MapODataServiceRoute("odata2", "attribute", model, pathHandler, routingConventions); _client = new HttpClient(new HttpServer(configuration)); }
public void SelectAction_ReturnsNull_IfActionIsMissing() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://localhost/", "Customers(10)/Account/Tax"); ILookup<string, HttpActionDescriptor> emptyActionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = _routingConvention.SelectAction(odataPath, controllerContext, emptyActionMap); // Assert Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void SelectAction_OnSingletonPath_ReturnsTheActionName() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "VipCustomer/Address"); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetAddress"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = new PropertyRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal("GetAddress", selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void SelectAction_ReturnsTheActionName_ForActionBoundToEntitySet() { // Arrange ActionRoutingConvention actionConvention = new ActionRoutingConvention(); IEdmModel model = ODataRoutingModel.GetModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model, "RoutingCustomers/Default.GetVIPs"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetVIPs"); // Act string action = actionConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Equal("GetVIPs", action); Assert.Equal(0, controllerContext.Request.GetRouteData().Values.Count); }
public void SelectAction_OnEntitySetPath_ReturnsTheActionName(string httpMethod, string prefix) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "Customers(7)/Name"); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => prefix + "NameFromCustomer"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = new PropertyRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal(prefix + "NameFromCustomer", selectedAction); Assert.Equal(1, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("7", controllerContext.Request.GetRouteData().Values["key"]); }
public void SelectAction_ReturnsFunctionName_ForFunctionOnEntity() { // Arrange FunctionRoutingConvention functionConvention = new FunctionRoutingConvention(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "Customers(1)/IsUpgraded"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "IsUpgraded"); // Act string function = functionConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Equal("IsUpgraded", function); Assert.Equal(1, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("1", controllerContext.Request.GetRouteData().Values["key"]); }
public void SelectAction_ReturnsNull_IfPatchToCollectionProperty() { // Arrange IEdmModel model = ODataCountTest.GetEdmModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model, _serviceRoot, "DollarCountEntities(7)/EnumCollectionProp"); ILookup<string, HttpActionDescriptor> emptyActionMap = new HttpActionDescriptor[0].ToLookup(desc => "PatchToEnumCollectionProp"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(new HttpMethod("Patch"), "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = new PropertyRoutingConvention().SelectAction(odataPath, controllerContext, emptyActionMap); // Assert Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void SelectAction_ReturnsFunctionName_DollarCount() { // Arrange var model = new CustomersModelWithInheritance(); var handler = new DefaultODataPathHandler(); ODataPath odataPath = handler.Parse(model.Model, _serviceRoot, "Customers(1)/NS.GetOrders(parameter=5)/$count"); var requestContext = new HttpRequestContext(); var controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetOrders"); // Act string selectedAction = new FunctionRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Equal("GetOrders", selectedAction); Assert.Equal(2, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("1", controllerContext.Request.GetRouteData().Values["key"]); Assert.Equal(5, controllerContext.Request.GetRouteData().Values["parameter"]); }
public void SelectAction_SetsRelatedKey_ForDeleteRefRequestsWithDollarId(string uri) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://any/", uri); HttpControllerContext controllerContext = CreateControllerContext("DELETE"); var actionMap = GetMockActionMap("DeleteRef"); // Act var actionName = new RefRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); var routeData = controllerContext.RouteData; // Assert Assert.Equal("DeleteRef", actionName); Assert.Equal("42", routeData.Values["key"]); Assert.Equal("Orders", routeData.Values["navigationProperty"]); Assert.Equal("24", routeData.Values["relatedKey"]); }
public void SelectAction_ReturnsNull_IfPostToNavigationPropertyBindingToNonCollectionValuedNavigationProperty(string path) { // Arrange ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Company>("Companies"); builder.Singleton<Company>("MyCompany"); builder.EntitySet<Employee>("Employees"); builder.Singleton<Employee>("Tony"); IEdmModel model = builder.GetEdmModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model, "http://any/", path); HttpControllerContext controllerContext = CreateControllerContext("Post"); var actionMap = GetMockActionMap(); // Act string selectedAction = new NavigationRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Null(selectedAction); }
public void SelectAction_UpdatesRouteData_ForSingletonFunctionWithParameters() { // Arrange FunctionRoutingConvention functionConvention = new FunctionRoutingConvention(); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "VipCustomer/NS.IsUpgradedWithParam(city='any')"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "IsUpgradedWithParam"); // Act string function = functionConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Equal("IsUpgradedWithParam", function); Assert.Equal(1, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("any", controllerContext.Request.GetRouteData().Values["city"]); }
public void SelectAction_ReturnsNull_IfActionIsMissing(string httpMethod) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer"); ILookup<string, HttpActionDescriptor> emptyActionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); // Act string selectedAction = new EntitySetRoutingConvention().SelectAction(odataPath, controllerContext, emptyActionMap); // Assert Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }
public void SelectAction_ReturnsNull_ForInvalidHttpMethods(string httpMethod) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, _serviceRoot, "VipCustomer"); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[0].ToLookup(desc => (string)null); HttpControllerContext controllerContext = new HttpControllerContext(); controllerContext.Request = new HttpRequestMessage(new HttpMethod(httpMethod), "http://localhost/"); controllerContext.Request.SetRouteData(new HttpRouteData(new HttpRoute())); // Act string actionName = new SingletonRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Act & Assert Assert.Null(actionName); }
public void SelectAction_ReturnsTheActionName_ForSingletonActionBoundToEntity() { // Arrange ActionRoutingConvention actionConvention = new ActionRoutingConvention(); IEdmModel model = new CustomersModelWithInheritance().Model; ODataPath odataPath = new DefaultODataPathHandler().Parse(model, _serviceRoot, "VipCustomer/NS.upgrade"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "upgrade"); // Act string action = actionConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Equal("upgrade", action); Assert.Equal(0, controllerContext.Request.GetRouteData().Values.Count); }
public void SelectAction_ReturnsTheActionName_DollarCount() { // Arrange IEdmModel model = ODataCountTest.GetEdmModel(); ODataPath odataPath = new DefaultODataPathHandler().Parse( model, _serviceRoot, "DollarCountEntities(7)/EnumCollectionProp/$count"); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetEnumCollectionPropFromDollarCountEntity"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = new PropertyRoutingConvention().SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal("GetEnumCollectionPropFromDollarCountEntity", selectedAction); Assert.Equal(1, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("7", controllerContext.Request.GetRouteData().Values["key"]); }
public void SelectAction_OnSingltonPath_OpenEntityType_ReturnsTheActionName(string url) { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://localhost/", url); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetDynamicProperty"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = _routingConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.NotNull(selectedAction); Assert.Equal("GetDynamicProperty", selectedAction); Assert.Equal(2, controllerContext.Request.GetRouteData().Values.Count); Assert.Equal("DynamicPropertyA", controllerContext.Request.GetRouteData().Values["dynamicProperty"]); Assert.Equal("DynamicPropertyA", (controllerContext.Request.GetRouteData().Values[ODataParameterValue.ParameterValuePrefix + "dynamicProperty"] as ODataParameterValue).Value); }
public void SelectAction_ReturnsNull_IfNotCorrectMethod(string methodName) { HttpMethod method = new HttpMethod(methodName); // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); ODataPath odataPath = new DefaultODataPathHandler().Parse(model.Model, "http://localhost/", "Orders(7)/DynamicPropertyA"); ILookup<string, HttpActionDescriptor> actionMap = new HttpActionDescriptor[1].ToLookup(desc => "GetDynamicProperty"); HttpRequestContext requestContext = new HttpRequestContext(); HttpControllerContext controllerContext = new HttpControllerContext { Request = new HttpRequestMessage(method, "http://localhost/"), RequestContext = requestContext, RouteData = new HttpRouteData(new HttpRoute()) }; controllerContext.Request.SetRequestContext(requestContext); // Act string selectedAction = _routingConvention.SelectAction(odataPath, controllerContext, actionMap); // Assert Assert.Null(selectedAction); Assert.Empty(controllerContext.Request.GetRouteData().Values); }