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>();
        }
Exemple #2
0
        public void CreateForParameterThrowsExceptionWithNullStrategy()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new TypeCreatorWrapper();

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

            action.Should().Throw <ArgumentNullException>();
        }
Exemple #3
0
        public void PopulateReturnsProvidedInstance()
        {
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var expected = new List <string>();

            var sut = new TypeCreatorWrapper();

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

            actual.Should().BeSameAs(expected);
        }
Exemple #4
0
        public void GetBuildCapabilityForParameterReturnsNullWhenBuildChainDoesNotContainMatchingType()
        {
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();
            var parameterInfo      = typeof(Person).GetConstructors()
                                     .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();

            buildChain.Push(Guid.NewGuid());

            var sut = new CircularReferenceBuildAction();

            var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo);

            actual.Should().BeNull();
        }
Exemple #5
0
        public void GenerateReturnsUri()
        {
            var buildChain = new BuildHistory();

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

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new Wrapper();

            var actual = sut.RunGenerate(typeof(Uri), null !, executeStrategy).As <Uri>();

            TestData.Domains.Any(x => actual.AbsoluteUri.Contains(x, StringComparison.OrdinalIgnoreCase)).Should()
            .BeTrue();
        }
Exemple #6
0
        public void PopulateDoesNotThrowsExceptionWhenPopulateVerificationPasses()
        {
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var value = new List <string>();

            var sut = new TypeCreatorWrapper();

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

            action.Should().NotThrow();
        }
        public void GenerateReturnsUnitFloorLocationForSecondLineTest(string referenceName)
        {
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new Wrapper();

            var actual = sut.RunGenerate(typeof(string), referenceName, executeStrategy) as string;

            actual.Should().NotBeNullOrWhiteSpace();
            actual.Should().Contain("Unit ");
            actual.Should().Contain(", Floor ");
        }
        public void PopulateDoesNotAssignIgnoredProperty()
        {
            var buildHistory = new BuildHistory();
            var model        = new SlimModel();

            var processor          = Substitute.For <IBuildProcessor>();
            var buildConfiguration = Substitute.For <IBuildConfiguration>();
            var propertyResolver   = Substitute.For <IPropertyResolver>();
            var typeCapability     = Substitute.For <IBuildCapability>();
            var valueCapability    = Substitute.For <IBuildCapability>();

            typeCapability.AutoPopulate.Returns(true);
            typeCapability.SupportsCreate.Returns(true);
            typeCapability.SupportsPopulate.Returns(true);
            typeCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));
            valueCapability.SupportsCreate.Returns(true);
            valueCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));

            var sut = new DefaultExecuteStrategy(buildHistory, _buildLog, processor);

            processor.GetBuildCapability(sut, BuildRequirement.Populate,
                                         typeof(SlimModel))
            .Returns(typeCapability);
            buildConfiguration.PropertyResolver.Returns(propertyResolver);
            propertyResolver.GetOrderedProperties(buildConfiguration, typeof(SlimModel))
            .Returns(typeof(SlimModel).GetProperties());
            processor.GetBuildCapability(sut, BuildRequirement.Create,
                                         Arg.Is <PropertyInfo>(x => x.Name == nameof(SlimModel.Value)))
            .Returns(valueCapability);
            processor.GetBuildCapability(sut, BuildRequirement.Populate,
                                         typeof(Guid))
            .Returns(valueCapability);
            typeCapability.Populate(sut, model).Returns(model);
            propertyResolver.IsIgnored(
                Arg.Any <IBuildConfiguration>(),
                Arg.Any <object>(),
                Arg.Any <PropertyInfo>(),
                Arg.Any <object[]>()).Returns(true);

            sut.Initialize(buildConfiguration);

            var actual = (SlimModel)sut.Populate(model);

            actual.Value.Should().BeEmpty();

            typeCapability.DidNotReceive()
            .CreateProperty(sut, Arg.Is <PropertyInfo>(x => x.Name == nameof(SlimModel.Value)), null !);
        }
Exemple #9
0
        public void GeneratorReturnsName()
        {
            var person          = new PersonWithoutGender();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(person);

            var sut = new Wrapper();

            var actual = (string)sut.RunGenerate(typeof(string), "LastName", executeStrategy);

            TestData.LastNames.Any(x => x == actual).Should().BeTrue();
        }
Exemple #10
0
        public void IsMatchReturnsTrueForMatchingExpandObject()
        {
            dynamic context    = new ExpandoObject();
            var     buildChain = new BuildHistory();

            context.FirstName = Guid.NewGuid().ToString();
            context.LastName  = string.Empty;

            buildChain.Push(context);

            var sut = new Wrapper <string>(NameExpression.FirstName, typeof(string));

            var actual = sut.RunIsMatch(typeof(string), "FirstName", buildChain);

            actual.Should().BeTrue();
        }
        public void GenerateReturnsValuesForSeveralNameFormatsTest(Type type, string referenceName)
        {
            var address         = new Address();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(address);

            var sut = new Wrapper();

            var actual = (string)sut.RunGenerate(type, referenceName, executeStrategy);

            actual.Should().NotBeNullOrEmpty();
        }
