public void PopulateAddsItemsToCollectionFromExecuteStrategy()
        {
            var expected = new Guid[15];

            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Configuration.Returns(configuration);
            executeStrategy.Create(typeof(Guid)).Returns(Guid.NewGuid());

            var sut = new ArrayTypeCreator
            {
                MaxCount = 15
            };

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

            actual.Should().BeSameAs(expected);

            var set = (Guid[])actual;

            set.Should().HaveCount(sut.MaxCount);
            set.All(x => x != Guid.Empty).Should().BeTrue();
        }
        public void PopulateThrowsExceptionWithNullInstance()
        {
            var strategy = Substitute.For <IExecuteStrategy>();

            var sut = new ArrayTypeCreator();

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

            action.Should().Throw <ArgumentNullException>();
        }
        public void PopulateInfersItemTypeByArrayTypeWhenFirstItemIsNull()
        {
            var actual          = new Person[15];
            var executeStrategy = Model.UsingDefaultConfiguration()
                                  .UsingExecuteStrategy <DefaultExecuteStrategy <List <Company> > >();

            var sut = new ArrayTypeCreator();

            var result = (Person[])sut.Populate(executeStrategy, actual);

            result.All(x => x != null !).Should().BeTrue();
        }
        public void PopulateThrowsExceptionWithUnsupportedType()
        {
            var instance = new Lazy <bool>(() => true);

            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new ArrayTypeCreator();

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

            action.Should().Throw <NotSupportedException>();
        }
        public void PopulateReturnsEmptyArrayWhenSourceHasZeroLength()
        {
            var expected = new Guid[0];

            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Create(typeof(Guid)).Returns(Guid.NewGuid());

            var sut = new ArrayTypeCreator
            {
                MaxCount = 15
            };

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

            actual.Should().BeSameAs(expected);

            var set = (Guid[])actual;

            set.Should().BeEmpty();
        }
        public void PopulateAddsItemsToListFromExecuteStrategy()
        {
            var expected = new Guid[15];

            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Create(typeof(Guid)).Returns(Guid.NewGuid());

            var sut = new ArrayTypeCreator
            {
                MaxCount = 15
            };

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

            actual.Should().BeSameAs(expected);

            var set = (Guid[])actual;

            set.Should().HaveCount(sut.MaxCount);
            set.All(x => x != Guid.Empty).Should().BeTrue();
        }
        public void PopulateThrowsExceptionWithUnsupportedTypeTest()
        {
            var instance = new Lazy<bool>(() => true);

            var strategy = Substitute.For<IExecuteStrategy>();

            var target = new ArrayTypeCreator();

            Action action = () => target.Populate(instance, strategy);

            action.ShouldThrow<NotSupportedException>();
        }
        public void PopulateThrowsExceptionWithNullStrategyTest()
        {
            var instance = new List<string>();

            var target = new ArrayTypeCreator();

            Action action = () => target.Populate(instance, null);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void PopulateThrowsExceptionWithNullInstanceTest()
        {
            var strategy = Substitute.For<IExecuteStrategy>();

            var target = new ArrayTypeCreator();

            Action action = () => target.Populate(null, strategy);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void PopulateReturnsEmptyArrayWhenSourceHasZeroLengthTest()
        {
            var expected = new Guid[0];

            var strategy = Substitute.For<IExecuteStrategy>();

            strategy.CreateWith(typeof(Guid)).Returns(Guid.NewGuid());

            var target = new ArrayTypeCreator
            {
                MaxCount = 15
            };

            var actual = target.Populate(expected, strategy);

            actual.Should().BeSameAs(expected);

            var set = (Guid[]) actual;

            set.Should().BeEmpty();
        }
        public void PopulateInferesItemTypeByArrayTypeWhenFirstItemIsNullTest()
        {
            var actual = new Person[15];
            var executeStrategy = Model.BuildStrategy.GetExecuteStrategy<List<int>>();

            var target = new ArrayTypeCreator();

            var result = (Person[]) target.Populate(actual, executeStrategy);

            result.All(x => x != null).Should().BeTrue();
        }
        public void PopulateAddsItemsToListFromExecuteStrategyTest()
        {
            var expected = new Guid[15];

            var strategy = Substitute.For<IExecuteStrategy>();

            strategy.CreateWith(typeof(Guid)).Returns(Guid.NewGuid());

            var target = new ArrayTypeCreator
            {
                MaxCount = 15
            };

            var actual = target.Populate(expected, strategy);

            actual.Should().BeSameAs(expected);

            var set = (Guid[]) actual;

            set.Should().HaveCount(target.MaxCount);
            set.All(x => x != Guid.Empty).Should().BeTrue();
        }