def test_repo_does_not_retrieve_movie_for_non_existent_rank(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movies = repo.get_movies_by_rank([1000, 1001])

    assert len(movies) == 1
    assert movies[0].title == 'Nine Lives'
def test_repo_can_retrieve_movie_count(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    number_of_movies = repo.get_number_of_movies()

    # Check that the query returned 1000 Movies.
    assert number_of_movies == 1000
def test_repo_can_add_genre(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    genre = Genre('Anime')
    repo.add_genre(genre)

    assert genre in repo.get_genres()
def test_repo_can_add_actor(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    actor = Actor('Scarlet')
    repo.add_actor(actor)

    assert actor == repo.get_actor('Scarlet')
def test_repo_can_add_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    director = Director('Barazza')
    repo.add_director(director)

    assert director == repo.get_director('Barazza')
def test_repository_can_retrieve_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_movie(1)

    # Check that the movie has the expected title.
    assert movie.title == 'Prometheus'
def test_repo_does_not_add_review_without_a_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_movie(0)
    review = Review(movie, "good", 7)

    with pytest.raises(RepositoryException):
        repo.add_review(review)
def test_repo_can_get_movies_by_ranks(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movies = repo.get_movies_by_rank([1, 2, 3])

    assert len(movies) == 3
    assert movies[0].title == 'Guardians of the Galaxy'
    assert movies[1].title == 'Prometheus'
    assert movies[2].title == 'Split'
def test_repo_can_retrieve_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_movie(1)

    # Check that the Movie has the expected title.
    assert movie.title == 'Guardians of the Galaxy'

    # Check that the Movie is reviewed as expected.
    user = repo.get_user('nton939')
    assert user.reviews[
        0].review_text == 'GOTG is my new favourite movie of all time!'

    # Check that the Movie has the expected genres.
    assert movie.genres == [
        Genre('Action'), Genre('Adventure'),
        Genre('Sci-Fi')
    ]
def test_repo_can_add_user(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    user = User('Artemis', '123456789')
    repo.add_user(user)

    repo.add_user(User('Jaeyun', '123456789'))

    user2 = repo.get_user('artemis')

    assert user2 == user and user2 is user
def test_can_retrieve_movie_and_add_review_to_it(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    # Fetch Movie and User.
    movie = repo.get_movie(1000)
    user = repo.get_user('nton939')

    # Create a new Review, connecting it to the Movie and User.
    review = Review(movie, "So good!", 9)
    user.add_review(review)
    repo.add_review(review)

    fetched_reviews = repo.get_reviews()
    fetched_user = repo.get_user('nton939')
    fetched_movie = repo.get_movie(1000)

    assert review in fetched_reviews
    assert review in fetched_user.reviews
    assert fetched_reviews[1].movie == fetched_movie
def test_repo_can_add_review(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    #user = repo.get_user('nton939')
    movie = repo.get_movie(500)
    review = Review(movie, "wow!", 10)
    #user.add_review(review)

    repo.add_review(review)

    assert review in repo.get_reviews()
def test_repo_can_add_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    number_of_movies = repo.get_number_of_movies()

    new_movie_id = number_of_movies + 1

    movie = Movie("WOW", 2020)
    movie.rank = new_movie_id
    movie.description = "This is the best movie in the world."
    movie.director = Director("Barraza")
    movie.runtime_minutes = 100
    movie.rating = 100
    movie.votes = 100
    movie.revenue = 100
    movie.metascore = 100
    repo.add_movie(movie)

    assert repo.get_movie(new_movie_id) == movie
def test_repo_does_not_retrieve_non_existent_actor(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    actor = repo.get_actor('Orion')
    assert actor is None
def test_repo_can_get_first_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_first_movie()
    assert movie.title == 'Guardians of the Galaxy'
def test_repo_can_retrieve_actor(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    actor = repo.get_actor('Vin Diesel')
    assert actor == Actor('Vin Diesel')
def test_repo_can_get_last_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_last_movie()
    assert movie.title == 'Nine Lives'
def test_repo_can_retrieve_genres(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    genres = repo.get_genres()

    assert len(genres) == 20
def test_repo_can_retrieve_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    director = repo.get_director('James Gunn')
    assert director == Director('James Gunn')
def test_repo_returns_an_empty_list_for_non_existent_genre(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie_ranks = repo.get_movie_ranks_for_genre('Anime')

    assert len(movie_ranks) == 0
def test_repo_does_not_retrieve_non_existent_user(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    user = repo.get_user('Cross')
    assert user is None
def test_repo_can_retrieve_user(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    user = repo.get_user('nton939')
    assert user == User('nton939', 'nton939Password')
def test_repo_does_not_retrieve_non_existent_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    director = repo.get_director('Xull')
    assert director is None
def test_repo_does_not_retrieve_non_existent_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie = repo.get_movie(1001)
    assert movie is None
def test_repo_returns_an_empty_list_for_non_existent_ranks(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movies = repo.get_movies_by_rank([0, 1001])

    assert len(movies) == 0
def test_repo_can_retrieve_reviews(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    assert len(repo.get_reviews()) == 1
def test_repo_returns_movie_ranks_for_existing_genre(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    movie_ranks = repo.get_movie_ranks_for_genre('Action')

    assert len(movie_ranks) == 303