Esempio n. 1
0
 def test_validateRental_lateClient_throwsException(self):
     self.initialize()
     self.__service_rentals.rent_movie(1, 1, 1, '1/1/1', '2/2/1')
     rentals = self.__service_rentals.get_rentals()
     rental = Rental(2, 2, 1, Date(2, 1, 2), Date(2, 2, 2), Date(3, 3, 3))
     with self.assertRaises(ValidationError):
         self.__rental_validator.validate_rental(rental, rentals)
Esempio n. 2
0
 def late_rentals(self):
     current_date = datetime.date.today()
     situation_late_rentals = []
     rentals = self.get_rentals()
     for rental in rentals:
         if rental.get_returnDate() == Date(0, 0, 0) and rental.get_dueDate(
         ) <= Date(current_date.day, current_date.month, current_date.year):
             # it means the movie hasn't been returned, and the due date passed
             movie_id = rental.get_movieId()
             movie = self.repoMovies.search(Movie(movie_id, '', '', ''))
             name = movie.get_title()
             delay = rental.number_of_days_delayed()
             situation_late_rentals.append(
                 LateRentals(movie_id, name, delay))
     situation_late_rentals.sort(key=lambda x: x.get_delay(), reverse=True)
     return situation_late_rentals
Esempio n. 3
0
    def rent_movie(self, rentalId, movieId, clientId, rentDate, dueDate):
        # it creates a rental - if movie and client exist
        # it validates and adds it to the repository for rentals
        # - the movie must not be already rented (and not returned)
        # - the client must not have any rented movies past their due date
        movie = self.repoMovies.search(Movie(movieId, '', '', ''))
        client = self.repoClients.search(Client(clientId, ''))
        rentDate = self.get_date(rentDate)
        dueDate = self.get_date(dueDate)
        returnDate = Date(0, 0, 0)
        if dueDate <= rentDate:
            raise TimelineError(
                'Due date must be chronologically after rent-date')

        rental = Rental(rentalId, movie.get_id(), client.get_id(), rentDate,
                        dueDate, returnDate)

        rentals = self.get_rentals()
        self.validRental.validate_rental(rental, rentals)
        self.repoRentals.add(rental)
        ''' For undo '''
        operation = Operation(self.repoRentals, "Repository.add",
                              "Repository.remove", rental)
        self.undoStack.push_op(operation)
        self.redoStack.clear()
Esempio n. 4
0
 def test_return_rentedMovie_returnDateIsAdded(self):
     self.initialize()
     self.__service_rentals.rent_movie(1, 1, 1, '1/1/2000', '1/1/2001')
     self.__service_rentals.return_movie(1, '2/2/2000')
     self.assertEqual(
         Date(2, 2, 2000),
         self.__rentals_repository.search(Rental(1, '', '', '', '',
                                                 '')).get_returnDate())
Esempio n. 5
0
 def test_setters_rental_areSet(self):
     rental = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(0, 0, 0))
     rental.set_clientId(2)
     self.assertEqual(rental.get_clientId(), 2)
     rental.set_movieId(2)
     self.assertEqual(rental.get_movieId(), 2)
     rental.set_rentalId(2)
     self.assertEqual(rental.get_rentalId(), 2)
     rental.set_rentDate(Date(2, 1, 1))
     self.assertEqual(rental.get_rentDate(), Date(2, 1, 1))
     rental.set_dueDate(Date(3, 3, 3))
     self.assertEqual(rental.get_dueDate(), Date(3, 3, 3))
Esempio n. 6
0
 def test_str_rental_string(self):
     rental = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(0, 0, 0))
     self.assertEqual(
         str(rental), "Rental ID: 1" + "\n" + "Movie ID: 1" + '\n' +
         "Client ID: 1" + '\n' + "   Rented:   1/1/1" + '\n' +
         "   Due date: 2/2/2" + '\n' + "   Returned: - \n")
     rental = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(3, 3, 3))
     self.assertEqual(
         str(rental), "Rental ID: 1" + "\n" + "Movie ID: 1" + '\n' +
         "Client ID: 1" + '\n' + "   Rented:   1/1/1" + '\n' +
         "   Due date: 2/2/2" + '\n' + "   Returned: 3/3/3" + "\n")
Esempio n. 7
0
 def return_movie(self, rentalId, returnDate):
     # it searches for the rental id given
     # if it exists it adds the returned date
     returnDate = self.get_date(returnDate)
     rental = self.repoRentals.search(Rental(rentalId, '', '', '', '', ''))
     initial_rental = copy.deepcopy(rental)
     if rental.get_returnDate() != Date(0, 0, 0):
         raise RentingError('Movie was already returned')
     if returnDate <= rental.get_rentDate():
         raise TimelineError(
             'Return-date must be chronologically after rent-date')
     self.repoRentals.update(rental,
                             Rental(rentalId, '', '', '', '', returnDate))
     ''' For undo '''
     operation = UpdateOperation(
         self.repoRentals, "Repository.update", initial_rental,
         Rental(rentalId, '', '', '', '', returnDate))
     self.undoStack.push_op(operation)
     self.redoStack.clear()
