示例#1
0
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)
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
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
示例#6
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
示例#7
0
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)