From b57e4a0d0de2ef8344283c47986e74b2ed278ec8 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Fri, 10 Jan 2020 17:40:39 +0000 Subject: [PATCH] Test URLs separately MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s hard to read the tests when they have HTML bundled up with content. So this commit: - introduces BeautifulSoup to parse the HTML - asserts separately on the text and any links found in the HTML --- tests/app/test_utils.py | 45 +++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/tests/app/test_utils.py b/tests/app/test_utils.py index f0004b774..635f4c2ca 100644 --- a/tests/app/test_utils.py +++ b/tests/app/test_utils.py @@ -4,6 +4,7 @@ from io import StringIO from pathlib import Path import pytest +from bs4 import BeautifulSoup from freezegun import freeze_time from app import format_datetime_relative @@ -418,40 +419,36 @@ def test_get_letter_validation_error_for_unknown_error(): 'letter-not-a4-portrait-oriented', 'Your letter is not A4 portrait size', ( - 'You need to change the size or orientation of page 2.
Files must meet our ' - 'letter specification.' + 'You need to change the size or orientation of page 2. ' + 'Files must meet our letter specification.' ), ( - 'Validation failed because page 2 is not A4 portrait size.
' - 'Files must meet our ' - 'letter specification.' + 'Validation failed because page 2 is not A4 portrait size.' + 'Files must meet our letter specification.' ), ), ( 'content-outside-printable-area', 'Your content is outside the printable area', ( - 'You need to edit page 2.
Files must meet our ' - 'letter specification.' + 'You need to edit page 2.' + 'Files must meet our letter specification.' ), ( 'Validation failed because content is outside the printable area ' - 'on page 2.
Files must meet our ' - 'letter specification.' + 'on page 2.' + 'Files must meet our letter specification.' ), ), ( 'letter-too-long', 'Your letter is too long', ( - 'Letters must be 10 pages or less.
Your letter is 13 pages long.' + 'Letters must be 10 pages or less. ' + 'Your letter is 13 pages long.' ), ( - 'Validation failed because this letter is 13 pages long.
' + 'Validation failed because this letter is 13 pages long.' 'Letters must be 10 pages or less.' ), ), @@ -462,8 +459,22 @@ def test_get_letter_validation_error_for_known_errors( expected_content, expected_summary, ): + expected_letter_spec_url = ( + 'https://docs.notifications.service.gov.uk/' + 'documentation/images/notify-pdf-letter-spec-v2.4.pdf' + ) error = get_letter_validation_error(error_message, invalid_pages=[2], page_count=13) + detail = BeautifulSoup(error['detail'], 'html.parser') + summary = BeautifulSoup(error['summary'], 'html.parser') assert error['title'] == expected_title - assert expected_content in error['detail'] - assert error['summary'] == expected_summary + + assert detail.text == expected_content + if detail.select_one('a'): + assert detail.select_one('a')['href'] == expected_letter_spec_url + assert detail.select_one('a')['target'] == '_blank' + + assert summary.text == expected_summary + if summary.select_one('a'): + assert summary.select_one('a')['href'] == expected_letter_spec_url + assert summary.select_one('a')['target'] == '_blank'