public void Match_DeterminesExpectedServiceRoot_ForMetadata(string prefixString) { // Arrange var expectedRoot = "http://any/" + prefixString; if (!String.IsNullOrEmpty(prefixString)) { expectedRoot += '/'; } var request = new HttpRequestMessage(HttpMethod.Get, expectedRoot + "$metadata"); var httpRouteCollection = new HttpRouteCollection { { _routeName, new HttpRoute() }, }; request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var pathHandler = new TestPathHandler(); var constraint = new ODataPathRouteConstraint(pathHandler, _model, _routeName, _conventions); var values = new Dictionary <string, object> { { ODataRouteConstants.ODataPath, "$metadata" }, }; // Act var matched = constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution); // Assert Assert.True(matched); Assert.NotNull(pathHandler.ServiceRoot); Assert.Equal(expectedRoot, pathHandler.ServiceRoot); Assert.NotNull(pathHandler.ODataPath); Assert.Equal("$metadata", pathHandler.ODataPath); }
public void Match_ReturnsFalse_IfODataPathCannotBeParsed() { var values = new Dictionary<string, object>() { { "odataPath", "NotAnODataPath" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); Assert.False(constraint.Match(_request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_ReturnsFalse_IfODataPathHasNotImplementedSegment() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/Customers(1)/OpenProperty"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var model = new EdmModel(); var customer = new EdmEntityType( namespaceName: "NS", name: "Customer", baseType: null, isAbstract: false, isOpen: true); customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); model.AddElement(customer); var container = new EdmEntityContainer("NS", "Container"); container.AddEntitySet("Customers", customer); model.AddElement(container); var values = new Dictionary <string, object>() { { "odataPath", "Customers(1)/OpenProperty" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_ReturnsTrue_ForUriGeneration() { var values = new Dictionary<string, object>(); var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); Assert.True(constraint.Match(_request, null, null, values, HttpRouteDirection.UriGeneration)); }
public void Match_ReturnsFalse_IfODataPathRouteValueMissing() { var values = new Dictionary <string, object>(); var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); Assert.False(constraint.Match(_request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_ReturnsTrue_ForUriGeneration() { var values = new Dictionary <string, object>(); var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); Assert.True(constraint.Match(_request, null, null, values, HttpRouteDirection.UriGeneration)); }
public void Match_ReturnsTrue_IfODataPathCanBeParsed() { var values = new Dictionary<string, object>() { { "odataPath", "$metadata" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); Assert.True(constraint.Match(_request, null, null, values, HttpRouteDirection.UriResolution)); Assert.Equal("Metadata", values["controller"]); Assert.Same(_model, _request.ODataProperties().Model); Assert.Same(_routeName, _request.ODataProperties().RouteName); Assert.Equal(_conventions, _request.ODataProperties().RoutingConventions); Assert.Same(_pathHandler, _request.ODataProperties().PathHandler); }
public void Match_ThrowsHttpResponseException_IfPathParserThrowsODataException() { var values = new Dictionary<string, object>() { { "odataPath", "" } }; _request.SetConfiguration(new HttpConfiguration() { IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always }); Mock<IODataPathHandler> pathHandler = new Mock<IODataPathHandler>(); string exceptionMessage = "NOOODATA"; pathHandler.Setup(handler => handler.Parse(_model, "")).Throws(new ODataException(exceptionMessage)); var constraint = new ODataPathRouteConstraint(pathHandler.Object, _model, _routeName, _conventions); var ex = Assert.Throws<HttpResponseException>( () => constraint.Match(_request, null, null, values, HttpRouteDirection.UriResolution)); Assert.Equal(HttpStatusCode.NotFound, ex.Response.StatusCode); HttpError error = ex.Response.Content.ReadAsAsync<HttpError>().Result; Assert.Equal("The OData path is invalid.", error.Message); Assert.Equal(exceptionMessage, error.ExceptionMessage); }
public void Match_ReturnsFalse_IfODataPathCannotBeParsed() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/NotAnODataPath"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary <string, object>() { { "odataPath", "NotAnODataPath" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_DeterminesExpectedServiceRoot_ForFunctionCallWithEscapedSeparator( string prefixString, string oDataString) { // Arrange var originalRoot = "http://any/" + prefixString; var expectedRoot = originalRoot; if (!String.IsNullOrEmpty(prefixString)) { originalRoot += "%2F"; // Escaped '/' } var oDataPath = String.Format("Unbound(p0='{0}')", oDataString); var request = new HttpRequestMessage(HttpMethod.Get, originalRoot + oDataPath); var httpRouteCollection = new HttpRouteCollection { { _routeName, new HttpRoute() }, }; request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var builder = new ODataModelBuilder(); builder.Function("Unbound").Returns <string>().Parameter <string>("p0"); var model = builder.GetEdmModel(); var pathHandler = new TestPathHandler(); var constraint = new ODataPathRouteConstraint(pathHandler, model, _routeName, _conventions); var values = new Dictionary <string, object> { { ODataRouteConstants.ODataPath, Uri.UnescapeDataString(oDataPath) }, }; // Act var matched = constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution); // Assert Assert.True(matched); Assert.NotNull(pathHandler.ServiceRoot); Assert.Equal(expectedRoot, pathHandler.ServiceRoot); Assert.NotNull(pathHandler.ODataPath); Assert.Equal(oDataPath, pathHandler.ODataPath); }
public void Match_ReturnsFalse_IfODataPathHasNotImplementedSegment() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/Customers/$count"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary <string, object>() { { "odataPath", "Customers/$count" } }; ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet <Customer>("Customers"); IEdmModel model = builder.GetEdmModel(); var constraint = new ODataPathRouteConstraint(_pathHandler, model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_ReturnsTrue_IfODataPathCanBeParsed() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/odata/$metadata"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary <string, object>() { { "odataPath", "$metadata" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); // Act & Assert Assert.True(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); Assert.Equal("Metadata", values["controller"]); Assert.Same(_model, request.ODataProperties().Model); Assert.Same(_routeName, request.ODataProperties().RouteName); Assert.Equal(_conventions, request.ODataProperties().RoutingConventions); Assert.Same(_pathHandler, request.ODataProperties().PathHandler); }
public void Match_DeterminesExpectedServiceRoot_ForFunctionCallWithEscapedSeparator( string prefixString, string oDataString) { // Arrange var originalRoot = "http://any/" + prefixString; var expectedRoot = originalRoot; if (!String.IsNullOrEmpty(prefixString)) { originalRoot += "%2F"; // Escaped '/' } var oDataPath = String.Format("Unbound(p0='{0}')", oDataString); var request = new HttpRequestMessage(HttpMethod.Get, originalRoot + oDataPath); var httpRouteCollection = new HttpRouteCollection { { _routeName, new HttpRoute() }, }; request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var builder = new ODataModelBuilder(); builder.Function("Unbound").Returns<string>().Parameter<string>("p0"); var model = builder.GetEdmModel(); var pathHandler = new TestPathHandler(); var constraint = new ODataPathRouteConstraint(pathHandler, model, _routeName, _conventions); var values = new Dictionary<string, object> { { ODataRouteConstants.ODataPath, Uri.UnescapeDataString(oDataPath) }, }; // Act var matched = constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution); // Assert Assert.True(matched); Assert.NotNull(pathHandler.ServiceRoot); Assert.Equal(expectedRoot, pathHandler.ServiceRoot); Assert.NotNull(pathHandler.ODataPath); Assert.Equal(oDataPath, pathHandler.ODataPath); }
public void Match_ReturnsFalse_IfODataPathHasNotImplementedSegment() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/Customers/$count"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary<string, object>() { { "odataPath", "Customers/$count" } }; ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Customer>("Customers"); IEdmModel model = builder.GetEdmModel(); var constraint = new ODataPathRouteConstraint(_pathHandler, model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_ReturnsTrue_IfODataPathCanBeParsed() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/odata/$metadata"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary<string, object>() { { "odataPath", "$metadata" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); // Act & Assert Assert.True(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); Assert.Equal("Metadata", values["controller"]); Assert.Same(_model, request.ODataProperties().Model); Assert.Same(_routeName, request.ODataProperties().RouteName); Assert.Equal(_conventions, request.ODataProperties().RoutingConventions); Assert.Same(_pathHandler, request.ODataProperties().PathHandler); }
public void Match_ReturnsFalse_IfODataPathCannotBeParsed() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/NotAnODataPath"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var values = new Dictionary<string, object>() { { "odataPath", "NotAnODataPath" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, _model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }
public void Match_DeterminesExpectedServiceRoot_ForMetadataWithEscapedSeparator(string prefixString) { // Arrange var originalRoot = "http://any/" + prefixString; var expectedRoot = originalRoot; if (!String.IsNullOrEmpty(prefixString)) { originalRoot += "%2F"; // Escaped '/' } var request = new HttpRequestMessage(HttpMethod.Get, originalRoot + "$metadata"); var httpRouteCollection = new HttpRouteCollection { { _routeName, new HttpRoute() }, }; request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var pathHandler = new TestPathHandler(); var constraint = new ODataPathRouteConstraint(pathHandler, _model, _routeName, _conventions); var values = new Dictionary<string, object> { { ODataRouteConstants.ODataPath, "$metadata" }, }; // Act var matched = constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution); // Assert Assert.True(matched); Assert.NotNull(pathHandler.ServiceRoot); Assert.Equal(expectedRoot, pathHandler.ServiceRoot); Assert.NotNull(pathHandler.ODataPath); Assert.Equal("$metadata", pathHandler.ODataPath); }
public void Match_ReturnsFalse_IfODataPathHasNotImplementedSegment() { // Arrange var request = new HttpRequestMessage(HttpMethod.Get, "http://any/Customers(1)/OpenProperty"); HttpRouteCollection httpRouteCollection = new HttpRouteCollection(); httpRouteCollection.Add(_routeName, new HttpRoute()); request.SetConfiguration(new HttpConfiguration(httpRouteCollection)); var model = new EdmModel(); var customer = new EdmEntityType( namespaceName: "NS", name: "Customer", baseType: null, isAbstract: false, isOpen: true); customer.AddKeys(customer.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32)); model.AddElement(customer); var container = new EdmEntityContainer("NS", "Container"); container.AddEntitySet("Customers", customer); model.AddElement(container); var values = new Dictionary<string, object>() { { "odataPath", "Customers(1)/OpenProperty" } }; var constraint = new ODataPathRouteConstraint(_pathHandler, model, _routeName, _conventions); // Act & Assert Assert.False(constraint.Match(request, null, null, values, HttpRouteDirection.UriResolution)); }