public void OnProvidersExecuted_AddODataRoutingSelector_WhenAttributeRoutingConvention() { // Arrange ODataOptions options = new ODataOptions(); options.AddModel("odata", _model); LoggerFactory loggerFactory = new LoggerFactory(); var logger = new Logger <AttributeRoutingConvention>(loggerFactory); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); IODataControllerActionConvention[] conventions = new IODataControllerActionConvention[] { new AttributeRoutingConvention(logger, parser) }; ODataRoutingApplicationModelProvider provider = CreateProvider(options, conventions); ApplicationModelProviderContext providerContext = CreateProviderContext(typeof(AttributeRoutingController)); // Act provider.OnProvidersExecuted(providerContext); // Assert ControllerModel controller = Assert.Single(providerContext.Result.Controllers); ActionModel action = Assert.Single(controller.Actions); Assert.Equal("AnyMethodNameHere", action.ActionMethod.Name); Assert.Single(action.Parameters); Assert.Equal(2, action.Selectors.Count); Assert.Equal(new[] { "odata/Customers({key})/Name", "odata/Customers/{key}/Name" }, action.Selectors.Select(s => s.AttributeRouteModel.Template)); }
public void ParseODataUriTemplate_ForFunctionImport(string template, int parameterCount) { // Arrange EdmFunction getSalaray = new EdmFunction("NS", "GetWholeSalaryImport", IntType, isBound: false, entitySetPathExpression: null, isComposable: false); getSalaray.AddParameter("minSalary", IntType); getSalaray.AddOptionalParameter("maxSalary", IntType); getSalaray.AddOptionalParameter("aveSalary", IntType, "129"); _edmModel.AddElement(getSalaray); EdmEntityContainer container = _edmModel.SchemaElements.OfType <EdmEntityContainer>().First(); container.AddFunctionImport(getSalaray); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, template, null); // Assert Assert.NotNull(path); ODataSegmentTemplate segmentTemplate = Assert.Single(path); FunctionImportSegmentTemplate functionImportSegment = Assert.IsType <FunctionImportSegmentTemplate>(segmentTemplate); if (parameterCount == 2) { Assert.Equal(new[] { "minSalary", "maxSalary" }, functionImportSegment.ParameterMappings.Keys); Assert.Equal(new[] { "min", "max" }, functionImportSegment.ParameterMappings.Values); } else { Assert.Equal(new[] { "minSalary", "maxSalary", "aveSalary" }, functionImportSegment.ParameterMappings.Keys); Assert.Equal(new[] { "min", "max", "ave" }, functionImportSegment.ParameterMappings.Values); } }
public void ParseODataUriTemplate_ForCompositeKeys(string template) { // Arrange // function with optional parameters EdmEntityType person = new EdmEntityType("NS", "Person"); EdmStructuralProperty firstName = person.AddStructuralProperty("firstName", EdmPrimitiveTypeKind.String); EdmStructuralProperty lastName = person.AddStructuralProperty("lastName", EdmPrimitiveTypeKind.String); person.AddKeys(firstName, lastName); _edmModel.AddElement(person); EdmEntityContainer container = _edmModel.SchemaElements.OfType <EdmEntityContainer>().First(); container.AddEntitySet("People", person); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, template, null); // Assert Assert.NotNull(path); Assert.Equal(2, path.Count); KeySegmentTemplate keySegment = Assert.IsType <KeySegmentTemplate>(path[1]); Assert.Equal(2, keySegment.KeyMappings.Count); Assert.Equal(new[] { "firstName", "lastName" }, keySegment.KeyMappings.Keys); Assert.Equal(new[] { "first", "last" }, keySegment.KeyMappings.Values); }
public void ParseODataUriTemplate_ForActionImport() { // Arrange EdmAction setSalaray = new EdmAction("NS", "SetWholeSalaryImport", IntType, isBound: false, entitySetPathExpression: null); setSalaray.AddParameter("minSalary", IntType); setSalaray.AddOptionalParameter("maxSalary", IntType); setSalaray.AddOptionalParameter("aveSalary", IntType, "129"); _edmModel.AddElement(setSalaray); EdmEntityContainer container = _edmModel.SchemaElements.OfType <EdmEntityContainer>().First(); container.AddActionImport(setSalaray); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, "SetWholeSalaryImport", null); // Assert Assert.NotNull(path); ODataSegmentTemplate segmentTemplate = Assert.Single(path); ActionImportSegmentTemplate actionImportSegment = Assert.IsType <ActionImportSegmentTemplate>(segmentTemplate); Assert.Equal("SetWholeSalaryImport", actionImportSegment.ActionImport.Name); }
public void ParseODataUriTemplate_ForActions(string template) { // Arrange // function with optional parameters EdmAction setSalaray = new EdmAction("NS", "SetWholeSalary", IntType, isBound: true, entitySetPathExpression: null); setSalaray.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(_customerType, false)))); setSalaray.AddParameter("minSalary", IntType); setSalaray.AddOptionalParameter("maxSalary", IntType); setSalaray.AddOptionalParameter("aveSalary", IntType, "129"); _edmModel.AddElement(setSalaray); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); MockServiceProvider sp = null; if (!template.Contains("NS.")) { sp = new MockServiceProvider(_edmModel); } // Act ODataPathTemplate path = parser.Parse(_edmModel, template, sp); // Assert Assert.NotNull(path); Assert.Equal(2, path.Count); ActionSegmentTemplate actionSegment = Assert.IsType <ActionSegmentTemplate>(path[1]); Assert.Equal("NS.SetWholeSalary", actionSegment.Action.FullName()); }
public void ParseODataUriTemplateWorksAsExpected(string template, string expectedActionName) { // Arrange IEdmModel model = GetEdmModel(); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(model, template, null); // Assert Assert.NotNull(expectedActionName); Assert.NotNull(path); }
public void ParseODataUriTemplate_ForSingleton() { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, "VipCustomer", null); // Assert Assert.NotNull(path); ODataSegmentTemplate pathSegment = Assert.Single(path); SingletonSegmentTemplate singletonSegment = Assert.IsType <SingletonSegmentTemplate>(pathSegment); Assert.Equal("VipCustomer", singletonSegment.Singleton.Name); }
public void ParseODataUriTemplate_ForEntitySet() { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, "Customers", null); // Assert Assert.NotNull(path); ODataSegmentTemplate pathSegment = Assert.Single(path); EntitySetSegmentTemplate setSegment = Assert.IsType <EntitySetSegmentTemplate>(pathSegment); Assert.Equal("Customers", setSegment.EntitySet.Name); }
public void ParseODataUriTemplate_ForNavigationPropertyLink(string template, int count) { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, template, null); // Assert Assert.NotNull(path); Assert.Equal(count, path.Count); NavigationLinkSegmentTemplate navigationSegment = Assert.IsType <NavigationLinkSegmentTemplate>(path[count - 1]); Assert.Equal("Orders", navigationSegment.NavigationProperty.Name); }
public void ParseODataUriTemplate_ForProperty(string template, int count) { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, template, null); // Assert Assert.NotNull(path); Assert.Equal(count, path.Count); PropertySegmentTemplate propertySegment = Assert.IsType <PropertySegmentTemplate>(path[count - 1]); Assert.Equal("Name", propertySegment.Property.Name); }
public void ParseODataUriTemplate_ForBasicKey(string template) { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, template, null); // Assert Assert.NotNull(path); Assert.Equal(2, path.Count); KeySegmentTemplate keySegment = Assert.IsType <KeySegmentTemplate>(path[1]); var keyMap = Assert.Single(keySegment.KeyMappings); Assert.Equal("Id", keyMap.Key); Assert.Equal("idKey", keyMap.Value); }
public void ParseODataUriTemplate_ForFunctions(string template, int count) { // Arrange // function with optional parameters EdmFunction getSalaray = new EdmFunction("NS", "GetWholeSalary", IntType, isBound: true, entitySetPathExpression: null, isComposable: false); getSalaray.AddParameter("entityset", new EdmCollectionTypeReference(new EdmCollectionType(new EdmEntityTypeReference(_customerType, false)))); getSalaray.AddParameter("minSalary", IntType); getSalaray.AddOptionalParameter("maxSalary", IntType); getSalaray.AddOptionalParameter("aveSalary", IntType, "129"); _edmModel.AddElement(getSalaray); IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); MockServiceProvider sp = null; if (!template.Contains("NS.")) { sp = new MockServiceProvider(_edmModel); } // Act ODataPathTemplate path = parser.Parse(_edmModel, template, sp); // Assert Assert.NotNull(path); Assert.Equal(2, path.Count); FunctionSegmentTemplate functionSegment = Assert.IsType <FunctionSegmentTemplate>(path[1]); Assert.Equal(count, functionSegment.ParameterMappings.Count); if (count == 2) { Assert.Equal(new[] { "minSalary", "maxSalary" }, functionSegment.ParameterMappings.Keys); Assert.Equal(new[] { "min", "max" }, functionSegment.ParameterMappings.Values); } else { Assert.Equal(new[] { "minSalary", "maxSalary", "aveSalary" }, functionSegment.ParameterMappings.Keys); Assert.Equal(new[] { "min", "max", "ave" }, functionSegment.ParameterMappings.Values); } }