From 835d11d8d6958ac90246d52bacb853fd5fedf2db Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Thu, 4 Apr 2019 11:17:35 +0100 Subject: [PATCH] Remove domains.yml dependence from agreement pages This will allow us to remove the `domains.yml` file, by using information about organisations that is now stored in the database instead. --- app/main/views/agreement.py | 16 +++------- tests/app/main/views/test_agreement.py | 43 ++++++++++++++------------ 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/app/main/views/agreement.py b/app/main/views/agreement.py index 3862be01c..88fedeb8c 100644 --- a/app/main/views/agreement.py +++ b/app/main/views/agreement.py @@ -1,21 +1,17 @@ from flask import abort, render_template, request, send_file, url_for -from flask_login import login_required +from flask_login import current_user, login_required from app.main import main from app.main.views.sub_navigation_dictionaries import features_nav from app.s3_client.s3_mou_client import get_mou -from app.utils import AgreementInfo @main.route('/agreement') @login_required def agreement(): - - agreement_info = AgreementInfo.from_current_user() - return render_template( - 'views/{}.html'.format(agreement_info.as_jinja_template), - owner=agreement_info.owner, + 'views/{}.html'.format(current_user.default_organisation.as_jinja_template), + owner=current_user.default_organisation.name, navigation_links=features_nav(), ) @@ -24,7 +20,7 @@ def agreement(): @login_required def download_agreement(): return send_file(**get_mou( - AgreementInfo.from_current_user().crown_status_or_404 + current_user.default_organisation.crown_status_or_404 )) @@ -40,10 +36,8 @@ def public_agreement(variant): organisation_is_crown=(variant == 'crown') )) - agreement_info = AgreementInfo.from_current_user() - return render_template( 'views/agreement-public.html', - owner=agreement_info.owner, + owner=current_user.default_organisation.name, download_link=url_for('.public_download_agreement', variant=variant), ) diff --git a/tests/app/main/views/test_agreement.py b/tests/app/main/views/test_agreement.py index 8da0fd3e2..0b3806c15 100644 --- a/tests/app/main/views/test_agreement.py +++ b/tests/app/main/views/test_agreement.py @@ -4,7 +4,7 @@ from io import BytesIO import pytest from flask import url_for -from tests.conftest import active_user_with_permissions +from tests.conftest import mock_get_organisation_by_domain class _MockS3Object(): @@ -16,22 +16,22 @@ class _MockS3Object(): return {'Body': BytesIO(self.data)} -@pytest.mark.parametrize('email_address, expected_links', [ +@pytest.mark.parametrize('agreement_signed, crown, expected_links', [ ( - 'test@cabinet-office.gov.uk', + True, True, [ partial(url_for, 'main.download_agreement'), ] ), ( - 'test@aylesburytowncouncil.gov.uk', + False, False, [ partial(url_for, 'main.download_agreement'), lambda: 'mailto:notify-support@digital.cabinet-office.gov.uk', ] ), ( - 'test@unknown.gov.uk', + None, None, [ partial(url_for, 'main.public_download_agreement', variant='crown'), partial(url_for, 'main.public_download_agreement', variant='non-crown'), @@ -44,12 +44,15 @@ def test_show_agreement_page( client_request, mocker, fake_uuid, - email_address, + agreement_signed, + crown, expected_links, ): - user = active_user_with_permissions(fake_uuid) - user.email_address = email_address - mocker.patch('app.user_api_client.get_user', return_value=user) + mock_get_organisation_by_domain( + mocker, + crown=crown, + agreement_signed=agreement_signed, + ) page = client_request.get('main.agreement') links = page.select('main .column-two-thirds a') assert len(links) == len(expected_links) @@ -57,14 +60,14 @@ def test_show_agreement_page( assert link['href'] == expected_links[index]() -@pytest.mark.parametrize('email_address, expected_file_fetched, expected_file_served', [ +@pytest.mark.parametrize('crown, expected_file_fetched, expected_file_served', [ ( - 'test@cabinet-office.gov.uk', + True, 'crown.pdf', 'GOV.UK Notify data sharing and financial agreement.pdf', ), ( - 'test@aylesburytowncouncil.gov.uk', + False, 'non-crown.pdf', 'GOV.UK Notify data sharing and financial agreement (non-crown).pdf', ), @@ -73,7 +76,7 @@ def test_downloading_agreement( logged_in_client, mocker, fake_uuid, - email_address, + crown, expected_file_fetched, expected_file_served, ): @@ -81,9 +84,10 @@ def test_downloading_agreement( 'app.s3_client.s3_mou_client.get_s3_object', return_value=_MockS3Object(b'foo') ) - user = active_user_with_permissions(fake_uuid) - user.email_address = email_address - mocker.patch('app.user_api_client.get_user', return_value=user) + mock_get_organisation_by_domain( + mocker, + crown=crown, + ) response = logged_in_client.get(url_for('main.download_agreement')) assert response.status_code == 200 assert response.get_data() == b'foo' @@ -103,9 +107,10 @@ def test_agreement_cant_be_downloaded_unknown_crown_status( 'app.s3_client.s3_mou_client.get_s3_object', return_value=_MockS3Object() ) - user = active_user_with_permissions(fake_uuid) - user.email_address = 'test@unknown.gov.uk' - mocker.patch('app.user_api_client.get_user', return_value=user) + mock_get_organisation_by_domain( + mocker, + crown=None, + ) response = logged_in_client.get(url_for('main.download_agreement')) assert response.status_code == 404 assert mock_get_s3_object.call_args_list == []