public void CreatePropertyThrowsExceptionWithNullProperty()
        {
            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var valueGenerator  = Substitute.For <IValueGenerator>();

            var sut = new BuildCapability(valueGenerator);

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

            action.Should().Throw <ArgumentNullException>();
        }
        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 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);
        }