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
Example #21
0
 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
Example #22
0
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)
Example #23
0
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))