Exemple #12
0
        public void GenerateReturnsValueWhenContextLacksNameAndGenderProperties()
        {
            var model           = new SlimModel();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(model);

            var sut = new Wrapper();

            var actual = (string)sut.RunGenerate(typeof(string), "email", executeStrategy);

            actual.Should().NotBeNullOrWhiteSpace();
        }
        public void PopulateReturnsInstanceWhenNoBuildActionCapabilityFound()
        {
            var buildHistory = new BuildHistory();
            var model        = new SlimModel();

            var processor          = Substitute.For <IBuildProcessor>();
            var buildConfiguration = Substitute.For <IBuildConfiguration>();

            var sut = new DefaultExecuteStrategy(buildHistory, _buildLog, processor);

            sut.Initialize(buildConfiguration);

            var actual = sut.Populate(model);

            actual.Should().Be(model);
        }
        public void GetCapabilityReturnsStoredCapability()
        {
            var type  = typeof(Address);
            var value = new Person();

            var capability = Substitute.For <IBuildCapability>();

            var sut = new BuildHistory();

            sut.Push(value);
            sut.AddCapability(type, capability);

            var actual = sut.GetCapability(type);

            actual.Should().Be(capability);
        }
        public void GetBuildCapabilityForPropertyInfoReturnsNullWhenNoRulesExist()
        {
            var propertyInfo       = typeof(Person).GetProperty(nameof(Person.FirstName)) !;
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.Log.Returns(_buildLog);

            var sut = new CreationRuleBuildAction();

            var actual = sut.GetBuildCapability(buildConfiguration, buildChain, propertyInfo);

            actual.Should().BeNull();
        }
Exemple #16
0
        public void GenerateReturnsValueBetweenDefaultMinAndMaxValues()
        {
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new Wrapper();

            for (var index = 0; index < 1000; index++)
            {
                var value = (int)sut.RunGenerate(typeof(int), "Count", executeStrategy);

                value.Should().BeGreaterOrEqualTo(1);
                value.Should().BeLessOrEqualTo(sut.MaxCount);
            }
        }
        public void GenerateAlwaysReturnsFutureValuesWithin10Years()
        {
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new Wrapper();

            for (var index = 0; index < 1000; index++)
            {
                var value = (DateTime?)sut.RunGenerate(typeof(DateTime?), null !, executeStrategy);

                value.Should().BeAfter(DateTime.UtcNow);
                value.Should().BeBefore(DateTime.UtcNow.AddYears(10));
            }
        }
Exemple #18
0
        public void GenerateReturnsDomainFromDerivedClass()
        {
            var property        = typeof(Person).GetProperty(nameof(Person.PersonalEmail)) !;
            var person          = new Person();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(person);

            var sut = new MailinatorEmailValueGenerator();

            var actual = (string)sut.Generate(executeStrategy, property) !;

            actual.Should().EndWith("mailinator.com");
        }
Exemple #19
0
        public void GenerateReturnsStringValue()
        {
            var address         = new Address();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(address);

            var sut = new Wrapper();

            var actual = sut.RunGenerate(typeof(string), "City", executeStrategy);

            actual.Should().BeOfType <string>();
            actual.As <string>().Should().NotBeNullOrWhiteSpace();
        }
Exemple #20
0
        public void GetBuildCapabilityForTypeReturnsNullWhenNoGeneratorsExist()
        {
            var type = typeof(Person);
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new ValueGeneratorBuildAction();

            var actual = sut.GetBuildCapability(buildConfiguration, buildChain, type);

            actual.Should().BeNull();
        }
Exemple #21
0
        public void GenerateReturnsDomainFromTestData()
        {
            var person          = new Person();
            var buildChain      = new BuildHistory();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            executeStrategy.BuildChain.Returns(buildChain);

            buildChain.Push(person);

            var sut = new Wrapper();

            var actual = (string)sut.RunGenerate(typeof(string), "email", executeStrategy);

            var domain = actual.Substring(actual.IndexOf("@", StringComparison.Ordinal) + 1);

            TestData.Domains.Any(x => x.ToLowerInvariant() == domain).Should().BeTrue();
        }
Exemple #22
0
        public void BuildForPropertyReturnsNullWhenNoMatchingTypeFound()
        {
            var buildChain   = new BuildHistory();
            var propertyInfo = typeof(Person).GetProperty(nameof(Person.FirstName)) !;

            buildChain.Push(Guid.NewGuid());
            buildChain.Push(DateTimeOffset.UtcNow);

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

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new CircularReferenceBuildAction();

            var actual = sut.Build(executeStrategy, propertyInfo);

            actual.Should().BeNull();
        }
