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
def test_repository_can_get_the_oldest_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    movie = repo.get_oldest_movie()
    assert movie.release_year == 2012
    assert movie.title == "Prometheus"
def test_repository_does_not_retrieve_a_non_existent_user(session_factory):
    repo = SqlAlchemyRepository(session_factory)

    user = repo.get_user('prince')
    assert user is None
def test_repository_returns_a_list_of_movies_based_on_actor_and_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    list_of_movies = repo.search_movies_by_actor_and_director('Ryan Gosling', 'Damien Chazelle')
    assert len(list_of_movies) == 1
    assert list_of_movies[0].title == 'La La Land'
def test_repository_can_get_the_latest_movie(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    movie = repo.get_latest_movie()
    assert movie.title == 'Split'
    assert movie.release_year == 2016
def test_repository_returns_empty_list_of_movie_for_non_existent_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    list_of_movies = repo.get_movies_directed_by_a_director('Fake Director')
    assert len(list_of_movies) == 0
def test_repository_can_retrieve_a_user(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    user = repo.get_user('fmercury')
    assert user == User('fmercury', '8734gfe2058v')
def test_repository_returns_a_list_of_movies_directed_by_a_valid_director(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    list_of_movies_directed_by_James_Gunn = repo.get_movies_directed_by_a_director("James Gunn")
    assert len(list_of_movies_directed_by_James_Gunn) == 1
    assert list_of_movies_directed_by_James_Gunn[0].title == "Guardians of the Galaxy"
def test_repository_returns_an_empty_list_of_movie_for_non_existent_actor(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    list_of_movies_played_by_fake_actor = repo.get_movies_played_by_an_actor('Fake Actor')

    assert len(list_of_movies_played_by_fake_actor) == 0
def test_repository_can_check_existence_of_genre(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    assert repo.check_genre_existence(Genre("Fake Genre")) is False
    assert repo.check_genre_existence(Genre("Animation")) is True
    assert repo.check_genre_existence(Genre("Family")) is True
def test_repository_can_retrieve_correct_genre_count(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    assert repo.get_total_number_of_genres_in_repo() == 14
def test_repository_can_retrieve_a_genre(session_factory):
    repo = SqlAlchemyRepository(session_factory)
    genre = repo.get_genre('Sci-Fi')
    assert genre == Genre('Sci-Fi')
    assert Movie("Guardians of the Galaxy", 2014) in genre.classified_movies