public void GetSourceValueReturnsNullWhenPropertyNotFoundTest() { var context = new SlimModel(); var target = new GeneratorWrapper(PropertyExpression.FirstName, PropertyExpression.LastName); var actual = target.ReadSourceValue(context); actual.Should().BeNull(); }
public void PopulateUsesBuildStrategyToPopulateInstanceTest() { var value = Guid.NewGuid(); var expected = new SlimModel(); var build = Substitute.For<IBuildStrategy>(); var generator = Substitute.For<IValueGenerator>(); var generators = new List<IValueGenerator> {generator}.AsReadOnly(); build.ValueGenerators.Returns(generators); generator.IsSupported(typeof(Guid), "Value", Arg.Any<LinkedList<object>>()).Returns(true); generator.Generate(typeof(Guid), "Value", Arg.Any<LinkedList<object>>()).Returns(value); try { Model.BuildStrategy = build; var actual = Model.Populate(expected); actual.Should().Be(expected); } finally { Model.BuildStrategy = Model.DefaultBuildStrategy; } }
public void IsSupportedReturnsFalseWithNullBuildChainTest() { var context = new SlimModel(); var buildChain = new LinkedList<object>(); buildChain.AddFirst(context); var target = new GeneratorWrapper(PropertyExpression.FirstName, typeof(string)); var actual = target.IsSupported(typeof(string), "FirstName", null); actual.Should().BeFalse(); }
public void IsSupportedReturnsTrueWhenTargetExpressionMatchesReferenceNameTest() { var context = new SlimModel(); var buildChain = new LinkedList<object>(); buildChain.AddFirst(context); var target = new GeneratorWrapper(PropertyExpression.FirstName, typeof(string)); var actual = target.IsSupported(typeof(string), "FirstName", buildChain); actual.Should().BeTrue(); }
public void PopulateUsesDefaultExecuteStrategyToPopulateInstanceTest() { var value = Guid.NewGuid(); var expected = new SlimModel(); var target = Substitute.For<IBuildStrategy>(); var generator = Substitute.For<IValueGenerator>(); var generators = new List<IValueGenerator> { generator }.AsReadOnly(); target.ValueGenerators.Returns(generators); 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 = target.Populate(expected); actual.Should().Be(expected); }
public void GenerateReturnsValueWhenContextLacksNameAndGenderPropertiesTest() { var model = new SlimModel(); var buildChain = new LinkedList<object>(); buildChain.AddFirst(model); var target = new EmailValueGenerator(); var actual = (string)target.Generate(typeof(string), "email", buildChain); actual.Should().NotBeNullOrWhiteSpace(); }
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 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 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(); }
public void PopulatePushesInstanceIntoBuildChainWhilePopulatingTest() { var instance = new SlimModel(); var testPassed = false; var generator = Substitute.For<IValueGenerator>(); var buildStrategy = Substitute.For<IBuildStrategy>(); var target = new DefaultExecuteStrategy(); target.Initialize(buildStrategy, buildStrategy.GetBuildLog()); buildStrategy.CreationRules.Returns(new List<CreationRule>().AsReadOnly()); buildStrategy.ValueGenerators.Returns( new List<IValueGenerator> { generator }.AsReadOnly()); generator.When( x => x.Generate( typeof(Guid), nameof(SlimModel.Value), Arg.Is<LinkedList<object>>(y => y.Last.Value == instance))).Do( x => { target.BuildChain.Should().HaveCount(1); target.BuildChain.Should().Contain(instance); testPassed = true; }); generator.IsSupported( typeof(Guid), nameof(SlimModel.Value), Arg.Is<LinkedList<object>>(x => x.Last.Value == instance)).Returns(true); target.Populate(instance); testPassed.Should().BeTrue(); }
public void PopulateReturnsProvidedInstanceTest() { var executeStrategy = new DummyExecuteStrategy(); var expected = new SlimModel(); var target = new DefaultTypeCreator(); var actual = target.Populate(expected, executeStrategy); actual.Should().BeSameAs(expected); }