Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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)
                );
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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)
                );
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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!");
            }
        }