def setUp(self): unittest.TestCase.setUp(self) undoController = UndoController() self.rentalList = Repository() self.bookList = Repository() self.clientList = Repository() self.rentalList.add( Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "")) self.rentalList.add( Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "")) self.bookList.add(Book(0, "book0", "desc0", "author0")) self.bookList.add(Book(1, "book1", "desc1", "author1")) self.bookList.add(Book(2, "book2", "desc2", "author2")) self.clientList.add(Client(0, "name0")) self.clientList.add(Client(1, "name1")) self.clientList.add(Client(2, "name2")) self.rentalController = RentalController(self.rentalList, self.bookList, self.clientList, undoController) self.bookController = BookController(self.bookList, undoController, self.rentalController) self.clientController = ClientController(self.clientList, undoController, self.rentalController)
def testAddRental(self): rentalDate = datetime.datetime.now().date() self.rentalController.addRental(2, 2, 1) self.assertEqual(self.rentalList.getAll(), [ Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""), Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), ""), Rental(2, 2, 1, rentalDate, rentalDate + datetime.timedelta(days=10), "") ]) try: self.rentalController.addRental( Rental(100, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'))) self.rentalController.addRental( Rental(2, 200, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'))) except Exception: pass
def __loadFromFile(self): try: f = open(self.__f_name, "r") line = f.readline().strip() while line != "": attrs = line.split(',') attrs[3].strip(' ') attrs[3] = attrs[3].split('-') attrs[4].strip(' ') attrs[4] = attrs[4].split('-') attrs[5].strip(' ') if not attrs[5] == " False": attrs[5] = attrs[5].split('-') b = Rental(int(attrs[0]), int(attrs[1]), int(attrs[2]), date(int(attrs[3][0]), int(attrs[3][1]), int(attrs[3][2])), date(int(attrs[4][0]), int(attrs[4][1]), int(attrs[4][2])), date(int(attrs[5][0]), int(attrs[5][1]), int(attrs[5][2]))) else: b = Rental(int(attrs[0]), int(attrs[1]), int(attrs[2]), date(int(attrs[3][0]), int(attrs[3][1]), int(attrs[3][2])), date(int(attrs[4][0]), int(attrs[4][1]), int(attrs[4][2])), False) Repository.add(self, b) line = f.readline().strip() except IOError: raise RepositoryException("Can't load data from file " + self.__f_name + "!") f.close()
def _initRentals(self): List = [] List.append(Rental("1", "1", "1", Date(19, 10, 2019), Date(21, 11, 2019))) List.append(Rental("2", "2", "3", Date(17, 11, 2019), Date(18, 11, 2019))) List.append(Rental("3", "3", "5", Date(15, 6, 2015), Date(12, 12, 2020))) List.append(Rental("4", "4", "7", Date(2, 6, 2000), Date(2, 6, 2020))) List.append(Rental("5", "5", "9", Date(6, 11, 2019), Date(6, 12, 2019))) return List
def setUp(self): self.rentalsList = RentalController(False) r1 = Rental(90, 106, 10, None, datetime(2018, 3, 10), None) r2 = Rental(91, 100, 11) r3 = Rental(92, 106, 12) self.rentalsList.add(r1) self.rentalsList.add(r2) self.rentalsList.add(r3)
def setUp(self): new_release_movie = Movie("新作", NewReleasePrice()) children_movie = Movie("子供", ChildrenPrice()) regular_movie = Movie("一般", RegularPrice()) self.new_release = Rental(new_release_movie, 3) self.children = Rental(children_movie, 2) self.regular = Rental(regular_movie, 1)
def rent(self, rentalId, clientId, movieId, n, client_repo, movie_repo): """ Creates a new rental with the given parameters The function checks if the movie is available (either has not been rented or the return dat is set != None Takes the number of days for the rental and uses it to create a due_date """ returned_date = None # None # fa-l input cu numarul de zile rented_date = datetime.now() due_date = datetime.now() + timedelta(days=n) print(clientId, movieId, client_repo.get_position(clientId)) if client_repo.find_by_id(clientId): if movie_repo.find_by_id(movieId) == True: client = client_repo[client_repo.get_position(clientId)] movie = movie_repo[movie_repo.get_position(movieId)] print("The Client:", client.name, "rented the movie: ", movie.title, " ") rental = Rental(rentalId, movie.id, client.id, rented_date, due_date, returned_date) undo = FunctionCall(self.remove_by_clientId, self.__rentalList.size() - 1) redo = FunctionCall(self.add, rental) op = Operation(undo, redo) self.__undo_controller.addOperation(op) self.__rentalList.add(rental)
def testInitRentals(repo): for i in range(0, 10): repo.add( Rental( i, i, i, datetime.datetime.now().date(), datetime.datetime.now().date() + datetime.timedelta(days=10), datetime.datetime(2017, 12, 1).date())) for i in range(10, 20): repo.add( Rental( i, i - 10, i - 10, datetime.datetime(2017, 4, 27).date(), datetime.datetime(2017, 4, 27).date() + datetime.timedelta(days=10), ""))
def updateRental(self, id, bookId, clientId, rentedDate, dueDate, returnedDate, recordForUndo=True): """ Updates the rental with a given id with the given data """ rental = Rental(id, bookId, clientId, rentedDate, dueDate, returnedDate) oldRental = copy.deepcopy(self.getRentalById(id)) index = self.getIndexById(oldRental.getId()) self._rentalRepo.update(index, rental) if recordForUndo == True: undo = FunctionCall(self.updateRental, oldRental.getId(), oldRental.getBookId(), oldRental.getClientId(), oldRental.getRentedDate(), oldRental.getDueDate(), oldRental.getReturnedDate(), False) redo = FunctionCall(self.updateRental, id, bookId, clientId, rentedDate, dueDate, returnedDate, False) operation = Operation(redo, undo) self._undoController.recordOperation(operation) return oldRental
def _addRental(self, rentalId, movieId, clientId, dueDate, U=""): if self._userOk(clientId) and self._movieOk(movieId): self._rentals.append(Rental(rentalId, movieId, clientId, self._globalDate, dueDate)) if U != "U": self._stack.append(StackObject("self._removeRental", [rentalId])) self._helpStack.append(StackObject("self._addRental", [rentalId, movieId, clientId, dueDate])) self._redoStack.clear()
def test_setGet(self): r = Rental(1, 4, 2, date(2017, 12, 5), date(2017, 12, 5) + timedelta(days=10), False) self.assertTrue(r.dueDate == date(2017, 12, 15)) r.clientId = 10 self.assertTrue(r.clientId == 10)
def testRemoveRentalByBookId(self): self.rentalController.removeRentalByBookId(0) self.assertEqual(self.rentalList.getAll(), [ Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "") ])
def _load_file(self): try: f = open(self.file_name, 'r') line = f.readline() while line != '': tok = line.split(",") rented_date = tok[3].split('-') rent_year = rented_date[0] rent_month = rented_date[1] rent_day = rented_date[2] rented_date = date(int(rent_year), int(rent_month), int(rent_day)) due_date = tok[4].split('-') due_year = due_date[0] due_month = due_date[1] due_day = due_date[2] due_date = date(int(due_year), int(due_month), int(due_day)) if tok[5] == "None": rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]), rented_date, due_date, tok[5]) else: returned_date = tok[4].split('-') returned_year = returned_date[0] returned_month = returned_date[1] returned_day = returned_date[2] returned_date = date(int(returned_year), int(returned_month), int(returned_day)) rental = Rental(int(tok[0]), int(tok[1]), int(tok[2]), rented_date, due_date, returned_date) Rental_Repository._add(self, rental) line = f.readline() except IOError as e: raise Exception("cannot load file - " + str(e)) finally: f.close()
def testReturnBook(self): with self.assertRaises(Exception): self.rentalController.returnBook(100) self.rentalController.returnBook(0) self.assertEqual( self.rentalList.get(0), Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), datetime.datetime.now().date()))
def returnBook(self, args, recForUndo = True): r = Rental(int(args[0]), 1, 1, date.today(), date.today(), False) r = self._repo.find(r) old_r = deepcopy(self._repo.find(r)) self._validator.rentalValidator(r) r.retDate = date.today() self._repo.upd(r) if recForUndo == True: undo = FunctionCall(self.updateRental, [old_r.id, old_r.bookId, old_r.clientId, old_r.renDate, old_r.dueDate, old_r.retDate], False) redo = FunctionCall(self.updateRental, [r.id, r.bookId, r.clientId, r.renDate, r.dueDate, r.retDate], False) operation = Operation(redo, undo) self._undo_ctrl.recordOp(operation)
def create_statement(self): new_release_movie = Movie("新作", NewReleasePrice()) children_movie = Movie("子供", ChildrenPrice()) regular_movie = Movie("一般", RegularPrice()) new_release = Rental(new_release_movie, 3) children = Rental(children_movie, 2) regular = Rental(regular_movie, 1) customer = Customer("山田") customer.add_rental(new_release) customer.add_rental(children) customer.add_rental(regular) return customer
def setUp(self): unittest.TestCase.setUp(self) self.rentalList = MyList() self.bookList = MyList() self.clientList = MyList() self.rentalList.append( Rental(0, 0, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "")) self.rentalList.append( Rental(1, 1, 1, datetime.datetime.strptime("2017-10-10", '%Y-%m-%d'), datetime.datetime.strptime("2017-10-20", '%Y-%m-%d'), "")) self.bookList.append(Book(0, "book0", "desc0", "author1")) self.bookList.append(Book(1, "book1", "desc1", "author0")) self.bookList.append(Book(2, "book2", "desc2", "author2")) self.clientList.append(Client(0, "name1")) self.clientList.append(Client(1, "name0")) self.clientList.append(Client(2, "name2"))
def rent(self, movie_title, CNP, rented_date=None): """ Make client identified by CNP rent a movie identified by movie_title, today Args: movie_title(str): title of the movie to be rented CNP(str): CNP of the client that rents rented_date(datetime.time): date when movie was rented by client Raises: ValueError: if movie is already rented if client didn't return a rented movie if client has a movie past due date """ self.__validator.validate_title(movie_title) movie_title = self.__formatter.format_title(movie_title) movie = self.__movie_repository.find(movie_title) self.__validator.validate_CNP(CNP) CNP = self.__formatter.format_CNP(CNP) client = self.__client_repository.find(CNP) rentals = self.__repository.get_all() for rental in rentals: if rental.movie == movie and rental.returned_date == None: raise ValueError("Filmul a fost deja inchiriat") elif rental.client == client and rental.returned_date == None: raise ValueError("Clientul nu a adus un film inchiriat") elif rental.client == client and rental.due_date < rental.returned_date: raise ValueError( "Clientul a intarziat cu returnarea unui film") if rented_date == None: self.__repository.add(Rental(movie, client)) else: self.__repository.add( Rental(movie, client, rented_date=rented_date))
def testRent(): b_repo = testBook() c_repo = testClient() r_repo = Repository() ctrl = Controller(b_repo, c_repo, r_repo) ctrl.addRental(["1", "3", "12"]) try: ctrl.addRental(["2", "4", "42"]) except LibraryException: pass rentals = r_repo.getAll() assert(rentals[0] == Rental(1, 4, 12, date.today(), date.today() + timedelta(days=10), False))
def addRental(self, args): if self.avlBook(int(args[1])): b = Book(int(args[1]), "default", "default", "default") try: self.__book_repo.find(b) except LibraryException: raise LibraryException("Inexistent book!") c = Client(int(args[2]), "default") try: self.__client_repo.find(c) except LibraryException: raise LibraryException("Unregistred client!") r = Rental(int(args[0]), int(args[1]), int(args[2]), date.today(), date.today() + timedelta(days=10), False) self._validator.rentalValidator(r) self._repo.add(r) else: raise LibraryException("This book is not available!")
def _loadFromFile(self): try: f = open(self._fName, "r") except IOError: print("ERROR while trying to open " + self._fName) ID = f.readline().strip() self._nextID = ID ln = f.readline().strip() while ln != "": t = ln.split(" @ ") st = datetime.strptime(t[3], "%Y-%m-%d").date() end = datetime.strptime(t[4], "%Y-%m-%d").date() rental = Rental(int(t[0]), int(t[1]), int(t[2]), st, end, active=t[5]) RentalRepository.add(self, rental) ln = f.readline().strip() f.close()
def test_search(self): book_repo = Repository() client_repo = Repository() rental_repo = Repository() book_repo.add(Book(1, "Iona", "teatru postbelic", "Marin Sorescu")) book_repo.add(Book(2, "Amintiri din copilarie", "proza", "Ion Creanga")) book_repo.add(Book(3, "1984", "roman", "George Orwell")) st_ctrl = StatisticsController(book_repo, client_repo, rental_repo) l = [] st_ctrl.search(book_repo, "author", "re", l) self.assertTrue(len(l) == 2) rental_repo.add( Rental(2, 2, 10, date.today(), date.today() + timedelta(days=10), False)) most_rented = st_ctrl.mostRentedBooks() self.assertTrue( most_rented[0] == [Book(2, "Amintiri din copilarie", "proza", "Ion Creanga"), 1])
def returnBook(self, args): r = Rental(int(args[0]), 1, 1, date.today(), date.today(), False) r = self.__rental_repo.find(r) self.__validator.rentalValidator(r) r.retDate = date.today()
def validation(self, id, bookId, clientId, rentalDate, dueDate, returnedDate): if self.rentalValidation(bookId, clientId): return Rental(id, bookId, clientId, rentalDate, dueDate, returnedDate)
def create_rental(self, rentalID , movieId , clientId , rented_date = None, due_date = None, returned_date = None ): rent = Rental( rentalID , movieId , clientId , rented_date, due_date , returned_date) self._add(rent)
def updateRental(self, args, recForUndo = True): r = Rental(int(args[0]), int(args[1]), int(args[2]), args[3], args[4], args[5]) self._validator.rentalValidator(r) self._repo.upd(r)
def _add_rental(self, clientID, movieID): rental = Rental(clientID, movieID) self._rental_rep.add(rental) return rental
def initialise(self): r1 = Rental(1, 100, 10, datetime(2018, 3, 10), datetime(2018, 3, 20), None) r2 = Rental(2, 101, 11, datetime(2018, 4, 12), datetime(2018, 12, 20), None) r3 = Rental(3, 102, 12, datetime(2018, 5, 12), datetime(2018, 12, 20), datetime(2018, 10, 22)) r4 = Rental(4, 103, 12, datetime(2018, 10, 24), datetime(2018, 11, 20), None) r5 = Rental(5, 110, 21, datetime(2018, 11, 22), datetime(2018, 12, 20), None) r6 = Rental(6, 111, 26, datetime(2018, 11, 25), datetime(2018, 11, 26), None) r7 = Rental(7, 112, 28, datetime(2018, 11, 24), datetime(2018, 11, 25), datetime(2018, 11, 26)) r8 = Rental(8, 113, 20, datetime(2018, 11, 25), datetime(2018, 11, 27), datetime(2018, 11, 26)) r9 = Rental(9, 102, 29, datetime(2018, 10, 10), datetime(2018, 11, 11), datetime(2018, 11, 26)) r10 = Rental(10, 130, 20, datetime(2018, 4, 25), datetime(2018, 5, 27), datetime(2018, 5, 26)) r11 = Rental(11, 112, 22, datetime(2018, 9, 4), datetime(2018, 11, 5), None) r12 = Rental(12, 113, 20, datetime(2018, 10, 30), datetime(2018, 11, 2), datetime(2018, 11, 2)) r13 = Rental(14, 105, 16, datetime(2018, 10, 29), datetime(2018, 11, 29), None) self.add(r1) self.add(r2) self.add(r3) self.add(r4) self.add(r5) self.add(r6) self.add(r7) self.add(r8) self.add(r9) self.add(r10) self.add(r11) self.add(r12) self.add(r13)
def updateRental(self, args): r = Rental(int(args[0]), int(args[1]), int(args[2]), args[3], args[4], args[5]) self.__validator.rentalValidator(r) self.__rental_repo.upd(r)