mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -04:00
Merge branch 'master' into becca-invite-users
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user