public void Create_POST_GivenModelStateIsValid_ShouldSaveLendingEntryToDB()
        {
            //---------------Set up test pack-------------------
            var item = new ItemBuilder().WithRandomProps().Build();
            var person = new PersonBuilder().WithRandomProps().Build();
            var mappingEngine = Substitute.For<IMappingEngine>();
            var itemsRepository = Substitute.For<IItemsRepository>();
            var personRepository = Substitute.For<IPersonRepository>();
            var lendingRepository = Substitute.For<ILendingRepository>();
            var lending = new LendingBuilder().WithRandomProps().Build();
            var viewModel = new LendingViewModelBuilder().WithRandomProps().Build();
            mappingEngine.Map<LendingViewModel, Lending>(viewModel).Returns(lending);
            itemsRepository.GetById(viewModel.ItemId).Returns(item);
            personRepository.GetById(viewModel.PersonId).Returns(person);
            var controller = CreateLendingController(lendingRepository, mappingEngine, personRepository, itemsRepository);

            Lending savedLending = null;
            lendingRepository.When(x => x.Save(Arg.Any<Lending>())).Do(info => savedLending = (Lending)info[0]);
            //---------------Assert Precondition----------------
            Assert.IsTrue(controller.ModelState.IsValid);
            //---------------Execute Test ----------------------
            var result = controller.Create(viewModel) as ViewResult;
            //---------------Test Result -----------------------
            Assert.AreEqual(lending.LedingId, savedLending.LedingId);
            Assert.AreEqual(lending.ItemId, savedLending.ItemId);
            Assert.AreEqual(lending.PersonId, savedLending.PersonId);
        }
 public void Create_POST_GivenPersonIdIsNotNull_ShouldSetPersonName()
 {
     //---------------Set up test pack-------------------
     var item = new ItemBuilder().WithRandomProps().Build();
     var person = new PersonBuilder().WithRandomProps().Build();
     var mappingEngine = Substitute.For<IMappingEngine>();
     var itemsRepository = Substitute.For<IItemsRepository>();
     var personRepository = Substitute.For<IPersonRepository>();
     var lending = new LendingBuilder().WithRandomProps().Build();
     var viewModel = new LendingViewModelBuilder().WithRandomProps().Build();
     mappingEngine.Map<LendingViewModel, Lending>(viewModel).Returns(lending);
     itemsRepository.GetById(viewModel.ItemId).Returns(item);
     personRepository.GetById(viewModel.PersonId).Returns(person);
     var controller = CreateLendingController(null, mappingEngine, personRepository, itemsRepository);
     //---------------Assert Precondition----------------
     Assert.IsTrue(controller.ModelState.IsValid);
     //---------------Execute Test ----------------------
     var result = controller.Create(viewModel) as ViewResult;
     //---------------Test Result -----------------------
     Assert.AreEqual(lending.PersonName, person.FirstName);
 }