public void PopulateAssignsPropertyValuesToExistingInstanceTest()
{
var staff = new List<Person>();
var name = Guid.NewGuid().ToString();
var address = Guid.NewGuid().ToString();
var expected = new Company();
var valueGenerators = new List<IValueGenerator>();
var typeCreators = new List<ITypeCreator>();
var buildStrategy = Substitute.For<IBuildStrategy>();
var typeCreator = Substitute.For<ITypeCreator>();
var valueGenerator = Substitute.For<IValueGenerator>();
typeCreators.Add(typeCreator);
valueGenerators.Add(valueGenerator);
buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly());
buildStrategy.ValueGenerators.Returns(valueGenerators.AsReadOnly());
var target = new DefaultExecuteStrategy();
target.Initialize(buildStrategy, buildStrategy.GetBuildLog());
typeCreator.CanCreate(
typeof(IEnumerable<Person>),
"Staff",
Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true);
typeCreator.Create(
typeof(IEnumerable<Person>),
"Staff",
Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(staff);
typeCreator.Populate(staff, target).Returns(staff);
valueGenerator.IsSupported(
typeof(string),
"Name",
Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true);
valueGenerator.Generate(typeof(string), "Name", Arg.Is<LinkedList<object>>(x => x.Last.Value == expected))
.Returns(name);
valueGenerator.IsSupported(
typeof(string),
"Address",
Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(true);
valueGenerator.Generate(
typeof(string),
"Address",
Arg.Is<LinkedList<object>>(x => x.Last.Value == expected)).Returns(address);
var actual = (Company)target.Populate(expected);
actual.Should().BeSameAs(expected);
actual.Name.Should().Be(name);
actual.Address.Should().Be(address);
actual.Staff.Should().BeSameAs(staff);
}