def test_database_repository_can_add_movie(session_factory): repo = SqlAlchemyRepository(session_factory) new_movie = Movie('Guardians of Goatboy', 1914) new_movie.genres = [Genre('Action'), Genre('Sci-Fi')] new_movie.description = 'Adventures of Space soldiers sworn to protect a boy that is also a goat.' new_movie.director = Director("Ben Span") new_movie.actors = [Actor('Chris Pratt'), Actor("Bill Clinton")] new_movie.runtime_minutes = 400 the_repos_movie_list = repo.get_movies() count = 0 for movie in the_repos_movie_list: if movie == Movie('Guardians of Goatboy', 1914): count += 1 assert count == 0 repo.add_movie(new_movie) the_repos_movie_list = repo.get_movies() count = 0 for movie in the_repos_movie_list: if movie == Movie('Guardians of Goatboy', 1914): b_movie = movie count += 1 assert count == 1 assert b_movie.description == new_movie.description assert b_movie.director == new_movie.director assert b_movie.runtime_minutes == new_movie.runtime_minutes assert len(b_movie.genres) == len(new_movie.genres) for genre in new_movie.genres: assert genre in b_movie.genres assert len(b_movie.actors) == len(new_movie.actors) for actor in new_movie.actors: assert actor in b_movie.actors
def test_database_repository_wont_add_genre_that_exists(session_factory): repo = SqlAlchemyRepository(session_factory) count = 0 the_ropos_genre_list = repo.get_genres() for gen in the_ropos_genre_list: if gen == Genre('Musical'): count += 1 assert count == 1 with pytest.raises(IntegrityError): repo.add_genre(Genre('Musical'))
def test_database_repository_can_add_genre(session_factory): repo = SqlAlchemyRepository(session_factory) count = 0 the_ropos_genre_list = repo.get_genres() for gen in the_ropos_genre_list: if gen == Genre('silly'): count += 1 assert count == 0 repo.add_genre(Genre('silly')) the_ropos_genre_list = repo.get_genres() assert Genre('silly') in the_ropos_genre_list
def test_load_movie(empty_session): movie_title = 'Passengers' genre_list = ['Adventure', 'Drama', 'Romance'] director = 'Morten Tyldum' description = 'A spacecraft traveling to a distant colony planet and transporting thousands of people has a malfunction in its sleep chambers. As a result, two passengers are awakened 90 years early.' actors = [ 'Jennifer Lawrence', 'Chris Pratt', 'Michael Sheen', 'Laurence Fishburne' ] run_time = 116 release_year = 2016 insert_movie(empty_session, movie_title, director, genre_list, actors, description, release_year, run_time) a_movie = Movie(movie_title, release_year) a_movie.actors = [Actor(name) for name in actors] a_movie.description = description a_movie.director = Director(director) a_movie.genres = [Genre(name) for name in genre_list] a_movie.runtime_minutes = run_time b_movie = empty_session.query(Movie).filter( Movie._title == 'Passengers').one() assert b_movie == a_movie assert b_movie.director == a_movie.director assert b_movie.runtime_minutes == a_movie.runtime_minutes assert a_movie.description == b_movie.description assert len(a_movie.actors) == len(b_movie.actors) assert len(a_movie.genres) == len(b_movie.genres) for genre in a_movie.genres: assert genre in b_movie.genres for actor in a_movie.actors: assert actor in b_movie.actors
def test_database_repository_wont_add_movie_that_exists(session_factory): repo = SqlAlchemyRepository(session_factory) the_ropos_movie_list = repo.get_movies() genre_str_list = 'Action,Adventure,Biography' actor_str_list = 'Charlie Hunnam, Robert Pattinson, Sienna Miller, Tom Holland' description = 'A true-life drama, centering on British explorer Col. Percival Fawcett, who disappeared while searching for a mysterious city in the Amazon in the 1920s.' director_str = 'James Gray' a_new_movie = Movie('The Lost City of Z', 2016) a_new_movie.director = Director('James Gray') a_new_movie.runtime_minutes = 141 count = 0 for gen in the_ropos_movie_list: if gen == a_new_movie: count += 1 assert count == 1 with pytest.raises(IntegrityError): repo.add_movie(Movie('The Lost City of Z', 2016)) the_ropos_movie_list = repo.get_movies() for gen in the_ropos_movie_list: if gen == Movie('The Lost City of Z', 2016): b_movie = gen genre_list = [Genre(x.strip()) for x in genre_str_list.split(',')] actors_list = [Actor(x.strip()) for x in actor_str_list.split(',')] assert b_movie.description == description assert b_movie.director == Director(director_str) assert len(b_movie.genres) == len(genre_list) for genre in genre_list: assert genre in b_movie.genres assert len(b_movie.actors) == len(actors_list) for actor in actors_list: assert actor in b_movie.actors
def test_repository_get_number_per_genre(a_memory_repo, a_file_reader): data_from_test = dict() for movie in a_file_reader.dataset_of_movies: for item in movie.genres: if item.genre_name in data_from_test: data_from_test[item.genre_name] += 1 else: data_from_test[item.genre_name] = 1 for key, val in data_from_test.items(): assert val == a_memory_repo.get_size_of_genre(Genre(key))
def test_database_repository_get_number_per_genre(session_factory, a_file_reader): data_from_test = dict() repo = SqlAlchemyRepository(session_factory) for movie in a_file_reader.dataset_of_movies: for item in movie.genres: if item.genre_name in data_from_test: data_from_test[item.genre_name] += 1 else: data_from_test[item.genre_name] = 1 for key, val in data_from_test.items(): assert val == repo.get_size_of_genre(Genre(key))
def test_database_repository_can_get_genres(session_factory): repo = SqlAlchemyRepository(session_factory) the_ropos_genre_list = repo.get_genres() expected_str = [ 'Action', 'Adventure', 'Animation', 'Biography', 'Comedy', 'Crime', 'Drama', 'Family', 'Fantasy', 'History', 'Horror', 'Music', 'Musical', 'Mystery', 'Romance', 'Sci-Fi', 'Sport', 'Thriller', 'War', 'Western' ] expected = [Genre(name) for name in expected_str] assert len(the_ropos_genre_list) == 20 for genre in the_ropos_genre_list: assert genre in expected
def read_csv_file(self) -> None: with open(self.__filename, encoding='utf-8-sig') as file_data: reader = csv.DictReader(file_data) self.__dataset_of_movies = list() for row in reader: new_movie = Movie(row['Title'], int(row['Year'])) new_movie.description = row['Description'] new_movie.genres = [ Genre(i.strip()) for i in row['Genre'].split(',') ] new_movie.actors = [ Actor(i.strip()) for i in row['Actors'].split(',') ] new_movie.director = Director(row['Director'].strip()) if row['Runtime (Minutes)'].isdigit(): new_movie.runtime_minutes = int(row['Runtime (Minutes)']) self.__dataset_of_movies.append(new_movie) for i in new_movie.genres: self.add_genre(i) for i in new_movie.actors: self.add_actor(i) self.add_director(new_movie.director)
def test_load_review(empty_session): movie_title = 'Passengers' genre_list = ['Adventure', 'Drama', 'Romance'] director = 'Morten Tyldum' description = 'A spacecraft traveling to a distant colony planet and transporting thousands of people has a malfunction in its sleep chambers. As a result, two passengers are awakened 90 years early.' actors = [ 'Jennifer Lawrence', 'Chris Pratt', 'Michael Sheen', 'Laurence Fishburne' ] run_time = 116 release_year = 2016 insert_movie(empty_session, movie_title, director, genre_list, actors, description, release_year, run_time) a_movie = Movie(movie_title, release_year) a_movie.actors = [Actor(name) for name in actors] a_movie.description = description a_movie.director = Director(director) a_movie.genres = [Genre(name) for name in genre_list] a_movie.runtime_minutes = run_time users = [["jill", '98765432'], ['jim', 'mjydfefs']] insert_users(empty_session, users) review_text = 'was definitely a 5' rating = 5 result = empty_session.execute( f"SELECT id from users WHERE username = '******'").fetchone() insert_review(empty_session, movie_title, release_year, result[0], review_text, rating) users = empty_session.query(User).all() found_review = None for user in users: if user.username == 'jim': for review in user.reviews: if review.movie == Movie(movie_title, release_year): found_review = review break assert found_review.review_text == 'was definitely a 5' assert found_review.rating == 5
def test_load_genres(empty_session): genre_list = ["Action", 'Tool'] insert_genres(empty_session, genre_list) expected = [Genre('Action'), Genre('Tool')] assert empty_session.query(Genre).all() == expected
def test_repository_can_get_genres(a_memory_repo): a_genre_list = a_memory_repo.get_genres() a_genre = Genre("Action") assert a_genre in a_genre_list
def test_add_genre(): movie = Movie("Moana", 2016) cartoon = Genre('Cartoon') movie.genres = [cartoon] assert movie.genres == [Genre('Cartoon')]
def test_create_Genre(): action = Genre('Action') assert action.__repr__() == f'<Genre Action>'
def test_remove_genre(): movie = Movie("Moana", 2016) movie.genres = [Genre('Cartoon'), Genre('Kids'), Genre('Action')] movie.remove_genre(Genre('Action')) assert movie.genres == [Genre('Cartoon'), Genre('Kids')]
def get_pop_of_genre(genre_pick: str, repo: 'AbstractRepository') -> int: return repo.get_size_of_genre(Genre(genre_pick))