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 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>(); }
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); }
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(); }
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(); }
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 !); }
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(); }
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(); }
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(); }
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)); } }
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"); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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); }
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(); }
/// <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; }
/// <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; }