public void HasConstraint_ThrowsArgumentNull_ForNullPrincipalPropertyInfo() { // Arrange NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(new MockPropertyInfo(), EdmMultiplicity.ZeroOrOne, new EntityTypeConfiguration()); // Act & Assert Assert.ThrowsArgumentNull( () => navigationProperty.HasConstraint(new MockPropertyInfo(), principalPropertyInfo: null), "principalPropertyInfo"); }
public void HasConstraint_Throws_ReferentialConstraintAlreadyConfigured_Principal() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey1"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); PropertyInfo otherPrincipalPropertyInfo = typeof(Dependent).GetProperty("DependentKey2"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); // Act & Assert Assert.Throws <InvalidOperationException>( () => navigationProperty.HasConstraint(otherPrincipalPropertyInfo, principalPropertyInfo), String.Format(SRResources.ReferentialConstraintAlreadyConfigured, "principal", "PrincipalKey1", "dependent", "DependentKey1")); }
public void HasConstraint_CanSetDependentAndPrincipalProperty_OnlyOnceForTheSameConstraint() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey1"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); navigationProperty.HasConstraint(new KeyValuePair <PropertyInfo, PropertyInfo>(dependentPropertyInfo, principalPropertyInfo)); // Assert Assert.Single(navigationProperty.PrincipalProperties); Assert.Single(navigationProperty.DependentProperties); }
public void HasConstraint_Throws_MultiplicityMany() { // Arrange Mock <EntityTypeConfiguration> entityType = new Mock <EntityTypeConfiguration>(); entityType.Setup(c => c.ClrType).Returns(typeof(NavigationPropertyConfigurationTest)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration( new MockPropertyInfo(typeof(List <NavigationPropertyConfigurationTest>), "Navigation"), EdmMultiplicity.Many, entityType.Object); // Act & Assert Assert.Throws <NotSupportedException>( () => navigationProperty.HasConstraint(new MockPropertyInfo(), new MockPropertyInfo()), String.Format(SRResources.ReferentialConstraintOnManyNavigationPropertyNotSupported, "Navigation", typeof(NavigationPropertyConfigurationTest).FullName)); }
public NavigationPropertyConfiguration HasRequired <TTargetEntity>( Expression <Func <TEntityType, TTargetEntity> > navigationPropertyExpression, Expression <Func <TEntityType, TTargetEntity, bool> > referentialConstraintExpression) where TTargetEntity : class { NavigationPropertyConfiguration navigation = GetOrCreateNavigationProperty(navigationPropertyExpression, EdmMultiplicity.One); IDictionary <PropertyInfo, PropertyInfo> referentialConstraints = PropertyPairSelectorVisitor.GetSelectedProperty(referentialConstraintExpression); foreach (KeyValuePair <PropertyInfo, PropertyInfo> constraint in referentialConstraints) { navigation.HasConstraint(constraint); } return(navigation); }
public void HasConstraint_Throws_ReferentialConstraintPropertyTypeNotValid() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("MockPrincipal"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("MockDependent"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act & Assert Assert.Throws <InvalidOperationException>( () => navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo), String.Format(SRResources.ReferentialConstraintPropertyTypeNotValid, "System.Web.OData.MockType")); }
public void HasConstraint_Throws_DependentAndPrincipalTypeNotMatch() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey2"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act & Assert Assert.Throws <InvalidOperationException>( () => navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo), String.Format(SRResources.DependentAndPrincipalTypeNotMatch, "System.Int32", "System.String")); }
public void HasConstraint_Throws_ReferentialConstraintPropertyTypeNotValid() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("MockPrincipal"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("MockDependent"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act & Assert Assert.Throws<InvalidOperationException>( () => navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo), String.Format(SRResources.ReferentialConstraintPropertyTypeNotValid, "System.Web.OData.MockType")); }
public void HasConstraint_Throws_DependentAndPrincipalTypeNotMatch() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey2"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act & Assert Assert.Throws<InvalidOperationException>( () => navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo), String.Format(SRResources.DependentAndPrincipalTypeNotMatch, "System.Int32", "System.String")); }
public void HasConstraint_Throws_ReferentialConstraintAlreadyConfigured_Principal() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey1"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); PropertyInfo otherPrincipalPropertyInfo = typeof(Dependent).GetProperty("DependentKey2"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); // Act & Assert Assert.Throws<InvalidOperationException>( () => navigationProperty.HasConstraint(otherPrincipalPropertyInfo, principalPropertyInfo), String.Format(SRResources.ReferentialConstraintAlreadyConfigured, "principal", "PrincipalKey1", "dependent", "DependentKey1")); }
public void HasConstraint_Throws_MultiplicityMany() { // Arrange Mock<EntityTypeConfiguration> entityType = new Mock<EntityTypeConfiguration>(); entityType.Setup(c => c.ClrType).Returns(typeof(NavigationPropertyConfigurationTest)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration( new MockPropertyInfo(typeof(List<NavigationPropertyConfigurationTest>), "Navigation"), EdmMultiplicity.Many, entityType.Object); // Act & Assert Assert.Throws<NotSupportedException>( () => navigationProperty.HasConstraint(new MockPropertyInfo(), new MockPropertyInfo()), String.Format(SRResources.ReferentialConstraintOnManyNavigationPropertyNotSupported, "Navigation", typeof(NavigationPropertyConfigurationTest).FullName)); }
public void HasConstraint_ThrowsArgumentNull_ForNullPrincipalPropertyInfo() { // Arrange NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(new MockPropertyInfo(), EdmMultiplicity.ZeroOrOne, new EntityTypeConfiguration()); // Act & Assert Assert.ThrowsArgumentNull( () => navigationProperty.HasConstraint(new MockPropertyInfo(), principalPropertyInfo: null), "principalPropertyInfo"); }
public void HasConstraint_CanSetDependentAndPrincipalProperty_OnlyOnceForTheSameConstraint() { // Arrange PropertyInfo principalPropertyInfo = typeof(Principal).GetProperty("PrincipalKey1"); PropertyInfo dependentPropertyInfo = typeof(Dependent).GetProperty("DependentKey1"); ODataModelBuilder builder = new ODataModelBuilder(); builder.AddEntityType(typeof(Principal)); EntityTypeConfiguration dependentEntity = builder.AddEntityType(typeof(Dependent)); NavigationPropertyConfiguration navigationProperty = new NavigationPropertyConfiguration(typeof(Dependent).GetProperty("Principal"), EdmMultiplicity.One, dependentEntity); // Act navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); navigationProperty.HasConstraint(dependentPropertyInfo, principalPropertyInfo); navigationProperty.HasConstraint(new KeyValuePair<PropertyInfo, PropertyInfo>(dependentPropertyInfo, principalPropertyInfo)); // Assert Assert.Single(navigationProperty.PrincipalProperties); Assert.Single(navigationProperty.DependentProperties); }