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"))
                              );
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public void GetOrderedPropertiesThrowsExceptionWithNullConfiguration()
        {
            var sut = new DefaultPropertyResolver(CacheLevel.PerInstance);

            Action action = () => sut.GetOrderedProperties(null !, typeof(Person));

            action.Should().Throw <ArgumentNullException>();
        }
Exemplo n.º 5
0
        public void GetOrderedPropertiesThrowsExceptionWithNullTargetType()
        {
            var configuration = Substitute.For <IBuildConfiguration>();

            var sut = new DefaultPropertyResolver(CacheLevel.PerInstance);

            Action action = () => sut.GetOrderedProperties(configuration, null !);

            action.Should().Throw <ArgumentNullException>();
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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>();
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
        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>();
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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();
        }
Exemplo n.º 14
0
        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();
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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();
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 21
0
        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();
        }
Exemplo n.º 22
0
        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();
        }
Exemplo n.º 23
0
        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();
        }
Exemplo n.º 24
0
        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();
        }
Exemplo n.º 25
0
        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();
        }
Exemplo n.º 26
0
        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();
        }
Exemplo n.º 27
0
        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));
        }
Exemplo n.º 28
0
        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();
        }
Exemplo n.º 29
0
        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();
        }
Exemplo n.º 30
0
        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>();
        }