public void GetAll_GivenOneItemHasBeenBorrowed_ShouldReturnThatBorrowedItem()
        {
            //---------------Set up test pack-------------------
            var lending = new LendingBuilder().WithRandomProps().Build();
            var dbSet = CreateFakeDbSet(lending);
            var lendingLibraryDbContext = CreateLendingLibraryDbContext(dbSet);
            var controller = CreateLendingController(lendingLibraryDbContext);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = controller.GetAll();
            //---------------Test Result -----------------------
            Assert.AreEqual(1, results.Count());
        }
        public void Edit_ShouldCallGetAllPeopleFromPersonRepo()
        {
            //---------------Set up test pack-------------------
            var personRepository = Substitute.For<IPersonRepository>();
            var lending = new LendingBuilder().WithRandomGeneratedId().Build();
            var id = lending.LedingId;
            var mappingEngine = _container.Resolve<IMappingEngine>();
            var lendingRepository = Substitute.For<ILendingRepository>();
            lendingRepository.GetById(id).Returns(lending);
            var controller = CreateLendingController(lendingRepository, mappingEngine, personRepository);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = controller.Edit(id);
            //---------------Test Result -----------------------
            personRepository.Received().GetAllPeople();
        }
        public void Edit_ShouldCallMappingEngine()
        {
            //---------------Set up test pack-------------------
            var lending = new LendingBuilder().WithRandomGeneratedId().Build();
            var id = lending.LedingId;
            var mappingEngine = Substitute.For<IMappingEngine>();
            var lendingRepository = Substitute.For<ILendingRepository>();
            lendingRepository.GetById(id).Returns(lending);
            var controller = CreateLendingController(lendingRepository, mappingEngine);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var result = controller.Edit(id);
            //---------------Test Result -----------------------
            mappingEngine.Received(1).Map<Lending, LendingViewModel>(lending);
        }
        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);
 }
        public void Index_GivenLendingItemsAreReturnedFromDataBase_ShouldCallMappingEngine()
        {
            //---------------Set up test pack-------------------
            var lendingItem = new LendingBuilder().WithRandomGeneratedId().WithRandomProps().Build();
            var lendingRepository = Substitute.For<ILendingRepository>();
            var lendings = new List<Lending> { lendingItem };
            lendingRepository.GetAll().Returns(lendings);
            var mappingEngine = Substitute.For<IMappingEngine>();
            var controller = CreateLendingController(lendingRepository, mappingEngine);
            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            var results = controller.Index();
            //---------------Test Result -----------------------
            mappingEngine.Received().Map<List<Lending>, List<LendingViewModel>>(lendings);
        }
 public void Update_GivenValidObjects_ShouldCallSaveChanges()
 {
     //---------------Set up test pack-------------------
     var existingLendingItem = new LendingBuilder().WithStatus(LendingStatus.Available).WithRandomGeneratedId().Build();
     var newLendingItem = new LendingBuilder().WithStatus(LendingStatus.NotAvailable).WithRandomGeneratedId().Build();
     var dbSet = CreateFakeDbSet(existingLendingItem);
     var lendingLibraryDbContext = CreateLendingLibraryDbContext(dbSet);
     var controller = CreateLendingController(lendingLibraryDbContext);
     //---------------Assert Precondition----------------
     Assert.AreNotEqual(existingLendingItem.LendingStatus, newLendingItem.LendingStatus);
     //---------------Execute Test ----------------------
     controller.Update(existingLendingItem, existingLendingItem);
     //---------------Test Result -----------------------
     lendingLibraryDbContext.Received().SaveChanges();
 }
        public void Save_GivenValidLendingObject_ShouldShouldAssignLendingId()
        {
            //---------------Set up test pack-------------------
            var lending = new LendingBuilder().WithId(Guid.Empty).Build();
            var lendingLibraryDbContext = CreateLendingLibraryDbContext();
            var controller = CreateLendingController(lendingLibraryDbContext);

            //---------------Assert Precondition----------------

            //---------------Execute Test ----------------------
            controller.Save(lending);
            //---------------Test Result -----------------------
            var lendingsFromRepo = controller.GetAll();
            Assert.AreNotEqual(Guid.Empty, lendingsFromRepo.First().LedingId);
        }