Esempio n. 8
0
    def test(self):

        valid_movie = ValidMovie()
        valid_client = ValidClient()
        valid_rental = ValidRental()
        repository_movie = Repository()
        repository_client = Repository()
        repository_rental = Repository()
        undo_stack = Stack()
        redo_stack = Stack()
        service_movie = ServiceMovies(repository_movie, valid_movie,
                                      undo_stack, redo_stack,
                                      repository_rental)
        service_client = ServiceClients(repository_client, valid_client,
                                        undo_stack, redo_stack,
                                        repository_rental)
        service_rental = ServiceRentals(repository_movie, repository_client,
                                        repository_rental, valid_rental,
                                        undo_stack, redo_stack)
        service_undo = ServiceUndo(undo_stack, redo_stack)
        service_undo.clear()

        service_movie.add_movie(1, 'a', 'a', 'a')
        service_undo.undo()
        self.assertEqual(0, service_movie.get_number())
        service_undo.redo()
        self.assertEqual(service_movie.get_movies()[0],
                         Movie(1, 'a', 'a', 'a'))

        service_client.add_client(1, 'a')
        service_undo.undo()
        self.assertEqual(0, service_client.get_number())
        service_undo.redo()
        self.assertEqual(service_client.get_clients()[0], Client(1, 'a'))
        with self.assertRaises(UndoError):
            service_undo.redo()

        service_client.update_client(1, 'b')
        service_undo.undo()
        self.assertEqual(service_client.get_clients()[0].get_name(), 'a')
        service_undo.redo()
        self.assertEqual(service_client.get_clients()[0].get_name(), 'b')

        service_rental.rent_movie(1, 1, 1, '1/1/1', '2/2/2')
        service_client.remove_client(1)
        self.assertEqual(service_rental.get_number(), 0)
        self.assertEqual(service_client.get_number(), 0)
        service_undo.undo()
        self.assertEqual(service_rental.get_number(), 1)
        self.assertEqual(service_client.get_number(), 1)
        service_undo.redo()
        self.assertEqual(service_rental.get_number(), 0)
        self.assertEqual(service_client.get_number(), 0)

        service_client.add_client(1, 'a')
        service_rental.rent_movie(1, 1, 1, '1/1/1', '2/2/2')
        service_undo.undo()
        self.assertEqual(service_rental.get_number(), 0)
        service_undo.redo()
        self.assertEqual(
            service_rental.get_rentals()[0],
            Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(0, 0, 0)))

        service_rental.return_movie(1, '3/3/3')
        service_undo.undo()
        self.assertEqual(service_rental.get_rentals()[0].get_returnDate(),
                         Date(0, 0, 0))
        service_undo.redo()
        self.assertEqual(service_rental.get_rentals()[0].get_returnDate(),
                         Date(3, 3, 3))
Esempio n. 9
0
 def test_rent_validMovieAndClient_rentalIsCreated(self):
     self.initialize()
     self.__service_rentals.rent_movie(1, 1, 1, '1/1/2000', '1/1/2001')
     rental = Rental(1, 1, 1, Date(1, 1, 2000), Date(1, 1, 2001),
                     Date(0, 0, 0))
     self.assertEqual(self.__service_rentals.get_rentals()[0], rental)
Esempio n. 10
0
 def test_validateRental_validRental_none(self):
     self.initialize()
     rentals = self.__service_rentals.get_rentals()
     rental = Rental(1, 1, 1, Date(2, 1, 1), Date(2, 2, 2), Date(3, 3, 3))
     self.__rental_validator.validate_rental(rental, rentals)
Esempio n. 11
0
 def test_invalidDate(self):
     with self.assertRaises(DateError):
         d = Date(111, 111, 11)
Esempio n. 12
0
 def test_daysRented_rental_returnsNrOfDays(self):
     rental = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(4, 1, 1))
     self.assertEqual(rental.number_of_days_rented(), 4)
Esempio n. 13
0
 def test_identical_sameRentals_True(self):
     rental = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(0, 0, 0))
     rental1 = Rental(1, 1, 1, Date(1, 1, 1), Date(2, 2, 2), Date(0, 0, 0))
     self.assertTrue(rental.identical(rental1))
Esempio n. 14
0
 def get_date(self, inputDate):
     date = inputDate.split('/')
     if len(date) != 3:
         raise DateError('Date is not in valid format')
     return Date(int(date[0]), int(date[1]), int(date[2]))
Esempio n. 15
0
 def validate_rental(self, rental, rentals):
     errors = ''
     # check if movie is available
     for existing_rental in rentals:
         if existing_rental.get_movieId() == rental.get_movieId() and existing_rental.get_returnDate() == Date(0, 0,
                                                                                                               0):
             errors += 'Movie is not available at the moment \n'
     # check if client has unreturned movies past due date
     # (rent date (of new rental) > due date (old rental); return date - empty)
     for existing_rental in rentals:
         if existing_rental.get_clientId() == rental.get_clientId() and existing_rental.get_returnDate() == Date(0,
                                                                                                                 0,
                                                                                                                 0) and existing_rental.get_dueDate() <= rental.get_rentDate():
             errors += 'Client has not returned a movie that passed the due date and can not rent another one'
             break
     if len(errors) > 0:
         raise RentingError(errors)