def comment_on_article(): # Obtain the username of the currently logged in user. username = session['username'] # Create form. The form maintains state, e.g. when this method is called with a HTTP GET request and populates # the form with an article id, when subsequently called with a HTTP POST request, the article id remains in the # form. form = CommentForm() if form.validate_on_submit(): # Successful POST, i.e. the comment text has passed data validation. # Extract the article id, representing the commented article, from the form. article_id = int(form.article_id.data) # Use the service layer to store the new comment. services.add_comment(article_id, form.comment.data, username, uow.uow_instance) # Retrieve the article in dict form. article = services.get_article(article_id, uow.uow_instance) # Cause the web browser to display the page of all articles that have the same date as the commented article, # and display all comments, including the new comment. return redirect( url_for('news_bp.articles_by_date', date=article['date'], view_comments_for=article_id)) if request.method == 'GET': # Request is a HTTP GET to display the form. # Extract the article id, representing the article to comment, from a query parameter of the GET request. article_id = int(request.args.get('article')) # Store the article id in the form. form.article_id.data = article_id else: # Request is a HTTP POST where form validation has failed. # Extract the article id of the article being commented from the form. article_id = form.article_id.data # For a GET or an unsuccessful POST, retrieve the article to comment in dict form, and return a Web page that allows # the user to enter a comment. The generated Web page includes a form object. article = services.get_article(article_id, uow.uow_instance) return render_template('news/comment_on_article.html', title='Edit article', article=article, form=form, handler_url=url_for('news_bp.comment_on_article'), selected_articles=utilities.get_selected_articles(), tag_urls=utilities.get_tags_and_urls())
def test_can_get_article(in_memory_repo): article_id = 2 article_as_dict = news_services.get_article(article_id, in_memory_repo) assert article_as_dict['id'] == article_id assert article_as_dict['date'] == date.fromisoformat('2020-02-29') assert article_as_dict['title'] == 'Covid 19 coronavirus: US deaths double in two days, Trump says quarantine not necessary' #assert article_as_dict['first_para'] == 'US President Trump tweeted on Saturday night (US time) that he has asked the Centres for Disease Control and Prevention to issue a ""strong Travel Advisory"" but that a quarantine on the New York region"" will not be necessary.' assert article_as_dict['hyperlink'] == 'https://www.nzherald.co.nz/world/news/article.cfm?c_id=2&objectid=12320699' assert article_as_dict['image_hyperlink'] == 'https://www.nzherald.co.nz/resizer/159Vi4ELuH2fpLrv1SCwYLulzoM=/620x349/smart/filters:quality(70)/arc-anglerfish-syd-prod-nzme.s3.amazonaws.com/public/XQOAY2IY6ZEIZNSW2E3UMG2M4U.jpg' assert len(article_as_dict['comments']) == 0 tag_names = [dictionary['name'] for dictionary in article_as_dict['tags']] assert 'World' in tag_names assert 'Health' in tag_names assert 'Politics' in tag_names
def test_cannot_get_article_with_non_existent_id(in_memory_uow): article_id = 7 # Call the service layer to attempt to retrieve the Article. with pytest.raises(news_services.NonExistentArticleException): news_services.get_article(article_id, in_memory_uow)