public void CreateWithThrowsExceptionWhenNoGeneratorOrCreatorMatchFoundForConstructorParameterTest() { var generators = new List<IValueGenerator>(); var creators = new List<ITypeCreator>(); var constructorResolver = new DefaultConstructorResolver(); var valueGenerator = Substitute.For<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); generators.Add(valueGenerator); creators.Add(typeCreator); typeCreator.CanCreate(typeof(KeyValuePair<string, Person>), null, Arg.Any<LinkedList<object>>()) .Returns(true); typeCreator.AutoDetectConstructor.Returns(true); typeCreator.AutoPopulate.Returns(true); valueGenerator.IsSupported(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(false); buildStrategy.TypeCreators.Returns(creators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(generators.AsReadOnly()); buildStrategy.ConstructorResolver.Returns(constructorResolver); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(typeof(KeyValuePair<string, Person>)); action.ShouldThrow<BuildException>(); }
public void CreateWithThrowsExceptionWhenNoGeneratorOrCreatorMatchFoundTest() { var buildStrategy = Substitute.For<IBuildStrategy>(); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(typeof(string)); action.ShouldThrow<BuildException>(); }
public void CreateWithThrowsExceptionWhenGeneratingValueFailsTest() { var person = new Person(); var generators = new List<IValueGenerator>(); var creators = new List<ITypeCreator>(); var valueGenerator = Substitute.For<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); generators.Add(valueGenerator); creators.Add(typeCreator); typeCreator.CanCreate(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(Person), null, null, null).Returns(person); valueGenerator.IsSupported(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(true); valueGenerator.Generate(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()) .Throws(new InvalidOperationException()); buildStrategy.TypeCreators.Returns(creators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(generators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(typeof(Person)); var exception = action.ShouldThrow<BuildException>().Where(x => x.Message != null).Where(x => x.BuildLog != null).Which; _output.WriteLine(exception.Message); }
public void CreateWithThrowsExceptionWhenGeneratingValueThrowsBuildExceptionTest() { var person = new Person(); var generators = new List<IValueGenerator>(); var creators = new List<ITypeCreator>(); var valueGenerator = Substitute.For<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); generators.Add(valueGenerator); creators.Add(typeCreator); typeCreator.CanCreate(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(person); typeCreator.AutoPopulate.Returns(true); valueGenerator.IsSupported(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()).Returns(true); valueGenerator.Generate(Arg.Any<Type>(), Arg.Any<string>(), Arg.Any<LinkedList<object>>()) .Throws(new BuildException()); buildStrategy.TypeCreators.Returns(creators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(generators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(typeof(Person)); action.ShouldThrow<BuildException>(); }
public void CreateWithReturnsNullWhenNoReferenceTypeCreatedTest() { var typeCreators = new List<ITypeCreator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); typeCreators.Add(typeCreator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); typeCreator.CanCreate(typeof(Stream), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(Stream), null, Arg.Any<LinkedList<object>>()).Returns(null); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); var actual = target.CreateWith(typeof(Stream)); actual.Should().BeNull(); }
public void CreateWithReturnsValueTypeFromGeneratorTest() { var expected = Guid.NewGuid().ToString(); var valueGenerators = new List<IValueGenerator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var valueGenerator = Substitute.For<IValueGenerator>(); valueGenerators.Add(valueGenerator); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); valueGenerator.IsSupported(typeof(string), null, Arg.Any<LinkedList<object>>()).Returns(true); valueGenerator.Generate(typeof(string), null, Arg.Any<LinkedList<object>>()).Returns(expected); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); var actual = target.CreateWith(typeof(string)); actual.Should().Be(expected); }
public void CreateWithReturnsValueFromSupportedCreationRuleWithHigherPriorityTest() { var firstValue = Guid.NewGuid(); var secondValue = Guid.NewGuid(); var buildStrategy = Model.DefaultBuildStrategy.Clone() .Add(new CreationRule(typeof(Person), "Id", 10, firstValue)) .Add(new CreationRule(typeof(Person), "Id", 20, secondValue)) .Compile(); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); var actual = (Person)target.CreateWith(typeof(Person)); actual.Id.Should().Be(secondValue); }
public void CreateWithThrowsExceptionWithNullTypeTest() { var buildStrategy = Substitute.For<IBuildStrategy>(); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(null); action.ShouldThrow<ArgumentNullException>(); }
public void CreateWithReturnsValueFromCreatorWithNoArgumentsAndDetectConstructorEnabledTest() { var expected = new Person(); var typeCreators = new List<ITypeCreator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var resolver = Substitute.For<IConstructorResolver>(); typeCreators.Add(typeCreator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ConstructorResolver.Returns(resolver); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); resolver.Resolve(typeof(Person)) .Returns(typeof(Person).GetConstructors().Single(x => x.GetParameters().Length == 0)); typeCreator.CanCreate(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(expected); typeCreator.Populate(expected, target).Returns(expected); typeCreator.AutoPopulate.Returns(false); typeCreator.AutoDetectConstructor.Returns(true); var actual = target.CreateWith(typeof(Person)); actual.Should().BeSameAs(expected); }
public void CreateWithReturnsValueFromResolvedConstructorAndBuiltParametersTest() { var value = Guid.NewGuid(); var expected = new ReadOnlyModel(value); var valueGenerators = new List<IValueGenerator>(); var typeCreators = new List<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var resolver = Substitute.For<IConstructorResolver>(); var generator = Substitute.For<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); typeCreators.Add(typeCreator); valueGenerators.Add(generator); resolver.Resolve(typeof(ReadOnlyModel), Arg.Any<object[]>()) .Returns(typeof(ReadOnlyModel).GetConstructors()[0]); buildStrategy.ConstructorResolver.Returns(resolver); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(ReadOnlyModel), null, Arg.Any<LinkedList<object>>(), value).Returns(expected); typeCreator.Populate(expected, target).Returns(expected); typeCreator.AutoPopulate.Returns(true); typeCreator.AutoDetectConstructor.Returns(true); generator.IsSupported(typeof(Guid), "value", Arg.Any<LinkedList<object>>()).Returns(true); generator.Generate(typeof(Guid), "value", Arg.Any<LinkedList<object>>()).Returns(value); var actual = (ReadOnlyModel)target.CreateWith(typeof(ReadOnlyModel)); actual.Should().Be(expected); actual.Value.Should().Be(value); }
public void CreateWithReturnsValueCreatedFromProvidedArgumentsTest() { var expected = new Person(); var args = new object[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DateTime.UtcNow, true, Guid.NewGuid(), Environment.TickCount }; var typeCreators = new List<ITypeCreator>(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); typeCreators.Add(typeCreator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate(typeof(Person), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(Person), null, Arg.Any<LinkedList<object>>(), args).Returns(expected); typeCreator.Populate(expected, target).Returns(expected); typeCreator.AutoPopulate.Returns(false); var actual = target.CreateWith(typeof(Person), args); actual.Should().BeSameAs(expected); }
public void CreateWithReturnsReferenceTypeFromCreatorTest() { var expected = new SlimModel(); var value = Guid.NewGuid(); var typeCreators = new List<ITypeCreator>(); var valueGenerators = new List<IValueGenerator>(); var typeCreator = Substitute.For<ITypeCreator>(); var generator = Substitute.For<IValueGenerator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); typeCreators.Add(typeCreator); valueGenerators.Add(generator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(expected); typeCreator.Populate(expected, target).Returns(expected); typeCreator.AutoPopulate.Returns(true); generator.IsSupported(typeof(Guid), "Value", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)) .Returns(true); generator.Generate(typeof(Guid), "Value", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)) .Returns(value); var actual = (SlimModel)target.CreateWith(typeof(SlimModel)); actual.Should().Be(expected); actual.Value.Should().Be(value); }
public void CreateWithReturnsNullWhenNoValueTypeCreatedTest() { var valueGenerators = new List<IValueGenerator>(); var valueGenerator = Substitute.For<IValueGenerator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); valueGenerators.Add(valueGenerator); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); valueGenerator.IsSupported(typeof(int), null, Arg.Any<LinkedList<object>>()).Returns(true); valueGenerator.Generate(typeof(int), null, Arg.Any<LinkedList<object>>()).Returns(null); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); var actual = target.CreateWith(typeof(int)); actual.Should().BeNull(); }
public void CreateWithThrowsExceptionWhenNotInitializedTest() { var target = new DefaultExecuteStrategy(); Action action = () => target.CreateWith(typeof(Person)); action.ShouldThrow<InvalidOperationException>(); }
public void CreateWithReturnsValueFromSupportedCreatorTest() { var firstModel = new SlimModel(); var secondModel = new SlimModel(); var value = Guid.NewGuid(); var valueGenerators = new List<IValueGenerator>(); var typeCreators = new List<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var firstCreator = Substitute.For<ITypeCreator>(); var secondCreator = Substitute.For<ITypeCreator>(); var generator = Substitute.For<IValueGenerator>(); typeCreators.Add(firstCreator); typeCreators.Add(secondCreator); valueGenerators.Add(generator); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); firstCreator.CanCreate(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(false); firstCreator.Create(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(firstModel); firstCreator.Priority.Returns(10); firstCreator.AutoPopulate.Returns(true); firstCreator.Populate(firstModel, target).Returns(firstModel); secondCreator.CanCreate(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(true); secondCreator.Create(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(secondModel); secondCreator.Priority.Returns(2); secondCreator.AutoPopulate.Returns(true); secondCreator.Populate(secondModel, target).Returns(secondModel); generator.IsSupported(typeof(Guid), "Value", Arg.Is<LinkedList<object>>(x => x.Last.Value == secondModel)) .Returns(true); generator.Generate(typeof(Guid), "Value", Arg.Is<LinkedList<object>>(x => x.Last.Value == secondModel)) .Returns(value); var actual = (SlimModel)target.CreateWith(typeof(SlimModel)); actual.Should().BeSameAs(secondModel); actual.Value.Should().Be(value); }
public void CreateWithThrowsExceptionWhenPropertyCannotBeCreatedTest() { var typeCreator = new DefaultTypeCreator(); var typeCreators = new List<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var resolver = Substitute.For<IConstructorResolver>(); typeCreators.Add(typeCreator); resolver.Resolve(typeof(SlimModel), Arg.Any<object[]>()).Returns(typeof(SlimModel).GetConstructors()[0]); buildStrategy.ConstructorResolver.Returns(resolver); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(typeof(SlimModel)); action.ShouldThrow<BuildException>(); }
public void CreateWithReturnsValueFromSupportedGeneratorTest() { var firstValue = Guid.NewGuid(); var secondValue = Guid.NewGuid(); var valueGenerators = new List<IValueGenerator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var firstGenerator = Substitute.For<IValueGenerator>(); var secondGenerator = Substitute.For<IValueGenerator>(); valueGenerators.Add(firstGenerator); valueGenerators.Add(secondGenerator); buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly()); firstGenerator.IsSupported(typeof(Guid), null, Arg.Any<LinkedList<object>>()).Returns(false); firstGenerator.Generate(typeof(Guid), null, Arg.Any<LinkedList<object>>()).Returns(firstValue); firstGenerator.Priority.Returns(10); secondGenerator.IsSupported(typeof(Guid), null, Arg.Any<LinkedList<object>>()).Returns(true); secondGenerator.Generate(typeof(Guid), null, Arg.Any<LinkedList<object>>()).Returns(secondValue); secondGenerator.Priority.Returns(2); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); var actual = target.CreateWith(typeof(Guid)); actual.Should().Be(secondValue); }
public void CreateThrowsExceptionWhenPropertyCannotBeCreatedTest() { var typeCreator = Substitute.For<ITypeCreator>(); typeCreator.CanCreate(typeof(Address), "Address", Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Priority.Returns(int.MaxValue); typeCreator.AutoDetectConstructor.Returns(true); typeCreator.AutoPopulate.Returns(true); typeCreator.Create(typeof(Address), "Address", Arg.Any<LinkedList<object>>()) .Throws(new InvalidOperationException()); var buildStrategy = new DefaultBuildStrategyCompiler().Add(typeCreator).Compile(); var target = new DefaultExecuteStrategy<Company>(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); Action action = () => target.CreateWith(); var exception = action.ShouldThrow<BuildException>().Where(x => x.Message != null).Where(x => x.BuildLog != null).Which; _output.WriteLine(exception.Message); }
public void CreateWithDoesNotBuildPropertiesWhenTypeCreatorDisablesAutoPopulateTest() { var model = new SlimModel(); var typeCreators = new List<ITypeCreator>(); var buildLog = new DefaultBuildLog(); var typeCreator = Substitute.For<ITypeCreator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); typeCreators.Add(typeCreator); buildStrategy.GetBuildLog().Returns(buildLog); buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly()); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); typeCreator.CanCreate(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(true); typeCreator.Create(typeof(SlimModel), null, Arg.Any<LinkedList<object>>()).Returns(model); typeCreator.Priority.Returns(1); typeCreator.AutoPopulate.Returns(false); typeCreator.Populate(model, target).Returns(model); var actual = (SlimModel)target.CreateWith(typeof(SlimModel)); actual.Should().BeSameAs(model); actual.Value.Should().BeEmpty(); }