Merge branch 'master' into becca-invite-users

This commit is contained in:
Rebecca Law
2018-02-27 10:13:40 +00:00
18 changed files with 5478 additions and 74 deletions

View File

@@ -11,6 +11,7 @@ from tests import validate_route_permission, service_json
from tests.conftest import (
active_user_with_permissions,
active_user_no_api_key_permission,
active_user_no_settings_permission,
platform_admin_user,
normalize_spaces,
multiple_reply_to_email_addresses,
@@ -281,20 +282,49 @@ def test_should_redirect_after_change_service_name(
assert mock_service_name_is_unique.called
@pytest.mark.parametrize('user, expected_text, expected_link', [
(
active_user_with_permissions,
'To remove these restrictions request to go live.',
True,
),
(
active_user_no_settings_permission,
'Your service manager can ask to have these restrictions removed.',
False,
),
])
def test_show_restricted_service(
logged_in_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
mock_get_service_organisation,
single_sms_sender,
mock_get_service_settings_page_common,
client,
mocker,
fake_uuid,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
mock_get_service_organisation,
single_sms_sender,
mock_get_service_settings_page_common,
user,
expected_text,
expected_link,
):
response = logged_in_client.get(url_for('main.service_settings', service_id=service_one['id']))
client.login(user(fake_uuid), mocker, service_one)
response = client.get(url_for('main.service_settings', service_id=service_one['id']))
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.find('h1').text == 'Settings'
assert page.find_all('h2')[0].text == 'Your service is in trial mode'
request_to_live = page.select_one('main p')
request_to_live_link = request_to_live.select_one('a')
assert normalize_spaces(request_to_live.text) == expected_text
if expected_link:
assert request_to_live_link.text.strip() == 'request to go live'
assert request_to_live_link['href'] == url_for('main.request_to_go_live', service_id=service_one['id'])
else:
assert not request_to_live_link
def test_switch_service_to_live(
logged_in_platform_admin_client,

View File

@@ -1,7 +1,8 @@
import pytest
from app import service_api_client
from app.notify_client.service_api_client import ServiceAPIClient
from tests.conftest import fake_uuid
from tests.conftest import fake_uuid, SERVICE_ONE_ID
def test_client_posts_archived_true_when_deleting_template(mocker):
@@ -78,3 +79,57 @@ def test_client_creates_service_with_correct_data(
email_from='test@example.com',
),
)
@pytest.mark.parametrize('template_data, extra_args, expected_count', (
(
[],
{},
0,
),
(
[],
{'template_type': 'email'},
0,
),
(
[
{'template_type': 'email'},
{'template_type': 'sms'},
],
{},
2,
),
(
[
{'template_type': 'email'},
{'template_type': 'sms'},
],
{'template_type': 'email'},
1,
),
(
[
{'template_type': 'email'},
{'template_type': 'sms'},
],
{'template_type': 'letter'},
0,
),
))
def test_client_returns_count_of_service_templates(
app_,
mocker,
template_data,
extra_args,
expected_count,
):
mocker.patch(
'app.service_api_client.get_service_templates',
return_value={'data': template_data}
)
assert service_api_client.count_service_templates(
SERVICE_ONE_ID, **extra_args
) == expected_count

View File

@@ -1,6 +1,69 @@
import pytest
from unittest.mock import call
from app import user_api_client
from app.notify_client.models import User
from tests.conftest import SERVICE_ONE_ID
def test_client_gets_all_users_for_service(
mocker,
fake_uuid,
):
user_api_client.max_failed_login_count = 99 # doesn't matter for this test
mock_get = mocker.patch(
'app.notify_client.user_api_client.UserApiClient.get',
return_value={'data': [
{'id': fake_uuid},
]}
)
users = user_api_client.get_users_for_service(SERVICE_ONE_ID)
mock_get.assert_called_once_with('/service/{}/users'.format(SERVICE_ONE_ID))
assert len(users) == 1
assert users[0].id == fake_uuid
def test_client_returns_count_of_users_with_manage_service(
app_,
client,
mocker,
fake_uuid,
):
def _service_one_user_with_permissions(*permissions):
return User({'permissions': {SERVICE_ONE_ID: list(permissions)}})
mock_get_users = mocker.patch(
'app.notify_client.user_api_client.UserApiClient.get_users_for_service',
return_value=[
_service_one_user_with_permissions('manage_settings', 'view_activity'),
_service_one_user_with_permissions('manage_settings'),
_service_one_user_with_permissions('view_activity'),
_service_one_user_with_permissions('manage_templates'),
]
)
mocker.patch(
'app.notify_client.models._get_service_id_from_view_args',
return_value=SERVICE_ONE_ID,
)
assert user_api_client.get_count_of_users_with_permission(
SERVICE_ONE_ID,
'manage_settings'
) == 2
assert user_api_client.get_count_of_users_with_permission(
SERVICE_ONE_ID,
'manage_templates'
) == 1
assert mock_get_users.call_args_list == [
call(SERVICE_ONE_ID),
call(SERVICE_ONE_ID)
]
def test_client_uses_correct_find_by_email(mocker, api_user_active):

View File

@@ -13,7 +13,8 @@ from app.utils import (
generate_next_dict,
Spreadsheet,
get_letter_timings,
get_cdn_domain
get_cdn_domain,
GovernmentDomain,
)
from tests.conftest import fake_uuid
@@ -307,3 +308,64 @@ def test_get_cdn_domain_on_non_localhost(client, mocker):
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'https://some.admintest.com'})
domain = get_cdn_domain()
assert domain == 'static-logos.admintest.com'
@pytest.mark.parametrize("domain_or_email_address", (
"test@dclgdatamart.co.uk", "test@communities.gsi.gov.uk", "test@communities.gov.uk",
))
def test_get_valid_government_domain_known_details(domain_or_email_address):
government_domain = GovernmentDomain(domain_or_email_address)
assert government_domain.crown_status is None
assert government_domain.owner == "Ministry of Housing, Communities & Local Government"
assert government_domain.agreement_signed is True
@pytest.mark.parametrize("domain_or_email_address", (
"test@police.gov.uk", "police.gov.uk",
))
def test_get_valid_government_domain_unknown_details(domain_or_email_address):
government_domain = GovernmentDomain(domain_or_email_address)
assert government_domain.crown_status is None
assert government_domain.owner is None
assert government_domain.agreement_signed is None
def test_get_valid_government_domain_some_known_details():
government_domain = GovernmentDomain("marinemanagement.org.uk")
assert government_domain.crown_status is None
assert government_domain.owner == "Marine Management Organisation"
assert government_domain.agreement_signed is True
def test_get_valid_government_domain_gets_most_specific_first():
generic = GovernmentDomain("gov.uk")
assert generic.crown_status is None
assert generic.owner is None
assert generic.agreement_signed is None
specific = GovernmentDomain("dacorum.gov.uk")
assert specific.crown_status is False
assert specific.owner == 'Dacorum Borough Council'
assert specific.agreement_signed is True
def test_validate_government_domain_data():
for domain in GovernmentDomain.domains.keys():
government_domain = GovernmentDomain(domain)
assert government_domain.crown_status in {
True, False, None
}
assert (
government_domain.owner is None
) or (
isinstance(government_domain.owner, str)
)
assert government_domain.agreement_signed in {
True, False, None
}

View File

@@ -1276,6 +1276,31 @@ def active_user_no_api_key_permission(fake_uuid):
return user
@pytest.fixture
def active_user_no_settings_permission(fake_uuid):
from app.notify_client.user_api_client import User
user_data = {
'id': fake_uuid,
'name': 'Test User With Permissions',
'password': 'somepassword',
'password_changed_at': str(datetime.utcnow()),
'email_address': 'test@user.gov.uk',
'mobile_number': '07700 900762',
'state': 'active',
'failed_login_count': 0,
'permissions': {SERVICE_ONE_ID: [
'manage_templates',
'manage_api_keys',
'view_activity',
]},
'platform_admin': False,
'auth_type': 'sms_auth'
}
user = User(user_data)
return user
@pytest.fixture(scope='function')
def api_user_locked(fake_uuid):
from app.notify_client.user_api_client import User