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_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),
)

View File

@@ -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 == []