public void CreateInfiniteRecursiveComplexTypeDefinitionFails() { var builder = new ODataModelBuilder() .Add_ZipCode_ComplexType(); var zipCode = builder.ComplexType <ZipCode>(); Assert.Throws <InvalidOperationException>( () => zipCode.ComplexProperty(z => z.Recursive), "The complex type 'System.Web.Http.OData.Builder.TestModels.ZipCode' has a reference to itself through the property 'Recursive'. A recursive loop of complex types is not allowed."); }
public void CreateInfiniteRecursiveComplexTypeDefinitionFails() { var builder = new ODataModelBuilder() .Add_ZipCode_ComplexType(); var zipCode = builder.ComplexType <ZipCode>(); Assert.ThrowsArgument( () => zipCode.ComplexProperty(z => z.Recursive), "propertyInfo", "A recursive loop of complex types is not allowed."); }
public void BindingParameterConfigurationThrowsWhenParameterTypeIsNotEntity() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.ComplexType <Address>(); // Act & Assert ArgumentException exception = Assert.Throws <ArgumentException>(() => { BindingParameterConfiguration configuration = new BindingParameterConfiguration("name", builder.GetTypeConfigurationOrNull(typeof(Address)), true); }); Assert.True(exception.Message.Contains(string.Format("'{0}'", typeof(Address).FullName))); Assert.Equal("parameterType", exception.ParamName); }
public void NonNullablePropertiesAreNotOptional() { // NOTE: Converting this to be a data driven test is painful as we need to mock C# overload resolution algorithm. var builder = new ODataModelBuilder(); var complexType = builder.ComplexType <ComplexTypeTestModel>(); Assert.False(complexType.Property(t => t.BoolProperty).OptionalProperty); Assert.False(complexType.Property(t => t.ByteProperty).OptionalProperty); Assert.False(complexType.Property(t => t.DateTimeOffsetProperty).OptionalProperty); Assert.False(complexType.Property(t => t.DateTimeProperty).OptionalProperty); Assert.False(complexType.Property(t => t.DoubleProperty).OptionalProperty); Assert.False(complexType.Property(t => t.GuidProperty).OptionalProperty); Assert.False(complexType.Property(t => t.IntProperty).OptionalProperty); Assert.False(complexType.Property(t => t.LongProperty).OptionalProperty); Assert.False(complexType.Property(t => t.ShortProperty).OptionalProperty); Assert.False(complexType.Property(t => t.TimeSpanProperty).OptionalProperty); }
public void CreateComplexTypePropertyInComplexType() { var builder = new ODataModelBuilder() .Add_Address_ComplexType(); var address = builder.ComplexType <Address>(); address.ComplexProperty(a => a.ZipCode); var model = builder.GetServiceModel(); var addressType = model.SchemaElements.OfType <IEdmComplexType>().SingleOrDefault(se => se.Name == "Address"); var zipCodeType = model.SchemaElements.OfType <IEdmComplexType>().SingleOrDefault(se => se.Name == "ZipCode"); Assert.NotNull(addressType); Assert.NotNull(zipCodeType); var zipCodeProperty = addressType.FindProperty("ZipCode"); Assert.NotNull(zipCodeProperty); Assert.Equal(zipCodeType.FullName(), zipCodeProperty.Type.AsComplex().ComplexDefinition().FullName()); }
public void GetEdmModel_PropertyWithDatabaseAttribute_CannotSetStoreGeneratedPatternOnComplexType() { // Arrange ODataModelBuilder builder = new ODataModelBuilder(); builder.ComplexType <Customer>().Property(c => c.Name).HasStoreGeneratedPattern(DatabaseGeneratedOption.Computed); // Act IEdmModel model = builder.GetEdmModel(); // Assert IEdmComplexType type = model.AssertHasComplexType(typeof(Customer)); IEdmStructuralProperty property = type.AssertHasPrimitiveProperty(model, "Name", EdmPrimitiveTypeKind.String, isNullable: true); var idAnnotation = model.GetAnnotationValue <EdmStringConstant>( property, StoreGeneratedPatternAnnotation.AnnotationsNamespace, StoreGeneratedPatternAnnotation.AnnotationName); Assert.Null(idAnnotation); }
public void NullablePropertiesAreOptional() { // NOTE: Converting this to be a data driven test is painful as we need to mock C# overload resolution algorithm. var builder = new ODataModelBuilder(); var complexType = builder.ComplexType <ComplexTypeTestModel>(); Assert.True(complexType.Property(t => t.NullableBoolProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableByteProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableDateTimeOffsetProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableDateTimeProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableDoubleProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableGuidProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableIntProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableLongProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableShortProperty).OptionalProperty); Assert.True(complexType.Property(t => t.NullableTimeSpanProperty).OptionalProperty); // Assert.True(complexType.Property(t => t.StreamProperty).OptionalProperty); Assert.True(complexType.Property(t => t.StringProperty).OptionalProperty); Assert.True(complexType.Property(t => t.ByteArrayProperty).OptionalProperty); }