def test_show_live_reviews(simulator): user1 = User('user1_username', 'user1_password') user1_first_review = Review(user1, Movie("Star War", 2017, 1), "This is user1's first review for Star War", 9, date.fromisoformat('2020-09-21')) user1_second_review = Review(user1, Movie("Star War", 2017, 2), "This is user1's second review for Star War", 9, date.fromisoformat('2020-09-21')) user1_another_review = Review(user1, Movie("Hunger Game", 2016, 3), "This is user1's review for Hunger game", 8, date.fromisoformat('2020-09-21')) user1.add_review(user1_first_review) user1.add_review(user1_second_review) user1.add_review(user1_another_review) user2 = User('user2_username', 'user2_password') user2_first_review = Review(user2, Movie("Star War", 2017, 4), "This is user2's first review for Star War", 6, date.fromisoformat('2020-09-21')) user2.add_review(user2_first_review) simulator.add_user(user1) simulator.add_user(user2) simulator.retrieve_review() assert simulator.show_live_reviews() == "Live Reviews for <Movie Star War, 2017>:\n<User user1_username> ---> This is user1's first review " \ "for Star War\n" + "<User user1_username> ---> This is user1's second review for Star War\n" \ + "<User user2_username> ---> This is user2's first review for Star War\n"
def test_watched_movies(self): user1 = User('user1', 'pw12345') movie1 = Movie("Star War", 19879, 1) movie1.set_runtime_minutes(120) user1.watch_movie(movie1) assert user1.watched_movies == [movie1] assert user1.time_spent_watching_movies_minutes == 120
def test_adding_reviews(simulator): user1 = User('user1_username', 'user1_password') user1_first_review = Review(user1, Movie("Star War", 2017, 1), "This is user1's first review for Star War", 9, date.fromisoformat('2020-09-21')) user1_second_review = Review(user1, Movie("Star War", 2017, 1), "This is user1's second review for Star War", 9, date.fromisoformat('2020-09-21')) user1_another_review = Review(user1, Movie("Hunger Game", 2016, 2), "This is user1's review for Hunger game", 8, date.fromisoformat('2020-09-21')) user1.add_review(user1_first_review) user1.add_review(user1_second_review) user1.add_review(user1_another_review) user2 = User('user2_username', 'user2_password') user2_first_review = Review(user2, Movie("Star War", 2017, 1), "This is user2's first review for Star War", 6, date.fromisoformat('2020-09-21')) user2.add_review(user2_first_review) simulator.add_user(user1) simulator.add_user(user2) simulator.retrieve_review() assert simulator.num_of_reviews == 3
def test_print_schedule(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) assert watchlist.print_schedule() == "You have scheduled the following movies to watch in the future: \nMovie: Ice Age, 2002 is schedule on 1/9/2020\nMovie: Moana, " \ "2016 is schedule on 3/9/2020\nMovie: Guardians of the Galaxy, 2012 is schedule on 15/9/2020\n"
def test_size_after_adding_movies(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) assert watchlist.size() == 3 assert len(watchlist.get_schedule()) == 3
def test_first_movie_in_watchlist(watchlist): assert watchlist.first_movie_in_watchlist() is None watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) assert repr(watchlist.first_movie_in_watchlist()) == "<Movie Moana, 2016>"
def test_release_year(self): movie1 = Movie("Moana", 2016, 1) movie2 = Movie("Apple", "abc", 3) movie3 = Movie("Wrong", 1800, 2) assert movie1.release_year == 2016 assert movie2.release_year is None assert movie3.release_year is None
def test_reper(simulator): user1 = User('user1_username', 'user1_password') user1_first_review = Review(user1, Movie("Star War", 2017, 2), "This is user1's first review for Star War", 9, date.fromisoformat('2020-09-21')) user1_second_review = Review(user1, Movie("Star War", 2017, 1), "This is user1's second review for Star War", 9, date.fromisoformat('2020-09-21')) user1_another_review = Review(user1, Movie("Hunger Game", 2016, 3), "This is user1's review for Hunger game", 8, date.fromisoformat('2020-09-21')) user1.add_review(user1_first_review) user1.add_review(user1_second_review) user1.add_review(user1_another_review) user2 = User('user2_username', 'user2_password') user2_first_review = Review(user2, Movie("Star War", 2017, 1), "This is user2's first review for Star War", 6, date.fromisoformat('2020-09-21')) user2.add_review(user2_first_review) simulator.add_user(user1) simulator.add_user(user2) simulator.retrieve_review() assert repr( simulator ) == "Movie Watching Simulation - Star War : 2017\nNumber of users watching: 2\nNumber of reviews received: 3"
def test_add_actors(self): movie1 = Movie("Moana", 2016, 3) actors = [Actor("Auli'i Cravalho"), Actor("Dwayne Johnson"), Actor("Rachel House"), Actor("Temuera Morrison")] i = iter(movie1.actors) for actor in actors: movie1.add_actor(actor) next(i) == actor
def test_select_movie_to_watch(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) assert repr(watchlist.select_movie_to_watch(0)) == "<Movie Moana, 2016>" assert watchlist.select_movie_to_watch(-1) is None assert watchlist.select_movie_to_watch(3) is None
def test_lt(self): movie1 = Movie("Moana", 2016, 1) movie2 = Movie("Apple", 2019, 2) movie3 = Movie("Apple", 2020, 3) movie4 = Movie("Apple", 2016, 4) assert movie1.__lt__(movie2) == True assert movie2.__lt__(movie1) == False assert movie2.__lt__(movie3) == True assert movie4.__lt__(movie1) == True
def test_add_review(self): user1 = User('user1', 'pw12345') movie1 = Movie("Star War", 19879, 1) movie1.set_runtime_minutes(120) user1.watch_movie(movie1) review = Review(user1, movie1, "This is a great movie!", 9, date.fromisoformat('2020-03-15')) user1.add_review(review) assert user1.reviews == [review]
def test_adding_users_to_movie_watching_simulatior(simulator): user1 = User('user1_username', 'user1_password') user2 = User('user2_username', 'user2_password') simulator.add_user(user1) simulator.add_user(user2) assert simulator.number_of_users_watching == 2 assert Movie("Star War", 2017, 1) in user1.watched_movies assert Movie("Star War", 2017, 1) in user2.watched_movies
def test_iter_and_next(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) i = iter(watchlist) assert repr(next(i)) == "<Movie Moana, 2016>" assert repr(next(i)) == "<Movie Ice Age, 2002>" assert repr(next(i)) == "<Movie Guardians of the Galaxy, 2012>" with pytest.raises(StopIteration): assert repr(next(i)) == StopIteration
def test_add_movie(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) assert watchlist.size() == 2 assert len(watchlist.get_schedule()) == 2 watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) assert watchlist.size() == 2 assert len(watchlist.get_schedule()) == 2 watchlist.add_movie(User("username", "password"), datetime( 2020, 9, 4)) #test if the function handles none Movie type object assert watchlist.size() == 2 assert len(watchlist.get_schedule()) == 2
def test_remove_movie(watchlist): watchlist.add_movie(Movie("Moana", 2016, 1), datetime(2020, 9, 3)) watchlist.add_movie(Movie("Ice Age", 2002, 2), datetime(2020, 9, 1)) watchlist.add_movie(Movie("Guardians of the Galaxy", 2012, 3), datetime(2020, 9, 15)) watchlist.remove_movie(Movie("Ice Age", 2002, 2)) assert watchlist.size() == 2 assert len(watchlist.get_schedule()) == 2 watchlist.remove_movie( Movie("Star War", 2017, 4)) #remove an movie that doesn't exist in the watchlist assert watchlist.size() == 2 assert len(watchlist.get_schedule()) == 2
def test_remove_actor(self): movie1 = Movie("Moana", 2016, 2) movie1.add_actor(Actor("Some Actor")) assert movie1.number_of_actors == 1 movie1.remove_actor(Actor("Some Actor")) assert movie1.number_of_actors == 0 movie1.remove_actor(Actor("Some Actor"))
def make_movie(): movie = Movie('Avengers: Endgame', 2019) movie.set_director(Director("Anthony Russo")) movie.set_description( "After Thanos, an intergalactic warlord, disintegrates half of the universe, the Avengers must reunite and assemble again to reinvigorate their trounced allies and restore balance." ) movie.set_runtime_minutes(181) return movie
def test_repository_can_add_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie = Movie('Avengers : End Game', 2019) repo.add_movie(movie) assert repo.get_movie("Avengers : End Game", 2019) == movie and repo.get_movie("Avengers : End Game", 2019) is movie
def test_movie_runtime_minutes(self): movie1 = Movie("Moana", 2016, 1) movie1.set_runtime_minutes(107) assert movie1.runtime_minutes == 107 with pytest.raises(ValueError): movie1 = Movie("Kong", 2016, 3) movie1.set_runtime_minutes(-6) assert movie1.runtime_minutes == ValueError
def test_init(self): user = User("username", "password") movie = Movie("Moana", 2016, 1) review_text = "This movie was very enjoyable." rating = 8 review = Review(user, movie, review_text, rating, date.fromisoformat('2020-03-15')) assert review.review_author == user assert repr(review.movie) == "<Movie Moana, 2016>" assert review.review_text == "This movie was very enjoyable." assert review.rating == 8
def load_movies_actors_directors_genre_description(data_path: str, repo: MemoryRepository): genres = dict() actors = dict() directors = dict() for data_row in read_csv_file(os.path.join(data_path, "movies.csv")): movie_index = int(data_row[0]) title = data_row[1] try: movie_revenue = float(data_row[10]) except ValueError: movie_revenue = 0 list_of_genre_names = data_row[2].split(",") list_of_genres = [Genre(genre_name) for genre_name in list_of_genre_names] # can have duplicate movie_description = data_row[3] director = Director(data_row[4]) # can have duplicate list_of_actor_names = data_row[5].split(",") list_of_actor_names = [name.strip() for name in list_of_actor_names] list_of_actors = [Actor(actor_full_name) for actor_full_name in list_of_actor_names] # can have duplicate release_year = int(data_row[6]) runtime = int(data_row[7]) # Create Movie object movie = Movie( title=title, release_year=release_year, id=movie_index ) movie.set_revenue(revenue=movie_revenue) # Add movie to repo repo.add_movie(movie) # Add any new genres to repo for genre in list_of_genres: if genre not in genres.keys(): genres[genre] = list() genres[genre].append(movie_index) for actor in list_of_actors: if actor not in actors.keys(): actors[actor] = list() actors[actor].append(movie_index) # Add any new directors to dict if director not in directors: directors[director] = list() directors[director].append(movie_index) # Connect the current movie with its attributes add_movie_attributes(movie=movie, list_of_genres=list_of_genres, description=movie_description, list_of_actors=list_of_actors, director=director, runtime=runtime) # Associate Genres with Movies and add them to the repository for genre in genres.keys(): for current_movie_index in genres[genre]: movie = repo.get_movie_by_index(current_movie_index) movie.add_genre(genre) genre.add_Movie(movie) repo.add_genre(genre) # Associate Actors with Movies and add them to the repository for actor in actors.keys(): for current_movie_index in actors[actor]: movie = repo.get_movie_by_index(current_movie_index) movie.add_actor(actor) actor.add_played_movies(movie) repo.add_actor(actor) # Associate Directors with Movies and add them to the repositor for director in directors.keys(): for current_movie_index in directors[director]: movie = repo.get_movie_by_index(current_movie_index) movie.set_director(director) director.add_directed_movies(movie) repo.add_director(director)
def dict_to_movie(dict): movie = Movie(dict['title'], dict['release_year'], dict['id']) # There is no actors, director, genres, reviews, nor runtime_minutes return movie
def read_csv_file(self): duplicated_genre = [] duplicated_actors = [] with open(self.__file_name, mode='r', encoding='utf-8-sig') as csvfile: movie_file_reader = csv.DictReader(csvfile) for row in movie_file_reader: # Append to the movie data set title = row['Title'] year = int(row['Year']) movie = Movie(title, year, 4) if (movie not in self.__dataset_of_movies): self.__dataset_of_movies.append(movie) # Store potential duplicated actors duplicated_actors.append( row['Actors'].split(',')) # This is a list of list # Store unique directors director = Director(row['Director']) if director not in self.__dataset_of_directors: self.__dataset_of_directors.append(director) # Store potential duplicated genres duplicated_genre.append(row['Genre'].split(',')) #Store description description = row['Description'] self.__dataset_of_description.append(description) # Store runtime runtime = row['Runtime (Minutes)'] try: runtime = int(runtime) self.__dataset_of_runtime.append(runtime) except ValueError: continue # Store ratings rating = row['Rating'] try: rating = float(rating) self.__dataset_of_ratings.append(rating) except ValueError: continue # Store votes vote = row['Votes'] try: vote = int(vote) self.__dataset_of_votes.append(vote) except ValueError: continue # Store revenue revenue = row["Revenue (Millions)"] try: revenue = float(revenue) self.__dataset_of_revenue.append(revenue) except ValueError: continue # Store Metascore meta_score = row["Metascore"] try: meta_score = float(meta_score) self.__dataset_of_metadata.append(meta_score) except ValueError: continue for actor_list in duplicated_actors: for current_actor in actor_list: current_actor = Actor(current_actor) if current_actor not in self.__dataset_of_actors: self.__dataset_of_actors.append(current_actor) for genre_list in duplicated_genre: for current_genre in genre_list: current_genre = Genre(current_genre) if current_genre not in self.__dataset_of_genres: self.__dataset_of_genres.append(current_genre)
def test_repository_can_add_movie(in_memory_repo): movie = Movie(title="Avengers : End Game", release_year=2019, id=1050) in_memory_repo.add_movie(movie) assert in_memory_repo.get_movie_by_index(1050) is movie
def test_repository_can_retrieve_an_actor(session_factory): repo = SqlAlchemyRepository(session_factory) actor = repo.get_actor("Chris Pratt") assert actor == Actor("Chris Pratt") assert Movie("Guardians of the Galaxy", 2014) in actor.played_movies
def test_director(self): movie1 = Movie("Moana", 2016, 1) movie1.set_director(Director("Ron Clements")) assert repr(movie1.director) == "<Director Ron Clements>"
def test_repository_can_retrieve_a_director(session_factory): repo = SqlAlchemyRepository(session_factory) director = repo.get_director('Sean Foley') assert director == Director('Sean Foley') assert Movie('Mindhorn', 2016) in director.directed_movies
def test_init(self): movie1 = Movie("Moana", 2016, 4) assert repr(movie1) == "<Movie Moana, 2016>"
def test_hash_function(self): movie1 = Movie("Moana", 2016, 1) assert movie1.__hash__() == hash(("Moana", 2016))