public void CanCreateFunctionWithReturnTypeAsNullableByOptionalReturn() { // Arrange & Act ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("MyFunction").Returns <Address>(); function.OptionalReturn = false; // Assert Assert.False(function.OptionalReturn); }
public void HasFeedFunctionLink_ThrowsException_OnNonBindableFunctions() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("NoBindableFunction"); // Act & Assert Assert.Throws <InvalidOperationException>( () => function.HasFeedFunctionLink(ctx => new Uri("http://any"), followsConventions: false), "To register a function link factory, functions must be bindable to the collection of entity. " + "Function 'NoBindableFunction' does not meet this requirement."); }
public void CanCreateFunctionWithPrimitiveCollectionReturnType() { // Arrange // Act ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("CreateMessages"); function.ReturnsCollection <string>(); // Assert Assert.NotNull(function.ReturnType); Assert.Equal("Collection(Edm.String)", function.ReturnType.FullName); }
public void GetEdmModel_CreatesOperationImports_For_UnboundedOperations() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.Function("Function").Returns <bool>(); builder.Action("Action").Returns <bool>(); // Act IEdmModel model = builder.GetEdmModel(); // Assert Assert.Equal(2, model.EntityContainer.OperationImports().Count()); }
public void Returns_ThrowsInvalidOperationIfGenericArgumentIsDateTime(Type type) { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("Format"); MethodInfo method = typeof(FunctionConfiguration) .GetMethod("Returns") .MakeGenericMethod(type); // Act & Assert Assert.Throws <InvalidOperationException>( () => method.Invoke(function, new object[] { }), string.Format("The type '{0}' is not a supported return type.", type.FullName)); }
public void Parameter_ThrowsInvalidOperationIfGenericArgumentIsDateTime(Type type) { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("Format"); MethodInfo method = typeof(FunctionConfiguration) .GetMethod("Parameter", new[] { typeof(string) }) .MakeGenericMethod(type); // Act & Assert Assert.Throws <InvalidOperationException>( () => method.Invoke(function, new[] { "test" }), string.Format("The type '{0}' is not a supported parameter type for the parameter test.", type.FullName)); }
public void AttemptToRemoveNonExistentEntityReturnsFalse() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); ODataModelBuilder builder2 = new ODataModelBuilder(); ProcedureConfiguration toRemove = builder2.Function("ToRemove"); // Act bool removedByName = builder.RemoveProcedure("ToRemove"); bool removed = builder.RemoveProcedure(toRemove); //Assert Assert.False(removedByName); Assert.False(removed); }
public void CanCreateFunctionWithNonbindingParameters() { // Arrange // Act ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("MyFunction"); function.Parameter <string>("p0"); function.Parameter <int>("p1"); function.Parameter <Address>("p2"); function.CollectionParameter <string>("p3"); function.CollectionParameter <int>("p4"); function.CollectionParameter <ZipCode>("p5"); function.EntityParameter <Customer>("p6"); function.CollectionEntityParameter <Employee>("p7"); ParameterConfiguration[] parameters = function.Parameters.ToArray(); ComplexTypeConfiguration[] complexTypes = builder.StructuralTypes.OfType <ComplexTypeConfiguration>().ToArray(); EntityTypeConfiguration[] entityTypes = builder.StructuralTypes.OfType <EntityTypeConfiguration>().ToArray(); // Assert Assert.Equal(2, complexTypes.Length); Assert.Equal(typeof(Address).FullName, complexTypes[0].FullName); Assert.Equal(typeof(ZipCode).FullName, complexTypes[1].FullName); Assert.Equal(2, entityTypes.Length); Assert.Equal(typeof(Customer).FullName, entityTypes[0].FullName); Assert.Equal(typeof(Employee).FullName, entityTypes[1].FullName); Assert.Equal(8, parameters.Length); Assert.Equal("p0", parameters[0].Name); Assert.Equal("Edm.String", parameters[0].TypeConfiguration.FullName); Assert.Equal("p1", parameters[1].Name); Assert.Equal("Edm.Int32", parameters[1].TypeConfiguration.FullName); Assert.Equal("p2", parameters[2].Name); Assert.Equal(typeof(Address).FullName, parameters[2].TypeConfiguration.FullName); Assert.Equal("p3", parameters[3].Name); Assert.Equal("Collection(Edm.String)", parameters[3].TypeConfiguration.FullName); Assert.Equal("p4", parameters[4].Name); Assert.Equal("Collection(Edm.Int32)", parameters[4].TypeConfiguration.FullName); Assert.Equal("p5", parameters[5].Name); Assert.Equal(string.Format("Collection({0})", typeof(ZipCode).FullName), parameters[5].TypeConfiguration.FullName); Assert.Equal("p6", parameters[6].Name); Assert.Equal(typeof(Customer).FullName, parameters[6].TypeConfiguration.FullName); Assert.Equal("p7", parameters[7].Name); Assert.Equal(string.Format("Collection({0})", typeof(Employee).FullName), parameters[7].TypeConfiguration.FullName); }
public void Cant_SetFunctionTitle_OnNonBindableFunctions() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("MyFunction"); function.Returns <int>(); function.Title = "My Function"; // Act IEdmModel model = builder.GetEdmModel(); IEdmOperationImport functionImport = model.EntityContainer.OperationImports().OfType <IEdmFunctionImport>().Single(); Assert.NotNull(functionImport); OperationTitleAnnotation functionTitleAnnotation = model.GetOperationTitleAnnotation(functionImport.Operation); // Assert Assert.Null(functionTitleAnnotation); }
public void CanCreateFunctionWithNonbindingParameters_AddParameterNonGenericMethod() { // Arrange // Act ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration function = builder.Function("MyFunction"); function.Parameter(typeof(string), "p0"); function.Parameter(typeof(int), "p1"); function.Parameter(typeof(Address), "p2"); ParameterConfiguration[] parameters = function.Parameters.ToArray(); // Assert Assert.Equal(3, parameters.Length); Assert.Equal("p0", parameters[0].Name); Assert.Equal("Edm.String", parameters[0].TypeConfiguration.FullName); Assert.Equal("p1", parameters[1].Name); Assert.Equal("Edm.Int32", parameters[1].TypeConfiguration.FullName); Assert.Equal("p2", parameters[2].Name); Assert.Equal(typeof(Address).FullName, parameters[2].TypeConfiguration.FullName); }
public void UnboundFunction_ForEnumTypeInODataModelBuilder() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); FunctionConfiguration functionConfiguration = builder.Function("UnboundFunction"); functionConfiguration.CollectionParameter <Color>("Colors"); functionConfiguration.ReturnsCollection <Color>(); builder.Add_Color_EnumType(); // Act & Assert IEdmModel model = builder.GetEdmModel(); IEdmFunctionImport functionImport = model.EntityContainer.OperationImports().Single(o => o.Name == "UnboundFunction") as IEdmFunctionImport; IEdmTypeReference colors = functionImport.Function.Parameters.Single(p => p.Name == "Colors").Type; IEdmTypeReference returnType = functionImport.Function.ReturnType; IEdmEnumType colorType = model.SchemaElements.OfType <IEdmEnumType>().Single(e => e.Name == "Color"); Assert.True(colors.IsCollection()); Assert.Same(colorType, colors.AsCollection().ElementType().Definition); Assert.True(returnType.IsCollection()); Assert.False(returnType.AsCollection().ElementType().IsNullable); Assert.Same(colorType, returnType.AsCollection().ElementType().Definition); }