def test_repository_can_retrieve_movie_by_index(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(1) # Check that the movie has expected attributes assert movie.title == "Guardians of the Galaxy" assert movie.release_year == 2014 assert movie.description == "A group of intergalactic criminals are forced to work together to stop a fanatical warrior from taking control of the universe." assert movie.director == Director("James Gunn") assert movie.runtime_minutes == 121 actors = iter(movie.actors) assert next(actors) == Actor("Chris Pratt") assert next(actors) == Actor("Vin Diesel") assert next(actors) == Actor("Bradley Cooper") assert next(actors) == Actor("Zoe Saldana") # Check that the movie has the expected genre(s) assert movie.is_classified_as(Genre("Action")) assert movie.is_classified_as(Genre("Adventure")) assert movie.is_classified_as(Genre("Sci-Fi")) # Check that the movie has the correct reviews assert movie.number_of_reviews == 3 review_1 = [review for review in movie.reviews if review.review_text == "This movie is great!"][0] review_2 = [review for review in movie.reviews if review.review_text == "This movie is awesome"][0] assert review_1.review_author.username == "fmercury" assert review_2.review_author.username == "thorke"
def test_repository_can_suggest_desired_movies_to_a_user(session_factory): repo = SqlAlchemyRepository(session_factory) username = "******" suggestions = repo.get_suggestion_for_user(username=username) assert len(suggestions) == 1 assert repo.get_movie_by_index(1) in suggestions
def test_repository_can_get_expected_movie_genres(session_factory): repo = SqlAlchemyRepository(session_factory) movie_genres = iter(repo.get_movie_genres(repo.get_movie_by_index(10))) assert next(movie_genres) == Genre("Adventure") assert next(movie_genres) == Genre("Drama") assert next(movie_genres) == Genre("Romance") with pytest.raises(StopIteration): assert repr(next(movie_genres)) == StopIteration
def test_repository_can_get_reviews_from_a_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie_reviews = iter(repo.get_movie_reviews(repo.get_movie_by_index(1))) assert next(movie_reviews).review_text == "This movie is great!" assert next(movie_reviews).review_text == "This movie is awesome" assert next(movie_reviews).review_text == "Love it!" with pytest.raises(StopIteration): assert repr(next(movie_reviews).review_text) == StopIteration
def test_repository_can_get_a_list_of_genres_based_on_a_users_reviewed_movies(session_factory): repo = SqlAlchemyRepository(session_factory) guardian_of_the_galaxy = repo.get_movie_by_index(1) reviewed_movies = [guardian_of_the_galaxy] genre_list = repo.get_user_interested_genre_from_reviewed_movies(reviewed_movies) assert len(genre_list) == 3 assert genre_list[0].genre_name == "Action" assert genre_list[1].genre_name == "Adventure" assert genre_list[2].genre_name == "Sci-Fi"
def test_repository_can_get_a_list_of_actors_of_a_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(1) list_of_actors = list(repo.get_movie_actors(movie)) assert Actor('Chris Pratt') in list_of_actors assert Actor('Vin Diesel') in list_of_actors assert Actor('Bradley Cooper') in list_of_actors assert Actor('Zoe Saldana') in list_of_actors assert Actor('Fake Actor') not in list_of_actors
def test_repository_can_add_a_review(session_factory): repo = SqlAlchemyRepository(session_factory) user = repo.get_user('thorke') movie = repo.get_movie_by_index(10) review = Review(user=user, movie=movie, review_text='Great!', rating=10, timestamp=date.today()) assert repo.get_total_number_of_reviews() == 4 assert review in repo.get_movie_reviews(movie) assert review in repo.get_user_reviews(user)
def test_repository_does_not_add_a_review_without_a_movie_properly_attached(session_factory): repo = SqlAlchemyRepository(session_factory) user = repo.get_user('thorke') movie = repo.get_movie_by_index(1) review = Review(user=user, movie=None, review_text="Awesome!", rating=10, timestamp=date.today()) with pytest.raises(RepositoryException): # Exception expected because the Review doesn't refer to the Movie repo.add_review(review)
def test_repository_does_not_add_a_review_without_a_user(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(3) review = Review(user=None, movie=movie, review_text="testing", rating=6, timestamp=date.today()) with pytest.raises(RepositoryException): repo.add_review(review)
def test_repository_can_get_the_release_year_of_a_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(10) assert 2016 == repo.get_movie_release_year(movie)
def test_repository_returns_none_when_there_are_no_next_movies(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(3) next_year = repo.get_release_year_of_next_movie(movie) assert next_year is None
def test_repository_returns_release_year_of_next_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(1) next_year = repo.get_release_year_of_next_movie(movie) assert next_year == 2016 # 2015 if using the full 1000 movies
def test_repository_returns_release_year_of_previous_movie(session_factory): repo = SqlAlchemyRepository(session_factory) movie = repo.get_movie_by_index(1) previous_year = repo.get_release_year_of_previous_movie(movie) assert previous_year == 2012 # 2013 for 1000 movies