public void AddEvent_ReturningBookBookIsLent_AddsReturnBookEventAndChangesBookIsLentToFalse() { _bookCopiesInDataFiller[0].IsLent = true; _repo = new DataRepository(new ConstDataFiller(books: _booksInDataFiller, customers: _customersInDataFiller, bookCopies: _bookCopiesInDataFiller, events: _eventsInDataFiller)); var eve = new ReturnBookEvent(_bookCopiesInDataFiller[0], _customersInDataFiller[0], DateTime.Now); _repo.AddEvent(eve); Assert.AreEqual(false, _bookCopiesInDataFiller[0].IsLent); Assert.AreEqual(true, _repo.GetAllEvents().Contains(eve)); }
public void AddEvent_ReturningBookIsNotLent_ExceptionThrown() { _repo = new DataRepository(new ConstDataFiller(books: _booksInDataFiller, customers: _customersInDataFiller, bookCopies: _bookCopiesInDataFiller, events: _eventsInDataFiller)); var eve = new ReturnBookEvent(_bookCopiesInDataFiller[0], _customersInDataFiller[0], DateTime.ParseExact("22/03/2018", "dd/MM/yyyy", null)); Assert.ThrowsException <InvalidEventException>( () => _repo.AddEvent(eve) ); }
public void AddEvent_ReturningDamagedBookBookIsLent_ChangesBookStateToDamaged() { _bookCopiesInDataFiller[0].IsLent = true; _repo = new DataRepository(new ConstDataFiller(books: _booksInDataFiller, customers: _customersInDataFiller, bookCopies: _bookCopiesInDataFiller, events: _eventsInDataFiller)); var eve = new ReturnBookEvent(_bookCopiesInDataFiller[0], _customersInDataFiller[0], DateTime.Now, 20, PaymentCause.DamagedBook); _repo.AddEvent(eve); var actual = _bookCopiesInDataFiller[0].State; Assert.AreEqual(BookCopy.States.Damaged, actual); }
public void AddEvent_ReturningBookWithPositivePaymentAndNoCause_ExceptionThrown() { _bookCopiesInDataFiller[0].IsLent = true; _repo = new DataRepository(new ConstDataFiller(books: _booksInDataFiller, customers: _customersInDataFiller, bookCopies: _bookCopiesInDataFiller, events: _eventsInDataFiller)); var eve = new ReturnBookEvent(_bookCopiesInDataFiller[0], _customersInDataFiller[0], DateTime.Now, 20, PaymentCause.None); Assert.ThrowsException <InvalidEventException>( () => _repo.AddEvent(eve) ); }
public void ReturnDamagedBook(Customer customer, BookCopy bookCopy) { var price = bookCopy.BasePrice * (PaymentsModifiers[bookCopy.State] / 100.0); var retunBook = new ReturnBookEvent( bookCopy, customer, _dateProvider.Now(), price, PaymentCause.DamagedBook ); try { _dataRepository.AddEvent(retunBook); } catch (EventException e) { throw new DataServiceException(e); } }
private void IsValid(ReturnBookEvent returnBookEvent) { CheckBookEvent(returnBookEvent); if (returnBookEvent.RequiredPayment < 0.0) { throw new InvalidEventException("Required payment cannot be negative number!"); } if (returnBookEvent.RequiredPayment != 0.0 && returnBookEvent.Cause == PaymentCause.None) { throw new InvalidEventException("PaymentCause cannot be None if requiredPayment != 0!"); } if (!returnBookEvent.Copy.IsLent) { throw new InvalidEventException("Cannot return book which is not lent"); } var lastCorespondingLend = _dataContext.events .AsEnumerable() .Where(eve => eve is LendBookEvent) .Cast <LendBookEvent>() .Where(eve => eve.Copy == returnBookEvent.Copy && eve.Customer == returnBookEvent.Customer) .OrderByDescending(eve => eve.Date) .FirstOrDefault(); if (lastCorespondingLend == null) { throw new InvalidEventException("No coresponding lend event!"); } else if (lastCorespondingLend.Date >= returnBookEvent.Date) { throw new InvalidEventException("Return date should after lend date!"); } }