Exemple #23
0
        public void PopulateReturnsNullWhenNoCreatorsExist()
        {
            var instance           = new Person();
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Log.Returns(_buildLog);

            var sut = new TypeCreatorBuildAction();

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

            actual.Should().Be(instance);
        }
        public void GetBuildCapabilityForParameterInfoReturnsNullWhenNoRulesExist()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.Log.Returns(_buildLog);

            var sut = new CreationRuleBuildAction();

            var actual = sut.GetBuildCapability(buildConfiguration, buildChain, parameterInfo);

            actual.Should().BeNull();
        }
Exemple #25
0
        public void BuildForTypeReturnsNullWhenNoMatchingTypeFound()
        {
            var buildChain = new BuildHistory();
            var type       = typeof(string);

            buildChain.Push(Guid.NewGuid());
            buildChain.Push(DateTimeOffset.UtcNow);

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

            executeStrategy.BuildChain.Returns(buildChain);

            var sut = new CircularReferenceBuildAction();

            var actual = sut.Build(executeStrategy, type);

            actual.Should().BeNull();
        }
Exemple #26
0
        public void BuildForPropertyInfoReturnsNullWhenNoGeneratorsExist()
        {
            var propertyInfo       = typeof(Person).GetProperty(nameof(Person.FirstName)) !;
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Log.Returns(_buildLog);

            var sut = new ValueGeneratorBuildAction();

            var actual = sut.Build(executeStrategy, propertyInfo);

            actual.Should().BeNull();
        }
Exemple #27
0
        public void GenerateReturnsRandomValue()
        {
            var firstPerson = new Person
            {
                FirstName = "De Jour",
                LastName  = "Mc Cormick"
            };
            var firstBuildChain      = new BuildHistory();
            var firstExecuteStrategy = Substitute.For <IExecuteStrategy>();

            firstExecuteStrategy.BuildChain.Returns(firstBuildChain);

            firstBuildChain.Push(firstPerson);

            var sut = new Wrapper();

            var first = (string)sut.RunGenerate(typeof(string), "email", firstExecuteStrategy);

            var secondPerson = new Person
            {
                FirstName = "Sam",
                LastName  = "Johns"
            };
            var secondBuildChain      = new BuildHistory();
            var secondExecuteStrategy = Substitute.For <IExecuteStrategy>();

            secondExecuteStrategy.BuildChain.Returns(secondBuildChain);

            secondBuildChain.Push(secondPerson);

            var second = first;

            for (var index = 0; index < 1000; index++)
            {
                second = (string)sut.RunGenerate(typeof(string), "email", secondExecuteStrategy);

                if (string.Equals(first, second, StringComparison.OrdinalIgnoreCase) == false)
                {
                    break;
                }
            }

            first.Should().NotBe(second);
        }
        public void PopulateAssignsPropertyValuesToExistingInstance()
        {
            var buildHistory = new BuildHistory();
            var model        = new SlimModel();
            var expected     = Guid.NewGuid();
            var properties   = typeof(SlimModel).GetProperties();
            var propertyInfo = properties.Single();

            var processor          = Substitute.For <IBuildProcessor>();
            var buildConfiguration = Substitute.For <IBuildConfiguration>();
            var propertyResolver   = Substitute.For <IPropertyResolver>();
            var typeCapability     = Substitute.For <IBuildCapability>();
            var valueCapability    = Substitute.For <IBuildCapability>();

            typeCapability.AutoPopulate.Returns(true);
            typeCapability.SupportsCreate.Returns(true);
            typeCapability.SupportsPopulate.Returns(true);
            typeCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));
            valueCapability.SupportsCreate.Returns(true);
            valueCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));

            var sut = new DefaultExecuteStrategy(buildHistory, _buildLog, processor);

            processor.GetBuildCapability(sut, BuildRequirement.Populate,
                                         typeof(SlimModel))
            .Returns(typeCapability);
            buildConfiguration.PropertyResolver.Returns(propertyResolver);
            propertyResolver.GetOrderedProperties(buildConfiguration, typeof(SlimModel))
            .Returns(properties);
            processor.GetBuildCapability(sut, BuildRequirement.Create, propertyInfo)
            .Returns(valueCapability);
            valueCapability.CreateProperty(sut, propertyInfo, Arg.Any <object?[]?>())
            .Returns(expected);
            processor.GetBuildCapability(sut, BuildRequirement.Populate,
                                         typeof(Guid))
            .Returns(valueCapability);
            typeCapability.Populate(sut, model).Returns(model);

            sut.Initialize(buildConfiguration);

            var actual = (SlimModel)sut.Populate(model);

            actual.Value.Should().Be(expected);
        }
        public void CreateReturnsValueFromProcessorWithPropertyPopulation()
        {
            var buildHistory = new BuildHistory();
            var expected     = new SlimModel();
            var value        = Guid.NewGuid();

            var processor          = Substitute.For <IBuildProcessor>();
            var buildConfiguration = Substitute.For <IBuildConfiguration>();
            var propertyResolver   = Substitute.For <IPropertyResolver>();
            var typeCapability     = Substitute.For <IBuildCapability>();
            var valueCapability    = Substitute.For <IBuildCapability>();

            typeCapability.AutoPopulate.Returns(true);
            typeCapability.SupportsCreate.Returns(true);
            typeCapability.SupportsPopulate.Returns(true);
            typeCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));
            valueCapability.SupportsCreate.Returns(true);
            valueCapability.ImplementedByType.Returns(typeof(DummyTypeCreator));

            var sut = new DefaultExecuteStrategy(buildHistory, _buildLog, processor);

            processor.GetBuildCapability(sut, Arg.Any <BuildRequirement>(),
                                         typeof(SlimModel))
            .Returns(typeCapability);
            processor.GetBuildCapability(sut, Arg.Any <BuildRequirement>(),
                                         Arg.Any <PropertyInfo>())
            .Returns(valueCapability);
            processor.GetBuildCapability(sut, Arg.Any <BuildRequirement>(),
                                         typeof(Guid))
            .Returns(valueCapability);
            typeCapability.CreateType(sut, typeof(SlimModel), Arg.Any <object[]>()).Returns(expected);
            valueCapability.CreateProperty(sut, Arg.Any <PropertyInfo>(), Arg.Any <object[]>()).Returns(value);
            typeCapability.Populate(sut, expected).Returns(expected);
            buildConfiguration.PropertyResolver.Returns(propertyResolver);
            propertyResolver.GetOrderedProperties(buildConfiguration, typeof(SlimModel))
            .Returns(typeof(SlimModel).GetProperties());

            sut.Initialize(buildConfiguration);

            var actual = (SlimModel)sut.Create(typeof(SlimModel)) !;

            actual.Should().Be(expected);
            actual.Value.Should().Be(value);
        }
