def movie_after_review(): # Read query parameters. movie_to_show_reviews = request.args.get('view_reviews_for') movie_rank = request.args.get('movie_rank') if movie_to_show_reviews is None: # No view-reviews query parameter, so set to a non-existent movie rank. movie_to_show_reviews = 0 else: # Convert movie_to_show_reviews from string to int. movie_to_show_reviews = int(movie_to_show_reviews) if movie_rank is None: # No movie_rank query parameter, so set to a non-existent movie rank. movie_rank = 0 else: # Convert movie_rank from string to int. movie_rank = int(movie_rank) # Retrieve the movie to display on the web page. movie = services.get_movie(movie_rank, repo.repo_instance) # Construct urls for viewing movie reviews and adding reviews. movie['view_review_url'] = url_for('movies_bp.movie_after_review', view_reviews_for=movie['rank'], movie_rank=movie['rank']) movie['add_review_url'] = url_for('movies_bp.review_on_movie', movie=movie['rank']) movie['reviews'] = services.get_reviews_for_movie(movie['rank'], repo.repo_instance) movies = [movie] first_movie_url = None last_movie_url = None next_movie_url = None prev_movie_url = None # Generate the webpage to display the movie. return render_template('movies/movies.html', title='Movies', movies_title='Thank you for reviewing!', movies=movies, featured_movies=utilities.get_featured_movies(3), genre_urls=utilities.get_genres_and_urls(), first_movie_url=first_movie_url, last_movie_url=last_movie_url, prev_movie_url=prev_movie_url, next_movie_url=next_movie_url, show_reviews_for_movie=movie_to_show_reviews)
def test_can_add_review(in_memory_repo): movie_rank = 1000 review_text = 'Maybe there were ten lives?' rating = 8 username = '******' # Call the service layer to add the review. movies_services.add_review(movie_rank, review_text, rating, username, in_memory_repo) # Retrieve the reviews for the movie from the repo. reviews_as_dict = movies_services.get_reviews_for_movie( movie_rank, in_memory_repo) # Check that the reviews include a review with the new review text. assert next((dictionary['review_text'] for dictionary in reviews_as_dict if dictionary['review_text'] == review_text), None) is not None
def test_can_add_review(populated_memory_repo): movie_title = "Guardians of the Galaxy" movie_year = 2014 review_text = 'This was pretty awesome' username = '******' rating = 9 # Call the service layer to add the review. services.add_review(movie_title, movie_year, username, review_text, rating, populated_memory_repo) reviews_as_dict = services.get_reviews_for_movie(movie_title, movie_year, populated_memory_repo) # Check that the reviews include a review with the new review text. assert next((dictionary['review_text'] for dictionary in reviews_as_dict if dictionary['review_text'] == review_text), None) is not None
def test_get_reviews_for_movie_without_reviews(in_memory_repo): reviews_as_dict = movies_services.get_reviews_for_movie(2, in_memory_repo) assert len(reviews_as_dict) == 0
def test_get_reviews_for_non_existent_movie(in_memory_repo): with pytest.raises(NonExistentMovieException): reviews_as_dict = movies_services.get_reviews_for_movie( 0, in_memory_repo) assert len(reviews_as_dict) == 0
def test_get_reviews_for_movie(in_memory_repo): reviews_as_dict = movies_services.get_reviews_for_movie(1, in_memory_repo) assert len(reviews_as_dict) == 1 movie_ranks = [review['movie_rank'] for review in reviews_as_dict] assert 1 in movie_ranks and len(movie_ranks) == 1
def movies_by_genre(): movies_per_page = 3 # Read query parameters. genre_name = request.args.get('genre') cursor = request.args.get('cursor') movie_to_show_reviews = request.args.get('view_reviews_for') if movie_to_show_reviews is None: # No view-reviews query parameter, so set to a non-existent movie rank. movie_to_show_reviews = 0 else: # Convert movie_to_show_reviews from string to int. movie_to_show_reviews = int(movie_to_show_reviews) if cursor is None: # No cursor query parameter, so initialise cursor to start at the beginning. cursor = 0 else: # Convert cursor from string to int. cursor = int(cursor) # Retrieve movie ranks for movies that have genre genre_name. movie_ranks = services.get_movie_ranks_for_genre(genre_name, repo.repo_instance) # Retrieve the batch of movies to display on the web page. movies = services.get_movies_by_rank( movie_ranks[cursor:cursor + movies_per_page], repo.repo_instance) first_movie_url = None last_movie_url = None next_movie_url = None prev_movie_url = None if cursor > 0: # There are preceding movies, so generate URLs for the 'previous' and 'first' navigation buttons. prev_movie_url = url_for('movies_bp.movies_by_genre', genre=genre_name, cursor=cursor - movies_per_page) first_movie_url = url_for('movies_bp.movies_by_genre', genre=genre_name) if cursor + movies_per_page < len(movie_ranks): # There are further movies, so generate URLs for the 'next' and 'last' navigation buttons. next_movie_url = url_for('movies_bp.movies_by_genre', genre=genre_name, cursor=cursor + movies_per_page) last_cursor = movies_per_page * int(len(movie_ranks) / movies_per_page) if len(movie_ranks) % movies_per_page == 0: last_cursor -= movies_per_page last_movie_url = url_for('movies_bp.movies_by_genre', genre=genre_name, cursor=last_cursor) # Construct urls for viewing movie reviews and adding reviews. for movie in movies: movie['view_review_url'] = url_for('movies_bp.movies_by_genre', genre=genre_name, cursor=cursor, view_reviews_for=movie['rank']) movie['add_review_url'] = url_for('movies_bp.review_on_movie', movie=movie['rank']) movie['reviews'] = services.get_reviews_for_movie( movie['rank'], repo.repo_instance) # Generate the webpage to display the movies. return render_template('movies/movies.html', title='Movies', movies_title='Movies with genre ' + genre_name, movies=movies, featured_movies=utilities.get_featured_movies(3), genre_urls=utilities.get_genres_and_urls(), first_movie_url=first_movie_url, last_movie_url=last_movie_url, prev_movie_url=prev_movie_url, next_movie_url=next_movie_url, show_reviews_for_movie=movie_to_show_reviews)