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.
This commit is contained in:
Chris Hill-Scott
2019-04-04 11:17:35 +01:00
parent 98249158cb
commit 835d11d8d6
2 changed files with 29 additions and 30 deletions

View File

@@ -1,21 +1,17 @@
from flask import abort, render_template, request, send_file, url_for 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 import main
from app.main.views.sub_navigation_dictionaries import features_nav from app.main.views.sub_navigation_dictionaries import features_nav
from app.s3_client.s3_mou_client import get_mou from app.s3_client.s3_mou_client import get_mou
from app.utils import AgreementInfo
@main.route('/agreement') @main.route('/agreement')
@login_required @login_required
def agreement(): def agreement():
agreement_info = AgreementInfo.from_current_user()
return render_template( return render_template(
'views/{}.html'.format(agreement_info.as_jinja_template), 'views/{}.html'.format(current_user.default_organisation.as_jinja_template),
owner=agreement_info.owner, owner=current_user.default_organisation.name,
navigation_links=features_nav(), navigation_links=features_nav(),
) )
@@ -24,7 +20,7 @@ def agreement():
@login_required @login_required
def download_agreement(): def download_agreement():
return send_file(**get_mou( 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') organisation_is_crown=(variant == 'crown')
)) ))
agreement_info = AgreementInfo.from_current_user()
return render_template( return render_template(
'views/agreement-public.html', 'views/agreement-public.html',
owner=agreement_info.owner, owner=current_user.default_organisation.name,
download_link=url_for('.public_download_agreement', variant=variant), download_link=url_for('.public_download_agreement', variant=variant),
) )

View File

@@ -4,7 +4,7 @@ from io import BytesIO
import pytest import pytest
from flask import url_for from flask import url_for
from tests.conftest import active_user_with_permissions from tests.conftest import mock_get_organisation_by_domain
class _MockS3Object(): class _MockS3Object():
@@ -16,22 +16,22 @@ class _MockS3Object():
return {'Body': BytesIO(self.data)} 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'), partial(url_for, 'main.download_agreement'),
] ]
), ),
( (
'test@aylesburytowncouncil.gov.uk', False, False,
[ [
partial(url_for, 'main.download_agreement'), partial(url_for, 'main.download_agreement'),
lambda: 'mailto:notify-support@digital.cabinet-office.gov.uk', 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='crown'),
partial(url_for, 'main.public_download_agreement', variant='non-crown'), partial(url_for, 'main.public_download_agreement', variant='non-crown'),
@@ -44,12 +44,15 @@ def test_show_agreement_page(
client_request, client_request,
mocker, mocker,
fake_uuid, fake_uuid,
email_address, agreement_signed,
crown,
expected_links, expected_links,
): ):
user = active_user_with_permissions(fake_uuid) mock_get_organisation_by_domain(
user.email_address = email_address mocker,
mocker.patch('app.user_api_client.get_user', return_value=user) crown=crown,
agreement_signed=agreement_signed,
)
page = client_request.get('main.agreement') page = client_request.get('main.agreement')
links = page.select('main .column-two-thirds a') links = page.select('main .column-two-thirds a')
assert len(links) == len(expected_links) assert len(links) == len(expected_links)
@@ -57,14 +60,14 @@ def test_show_agreement_page(
assert link['href'] == expected_links[index]() 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', 'crown.pdf',
'GOV.UK Notify data sharing and financial agreement.pdf', 'GOV.UK Notify data sharing and financial agreement.pdf',
), ),
( (
'test@aylesburytowncouncil.gov.uk', False,
'non-crown.pdf', 'non-crown.pdf',
'GOV.UK Notify data sharing and financial agreement (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, logged_in_client,
mocker, mocker,
fake_uuid, fake_uuid,
email_address, crown,
expected_file_fetched, expected_file_fetched,
expected_file_served, expected_file_served,
): ):
@@ -81,9 +84,10 @@ def test_downloading_agreement(
'app.s3_client.s3_mou_client.get_s3_object', 'app.s3_client.s3_mou_client.get_s3_object',
return_value=_MockS3Object(b'foo') return_value=_MockS3Object(b'foo')
) )
user = active_user_with_permissions(fake_uuid) mock_get_organisation_by_domain(
user.email_address = email_address mocker,
mocker.patch('app.user_api_client.get_user', return_value=user) crown=crown,
)
response = logged_in_client.get(url_for('main.download_agreement')) response = logged_in_client.get(url_for('main.download_agreement'))
assert response.status_code == 200 assert response.status_code == 200
assert response.get_data() == b'foo' 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', 'app.s3_client.s3_mou_client.get_s3_object',
return_value=_MockS3Object() return_value=_MockS3Object()
) )
user = active_user_with_permissions(fake_uuid) mock_get_organisation_by_domain(
user.email_address = 'test@unknown.gov.uk' mocker,
mocker.patch('app.user_api_client.get_user', return_value=user) crown=None,
)
response = logged_in_client.get(url_for('main.download_agreement')) response = logged_in_client.get(url_for('main.download_agreement'))
assert response.status_code == 404 assert response.status_code == 404
assert mock_get_s3_object.call_args_list == [] assert mock_get_s3_object.call_args_list == []