Exemple #30
0
        public void BuildForParameterInfoReturnsNullWhenNoGeneratorsExist()
        {
            var parameterInfo = typeof(Person).GetConstructors()
                                .First(x => x.GetParameters().FirstOrDefault()?.Name == "firstName").GetParameters().First();
            var buildConfiguration = new BuildConfiguration();
            var buildChain         = new BuildHistory();

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

            executeStrategy.Configuration.Returns(buildConfiguration);
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Log.Returns(_buildLog);

            var sut = new ValueGeneratorBuildAction();

            var actual = sut.Build(executeStrategy, parameterInfo);

            actual.Should().BeNull();
        }
Exemple #31
0
        /// <summary>
        /// Will attempt to load the build history from a file.
        /// If the file cannot be found, the string will be assumed to contain Xml data and an attempt will be made to parse it for history data.
        /// </summary>
        /// <param name="XmlFile"></param>
        /// <returns>True if the History object has changed.</returns>
        public bool LoadHistory(string XmlFile)
        {
            /*
            if (File.Exists(XmlFile))
                return History.ImportHistory(new FileStream(XmlFile, FileMode.Open, FileAccess.Read));

            //This means we don't see a file by that name.  Maybe it's just an Xml string?
            return History.ImportHistory(XmlFile);
             */
            if (XmlFile == null || XmlFile.Equals(String.Empty))
            {
                if (History == null)
                {
                    History = new BuildHistory();
                    History.Builds.CollectionChanged += CollectionChanged;
                    return true;
                }
                return false;
            }

            if (File.Exists(XmlFile))
            {
                UrlEncodedMessage uem = new UrlEncodedMessage(File.ReadAllText(XmlFile), AutoBuild.SerialSeperator, true);
                History = uem.DeserializeTo<BuildHistory>() ?? new BuildHistory();
                History.Builds.CollectionChanged += CollectionChanged;
                return true;
            }

            History = new BuildHistory();
            UrlEncodedMessage UEM = new UrlEncodedMessage(XmlFile, AutoBuild.SerialSeperator, true);
            UEM.DeserializeTo(History);
            History.Builds.CollectionChanged += CollectionChanged;
            return true;
        }
Exemple #32
0
 /// <summary>
 /// Loads a history directly.  This will do nothing if a history has already been loaded for this project.
 /// </summary>
 /// <param name="history">The BuildHistory object to attach to this project.</param>
 /// <returns>True if the history was attached.  False otherwise.</returns>
 public bool LoadHistory(BuildHistory history)
 {
     if (History != null)
         return false;
     History = history;
     History.Builds.CollectionChanged += CollectionChanged;
     return true;
 }