def test_hash(): director1_hash = Director("Taika Waititi").__hash__() director2_hash = Director("Taika Waititi").__hash__() director3_hash = Director("David").__hash__() assert director1_hash == director2_hash assert director1_hash != director3_hash
def test_get_all_directors(populated_memory_repo): directors = populated_memory_repo.get_all_directors() assert sorted(directors) == sorted([ Director("James Gunn"), Director("Burr Steers"), Director("Barry Sonnenfeld"), Director("Test Director1"), Director("Test Director2") ])
def test_eq(): director1 = Director("Taika Waititi") director2 = Director("Taika Waititi") assert director1 == director2 director3 = Director("David") assert not (director1 == director3) director4 = "Taika Waititi" assert not (director1 == director4)
def test_init(): director1 = Director("Taika Waititi") assert repr(director1) == "<Director Taika Waititi>" director2 = Director("") assert director2.director_full_name is None assert repr(director2) == "<Director None>" director3 = Director(42) assert director3.director_full_name is None assert repr(director3) == "<Director None>" director4 = Director(0.2) assert director4.director_full_name is None assert repr(director4) == "<Director None>"
def test_lt(): director1 = Director("Taika Waititi") director2 = Director("Taika Waititi") assert not (director1 < director2) director3 = Director("Aaaaa") assert (director3 < director1) director4 = Director("aaaaa") assert (director3 < director4) director5 = "aaaaa" with pytest.raises(TypeError): assert not (director5 < director3)
def test_director(): movie = Movie("Sharknado", 2020) director = Director("Anthony Ferrante") movie.director = director assert movie.director == director assert repr(movie.director) == "<Director Anthony Ferrante>" movie = Movie("Sharknado", 2020) director = "Anthony Ferrante" movie.director = director assert movie.director == None
def test_populate_repo(empty_memory_repo, test_movie_file, test_user_file, test_review_file): populate_repo(empty_memory_repo, test_movie_file, test_user_file, test_review_file) # Check that movies we expect have been added to the private __movies list variable assert Movie("Guardians of the Galaxy", 2014) in empty_memory_repo._MemoryRepository__movies assert Movie("17 Again", 2009) in empty_memory_repo._MemoryRepository__movies assert Movie("Nine Lives", 2016) in empty_memory_repo._MemoryRepository__movies # Check that the movies have the expected attributes assert empty_memory_repo._MemoryRepository__movies[1].description == "A group of intergalactic criminals are forced to work together to stop a fanatical warrior from taking control of the universe." assert empty_memory_repo._MemoryRepository__movies[1].director == Director("James Gunn") assert sorted(empty_memory_repo._MemoryRepository__movies[1].actors) == sorted([Actor("Chris Pratt"), Actor("Vin Diesel"), Actor("Bradley Cooper"), Actor("Zoe Saldana")]) assert sorted(empty_memory_repo._MemoryRepository__movies[1].genres) == sorted([Genre("Action"), Genre("Adventure"), Genre("Sci-Fi")]) assert empty_memory_repo._MemoryRepository__movies[1].runtime_minutes == 121 assert empty_memory_repo._MemoryRepository__movies[1].rating == 8.1 assert empty_memory_repo._MemoryRepository__movies[1].revenue_in_millions == 333.13 assert empty_memory_repo._MemoryRepository__movies[1].metascore == 76 assert empty_memory_repo._MemoryRepository__movies[1].image_link == 'https://m.media-amazon.com/images/M/MV5BMTAwMjU5OTgxNjZeQTJeQWpwZ15BbWU4MDUxNDYxODEx._V1_SX300.jpg' assert len(empty_memory_repo._MemoryRepository__users) == 2 assert len(empty_memory_repo._MemoryRepository__reviews) == 2 assert len(empty_memory_repo._MemoryRepository__movies[0].reviews) == 2
def test_make_movie_director_association(): movie = Movie("Test", 2020) director = Director("Test") make_movie_director_association(movie, director) assert director == movie.director assert movie in director.directed_movies
def test_has_directed_movie(movie): director = Director("Taika Waititi") director.add_movie(movie) assert director.has_directed_movie(movie)
def test_add_movie(movie): director = Director("Taika Waititi") director.add_movie(movie) assert director.directed_movies == [movie]
def test_get_director(populated_memory_repo): director = populated_memory_repo.get_director("James Gunn") assert director == Director("James Gunn")
]) def test_get_movies_by_release_year(populated_memory_repo, movie): movies = populated_memory_repo.get_movies_by_release_year(movie.release_year) assert movies == [movie] def test_get_movies_by_release_year_multiple(populated_memory_repo): movies = populated_memory_repo.get_movies_by_release_year(2014) assert movies == [Movie("Guardians of the Galaxy", 2014), Movie("Test", 2014)] def test_get_movies_by_release_year_non_existent(populated_memory_repo): assert populated_memory_repo.get_movies_by_release_year(1999) == [] assert populated_memory_repo.get_movies_by_release_year("1999") == [] assert populated_memory_repo.get_movies_by_release_year(None) == [] @pytest.mark.parametrize("director", [ Director("Test1"), Director("Test2"), ]) def test_add_director(empty_memory_repo, director): empty_memory_repo.add_director(director) assert empty_memory_repo._MemoryRepository__directors[director.director_full_name] == director def test_add_incorrect_director(empty_memory_repo): empty_memory_repo.add_director("Test") empty_memory_repo.add_director(None) assert len(empty_memory_repo._MemoryRepository__directors) == 0 @pytest.mark.parametrize("actor", [ Actor("Test1"), Actor("Test2"), ])
def load_movie_file(repository: MemoryRepository, filename: str): with open(filename, mode="r", encoding="utf-8-sig") as csvfile: reader = csv.DictReader(csvfile) directors = dict() genres = dict() actors = dict() for row in reader: # Create and populate Movie object movie = Movie( title=row["Title"].strip(), release_year=int(row["Year"]) ) movie.description = row["Description"].strip() movie.runtime_minutes = int(row["Runtime (Minutes)"]) movie.rating = float(row["Rating"]) movie.votes = int(row["Votes"]) movie.revenue_in_millions = row["Revenue (Millions)"] movie.metascore = row["Metascore"] if "Image URL" in row: movie.image_link = row["Image URL"] # Add bidirectional link between director and movie director_name=row["Director"].strip() try: director = directors[director_name] except KeyError: director = Director(director_full_name=director_name) directors[director_name] = director make_movie_director_association(movie, director) # Add bidirectional link between movie and genres for name in row["Genre"].split(","): genre_name = name.strip() try: genre = genres[genre_name] except KeyError: genre = Genre(genre_name=genre_name) genres[genre_name] = genre make_movie_genre_association(movie, genre) # Add bidirectional link between actors and movies for name in row["Actors"].split(","): actor_name = name.strip() try: actor = actors[actor_name] except KeyError: actor = Actor(actor_full_name=actor_name) actors[actor_name] = actor make_movie_actor_association(movie, actor) # Add movie object to repository repository.add_movie(movie) # Add directors to repository for director in directors.values(): repository.add_director(director) # Add genres to repository for genre in genres.values(): repository.add_genre(genre) # Add actors to repository for actor in actors.values(): repository.add_actor(actor)