public void ResolvesSimpleProperties() { // Arrange var resolver = new DefaultPropertyResolver(); var type = typeof(Foo); // Act var props = resolver.ResolveProperties(type).Select(x => x.Property); // Assert Assert.Collection(props, x => Assert.Equal(x, type.GetProperty("Object")), x => Assert.Equal(x, type.GetProperty("String")), x => Assert.Equal(x, type.GetProperty("Guid")), x => Assert.Equal(x, type.GetProperty("Decimal")), x => Assert.Equal(x, type.GetProperty("Double")), x => Assert.Equal(x, type.GetProperty("Float")), x => Assert.Equal(x, type.GetProperty("DateTime")), x => Assert.Equal(x, type.GetProperty("DateTimeOffset")), x => Assert.Equal(x, type.GetProperty("Timespan")), x => Assert.Equal(x, type.GetProperty("Bytes")), x => Assert.Equal(x, type.GetProperty("ReadonlyProp")), x => Assert.Equal(x, type.GetProperty("PrivateSetterProp")) ); }
public void IsIgnoredReturnsFalseWhenNoMatchOnConstructorArguments() { var configuration = Substitute.For <IBuildConfiguration>(); var constructorResolver = Substitute.For <IConstructorResolver>(); var instance = new Optionals(Guid.NewGuid().ToString()) { Value = Guid.NewGuid().ToString() }; var propertyInfo = instance.GetType().GetProperty(nameof(Optionals.Value)) !; var args = new object?[] { Guid.NewGuid().ToString() }; var constructor = instance.GetType().GetConstructor(new[] { typeof(string) }); configuration.ConstructorResolver.Returns(constructorResolver); constructorResolver.Resolve(typeof(Optionals), args).Returns(constructor); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, args); actual.Should().BeFalse(); }
public void ResolvesSimpleProperties() { var resolver = new DefaultPropertyResolver(); var type = typeof(Foo); var props = resolver.Resolve(type).Select(x => x.PropertyInfo).ToArray(); Assert.Equal(type.GetProperties().Skip(1).ToArray(), props); }
public void GetOrderedPropertiesThrowsExceptionWithNullConfiguration() { var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); Action action = () => sut.GetOrderedProperties(null !, typeof(Person)); action.Should().Throw <ArgumentNullException>(); }
public void GetOrderedPropertiesThrowsExceptionWithNullTargetType() { var configuration = Substitute.For <IBuildConfiguration>(); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); Action action = () => sut.GetOrderedProperties(configuration, null !); action.Should().Throw <ArgumentNullException>(); }
public void GetOrderedPropertiesDoesNotReturnsReadOnlyValueTypeProperty() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(PrivateValue); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.GetOrderedProperties(configuration, type); actual.Should().NotContain(x => x.Name == nameof(PrivateValue.Id)); }
public void GetOrderedPropertiesDoesNotReturnStaticSetterProperty() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(StaticSetter); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.GetOrderedProperties(configuration, type); actual.Should().NotContain(x => x.Name == nameof(StaticSetter.Person)); }
public void IsIgnoredThrowsExceptionWithNullPropertyInfo() { var configuration = Model.UsingDefaultConfiguration(); var instance = new Person(); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); Action action = () => sut.IsIgnored(configuration, instance, null !, null !); action.Should().Throw <ArgumentNullException>(); }
public void GetOrderedPropertiesReturnsReadOnlyReferenceTypeProperty() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(ReadOnlyParent); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.GetOrderedProperties(configuration, type); actual.Should().Contain(x => x.Name == nameof(ReadOnlyParent.Company)); }
public void GetOrderedPropertiesReturnsPublicSetterProperty() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(Address); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.GetOrderedProperties(configuration, type); actual.Should().Contain(x => x.Name == nameof(Address.AddressLine1)); }
public void IsIgnoredThrowsExceptionWithNullInstance() { var configuration = Model.UsingDefaultConfiguration(); var propertyInfo = typeof(Person).GetProperty(nameof(Person.Address)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); Action action = () => sut.IsIgnored(configuration, null !, propertyInfo, null !); action.Should().Throw <ArgumentNullException>(); }
public void GetOrderedPropertiesReturnsCachedValueWhenCacheEnabled(CacheLevel cacheLevel) { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(SlimModel); var sut = new DefaultPropertyResolver(cacheLevel); var first = sut.GetOrderedProperties(configuration, type); var second = sut.GetOrderedProperties(configuration, type); first.Should().BeSameAs(second); }
public void IsIgnoredReturnsTrueWhenIgnoreRuleMatched() { var configuration = Model.UsingDefaultConfiguration() !.AddIgnoreRule <Person>(x => x.Address !); var instance = new Person(); var propertyInfo = typeof(Person).GetProperty(nameof(Person.Address)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, null !); actual.Should().BeTrue(); }
public void IsIgnoredReturnsFalseWhenPropertyNotIgnoredAndNullArgumentsProvided() { var configuration = Model.UsingDefaultConfiguration(); var instance = new Person(); var propertyInfo = typeof(Person).GetProperty(nameof(Person.Address)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, null !); actual.Should().BeFalse(); }
public void GetOrderedPropertiesReturnsNewInstanceWhenCacheDisabled() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(Person); var sut = new DefaultPropertyResolver(CacheLevel.None); var first = sut.GetOrderedProperties(configuration, type).ToList(); var second = sut.GetOrderedProperties(configuration, type).ToList(); first.Should().NotBeSameAs(second); first.Should().BeEquivalentTo(second); }
public void GetOrderedPropertiesReturnsPropertiesWhenExecuteOrderRulesIsNull() { var configuration = Substitute.For <IBuildConfiguration>(); var type = typeof(EmailParts); configuration.ExecuteOrderRules.Returns((ICollection <IExecuteOrderRule>)null !); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.GetOrderedProperties(configuration, type).ToList(); actual.Should().HaveCount(4); }
public void IsIgnoredReturnsFalseWhenIgnoreRulesAreEmpty() { var configuration = Model.UsingDefaultConfiguration(); var instance = Model.Create <WithConstructorParameters>() !; var propertyInfo = typeof(WithConstructorParameters).GetProperty(nameof(WithConstructorParameters.Id)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, null !); actual.Should().BeFalse(); }
public void IsIgnoredReturnsTrueForIndexerProperty() { var configuration = Substitute.For <IBuildConfiguration>(); var items = new List <int>(); var instance = new ReadOnlyCollection <int>(items); var type = typeof(ReadOnlyCollection <int>); var propertyInfo = type.GetProperties().First(x => x.GetIndexParameters().Length > 0); var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, null !); actual.Should().BeTrue(); }
public void IgnoresIgnoreAttribute() { // Arrange var resolver = new DefaultPropertyResolver(); var type = typeof(Bar); // Act var props = resolver.ResolveProperties(type).ToArray(); // Assert var prop = Assert.Single(props); Assert.Equal(type.GetProperty("Id"), prop); }
public void IgnoresNotMappedAttribute() { // Arrange var resolver = new DefaultPropertyResolver(); var type = typeof(Baz); // Act var props = resolver.ResolveProperties(type).Select(x => x.Property); // Assert var prop = Assert.Single(props); Assert.Equal(type.GetProperty("Id"), prop); }
public void IsIgnoredReturnsFalseWhenPropertyRelatesToNullParameter() { var configuration = Model.UsingDefaultConfiguration(); var instance = Model.Create <WithConstructorParameters>() !; var args = new object?[] { null !, new Company(), instance.Id, instance.RefNumber, instance.Number, instance.Value }; var propertyInfo = typeof(WithConstructorParameters).GetProperty(nameof(WithConstructorParameters.First)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, args); actual.Should().BeFalse(); }
IsIgnoredReturnsFalseWhenPropertyContainsNullAndPropertyTypeCannotBeCreatedForEqualityChecking() { var configuration = Model.UsingDefaultConfiguration(); var instance = Model.Create <ReadOnlyModelParent>() !.Set(x => x.Child = null !); var args = new object?[] { Guid.NewGuid() }; var propertyInfo = typeof(ReadOnlyModelParent).GetProperty(nameof(ReadOnlyModelParent.Child)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, args); actual.Should().BeFalse(); }
public void IsIgnoredReturnsFalseWhenParametersDoNotMatchPropertyValueType() { var configuration = Model.UsingDefaultConfiguration(); var instance = Model.Create <WithConstructorParameters>() !; var args = new object?[] { instance.First, Guid.NewGuid(), null !, int.MinValue, false }; var propertyInfo = typeof(WithConstructorParameters).GetProperty(nameof(WithConstructorParameters.Number)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, args); actual.Should().BeFalse(); }
public void IsIgnoredReturnsTrueWhenParametersMatchPropertyValueType() { var configuration = Model.UsingDefaultConfiguration(); var instance = Model.Create <WithConstructorParameters>() !; var args = new object?[] { instance.First, instance.Id, instance.RefNumber, instance.Number, instance.Value }; var propertyInfo = typeof(WithConstructorParameters).GetProperty(nameof(WithConstructorParameters.Number)) !; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, instance, propertyInfo, args); actual.Should().BeTrue(); }
public void IsIgnoredReturnsFalseWhenParameterDoesNotMatchReferencePropertyWithNameMatch() { var configuration = Model.UsingDefaultConfiguration(); var value = new Person(); var model = new ClassMatchingNameWrapper <Person>(value); var propertyInfo = typeof(ClassMatchingNameWrapper <Person>).GetProperty(nameof(ClassMatchingNameWrapper <Person> .Value)) !; var args = new object?[] { new Person() }; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, model, propertyInfo, args); actual.Should().BeFalse(); }
public void IsIgnoredReturnsFalseWhenParameterDoesNotMatchValueTypePropertyWithNameMismatch() { var configuration = Model.UsingDefaultConfiguration(); var item = Environment.TickCount; var model = new StructMismatchingNameWrapper <int>(item); var propertyInfo = typeof(StructMismatchingNameWrapper <int>).GetProperty(nameof(StructMismatchingNameWrapper <int> .Value)) !; var args = new object?[] { Guid.NewGuid().ToString() }; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, model, propertyInfo, args); actual.Should().BeFalse(); }
public void GetOrderedPropertiesReturnsPropertiesInDescendingOrder() { var configuration = new BuildConfiguration() .AddExecuteOrderRule <EmailParts>(x => x.FirstName, 40) .AddExecuteOrderRule <EmailParts>(x => x.LastName, 30) .AddExecuteOrderRule <EmailParts>(x => x.Domain, 20) .AddExecuteOrderRule <EmailParts>(x => x.Email, 10); var type = typeof(EmailParts); var sut = new DefaultPropertyResolver(CacheLevel.None); var actual = sut.GetOrderedProperties(configuration, type).ToList(); actual[0].Name.Should().Be(nameof(EmailParts.FirstName)); actual[1].Name.Should().Be(nameof(EmailParts.LastName)); actual[2].Name.Should().Be(nameof(EmailParts.Domain)); actual[3].Name.Should().Be(nameof(EmailParts.Email)); }
public void IsIgnoredReturnsTrueWhenParameterMatchesValueTypePropertyWithNameMatch() { var configuration = Model.UsingDefaultConfiguration(); var value = Environment.TickCount; var model = new StructMatchingNameWrapper <int>(value); var propertyInfo = typeof(StructMatchingNameWrapper <int>).GetProperty(nameof(StructMatchingNameWrapper <int> .Value)) !; var args = new object?[] { value }; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, model, propertyInfo, args); actual.Should().BeTrue(); }
public void IsIgnoredReturnsTrueWhenParameterMatchesStringPropertyWithNameMatch() { var configuration = Model.UsingDefaultConfiguration(); var value = Guid.NewGuid().ToString(); var model = new ClassMatchingNameWrapper <string>(value); var propertyInfo = typeof(ClassMatchingNameWrapper <string>).GetProperty(nameof(ClassMatchingNameWrapper <string> .Value)) !; var args = new object?[] { value }; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); var actual = sut.IsIgnored(configuration, model, propertyInfo, args); actual.Should().BeTrue(); }
public void IsIgnoredThrowsExceptionWhenConstructorNotFound() { var configuration = Substitute.For <IBuildConfiguration>(); var instance = new Optionals(Guid.NewGuid().ToString()) { Value = Guid.NewGuid().ToString() }; var propertyInfo = instance.GetType().GetProperty(nameof(Optionals.Value)) !; var args = new object?[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }; var sut = new DefaultPropertyResolver(CacheLevel.PerInstance); Action action = () => sut.IsIgnored(configuration, instance, propertyInfo, args); action.Should().Throw <MissingMemberException>(); }