mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 00:33:58 -04:00
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:
@@ -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),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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 == []
|
||||||
|
|||||||
Reference in New Issue
Block a user