public void ImplementedByTypeReturnsCreationRuleType()
        {
            var creationRule = new DummyCreationRule();

            var sut = new BuildCapability(creationRule);

            sut.ImplementedByType.Should().Be <DummyCreationRule>();
        }
        public void ImplementedByTypeReturnsGeneratorType()
        {
            var generator = new EmailValueGenerator();

            var sut = new BuildCapability(generator);

            sut.ImplementedByType.Should().Be <EmailValueGenerator>();
        }
        public void SupportsPopulateReturnsFalseForCreationRule()
        {
            var creationRule = new DummyCreationRule();

            var sut = new BuildCapability(creationRule);

            sut.SupportsPopulate.Should().BeFalse();
        }
        public void SupportsPopulateReturnsFalseForValueGenerator()
        {
            var generator = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(generator);

            sut.SupportsPopulate.Should().BeFalse();
        }
        public void SupportsPopulateReturnsTypeCreatorValue(bool supportsPopulate)
        {
            var typeCreator = Substitute.For <ITypeCreator>();

            var sut = new BuildCapability(typeCreator, false, supportsPopulate);

            sut.SupportsPopulate.Should().Be(supportsPopulate);
        }
        public void ImplementedByTypeReturnsTypeCreatorType()
        {
            var creator = new DefaultTypeCreator();

            var sut = new BuildCapability(creator, false, false);

            sut.ImplementedByType.Should().Be <DefaultTypeCreator>();
        }
        public void AutoPopulateReturnsTypeCreatorValue(bool autoPopulate)
        {
            var typeCreator = Substitute.For <ITypeCreator>();

            typeCreator.AutoPopulate.Returns(autoPopulate);

            var sut = new BuildCapability(typeCreator, false, autoPopulate);

            sut.AutoPopulate.Should().Be(autoPopulate);
        }
        public void CreateTypeThrowsExceptionWithNullType()
        {
            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

            Action action = () => sut.CreateType(executeStrategy, null !, null);

            action.Should().Throw <ArgumentNullException>();
        }
        public void PopulateThrowsExceptionWithNullProperty()
        {
            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeCreator     = Substitute.For <ITypeCreator>();

            var sut = new BuildCapability(typeCreator, true, true);

            Action action = () => sut.Populate(executeStrategy, null !);

            action.Should().Throw <ArgumentNullException>();
        }
        public void CreateTypeThrowsExceptionWithNullExecuteStrategy()
        {
            var targetType = typeof(string);

            var valueGenerator = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

            Action action = () => sut.CreateType(null !, targetType, null);

            action.Should().Throw <ArgumentNullException>();
        }
        public void CreatePropertyThrowsExceptionWithNullExecuteStrategy()
        {
            var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName)) !;

            var valueGenerator = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

            Action action = () => sut.CreateProperty(null !, propertyInfo, null);

            action.Should().Throw <ArgumentNullException>();
        }
        public void CreateParameterThrowsExceptionWithNullExecuteStrategy()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();

            var valueGenerator = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

            Action action = () => sut.CreateParameter(null !, parameterInfo, null);

            action.Should().Throw <ArgumentNullException>();
        }
        public void PopulateWithValueGeneratorThrowsException()
        {
            var value = new Person();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

            Action action = () => sut.Populate(executeStrategy, value);

            action.Should().Throw <NotSupportedException>();
        }
        public void PopulateWithCreationRuleThrowsException()
        {
            var value = new Person();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var creationRule    = Substitute.For <ICreationRule>();

            var sut = new BuildCapability(creationRule);

            Action action = () => sut.Populate(executeStrategy, value);

            action.Should().Throw <NotSupportedException>();
        }
        public void PopulateWithTypeCreatorReturnsValue()
        {
            var expected = new Person();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeCreator     = Substitute.For <ITypeCreator>();

            typeCreator.Populate(executeStrategy, expected).Returns(expected);

            var sut = new BuildCapability(typeCreator, false, true);

            var actual = sut.Populate(executeStrategy, expected);

            actual.Should().Be(expected);
        }
        public void CreatePropertyReturnsValueFromValueGenerator()
        {
            var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName)) !;
            var value        = Guid.NewGuid().ToString();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            valueGenerator.Generate(executeStrategy, propertyInfo).Returns(value);

            var sut = new BuildCapability(valueGenerator);

            var actual = sut.CreateProperty(executeStrategy, propertyInfo, null);

            actual.Should().Be(value);
        }
        public void CreateTypeReturnsValueFromCreationRule()
        {
            var type  = typeof(string);
            var value = Guid.NewGuid().ToString();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var creationRule    = Substitute.For <ICreationRule>();

            creationRule.Create(executeStrategy, type).Returns(value);

            var sut = new BuildCapability(creationRule);

            var actual = sut.CreateType(executeStrategy, type, null);

            actual.Should().Be(value);
        }
        public void CreateTypeReturnsValueFromValueGenerator()
        {
            var type  = typeof(string);
            var value = Guid.NewGuid().ToString();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            valueGenerator.Generate(executeStrategy, type).Returns(value);

            var sut = new BuildCapability(valueGenerator);

            var actual = sut.CreateType(executeStrategy, type, null);

            actual.Should().Be(value);
        }
        public void CreateParameterReturnsValueFromValueGenerator()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
            var value = Guid.NewGuid().ToString();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            valueGenerator.Generate(executeStrategy, parameterInfo)
            .Returns(value);

            var sut = new BuildCapability(valueGenerator);

            var actual = sut.CreateParameter(executeStrategy, parameterInfo, null);

            actual.Should().Be(value);
        }
        public void CreateTypeReturnsValueFromTypeCreator()
        {
            var type  = typeof(string);
            var value = Guid.NewGuid().ToString();
            var args  = new object?[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeCreator     = Substitute.For <ITypeCreator>();

            typeCreator.Create(executeStrategy, type, args).Returns(value);

            var sut = new BuildCapability(typeCreator, true, false);

            var actual = sut.CreateType(executeStrategy, type, args);

            actual.Should().Be(value);
        }
        public void CreatePropertyReturnsValueFromTypeCreator()
        {
            var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName)) !;
            var value        = Guid.NewGuid().ToString();
            var args         = new object?[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeCreator     = Substitute.For <ITypeCreator>();

            typeCreator.Create(executeStrategy, propertyInfo, args).Returns(value);

            var sut = new BuildCapability(typeCreator, true, false);

            var actual = sut.CreateProperty(executeStrategy, propertyInfo, args);

            actual.Should().Be(value);
        }
        public void CreateParameterReturnsValueFromTypeCreator()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
            var value = Guid.NewGuid().ToString();
            var args  = new object?[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString()
            };

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeCreator     = Substitute.For <ITypeCreator>();

            typeCreator.Create(executeStrategy, parameterInfo, args)
            .Returns(value);

            var sut = new BuildCapability(typeCreator, true, false);

            var actual = sut.CreateParameter(executeStrategy, parameterInfo, args);

            actual.Should().Be(value);
        }