2016-10-26 18:37:26 +01:00
|
|
|
import pytest
|
2017-02-28 12:16:35 +00:00
|
|
|
from bs4 import BeautifulSoup
|
2016-10-26 18:37:26 +01:00
|
|
|
from flask import url_for
|
2016-11-08 13:12:07 +00:00
|
|
|
from functools import partial
|
2016-10-26 18:37:26 +01:00
|
|
|
|
|
|
|
|
from tests import service_json
|
|
|
|
|
|
2016-11-08 13:12:07 +00:00
|
|
|
letters_urls = [
|
|
|
|
|
partial(url_for, 'main.add_service_template', template_type='letter'),
|
|
|
|
|
]
|
2016-10-26 18:37:26 +01:00
|
|
|
|
2016-11-08 13:12:07 +00:00
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('url', letters_urls)
|
2017-06-23 13:35:08 +01:00
|
|
|
@pytest.mark.parametrize('permissions, response_code', [
|
|
|
|
|
(['letter'], 200),
|
|
|
|
|
([], 403)
|
2016-10-26 18:37:26 +01:00
|
|
|
])
|
2016-11-08 13:12:07 +00:00
|
|
|
def test_letters_access_restricted(
|
2017-02-14 14:06:02 +00:00
|
|
|
logged_in_platform_admin_client,
|
2016-11-08 13:12:07 +00:00
|
|
|
mocker,
|
2017-06-23 13:35:08 +01:00
|
|
|
permissions,
|
2016-11-08 13:12:07 +00:00
|
|
|
response_code,
|
|
|
|
|
mock_get_service_templates,
|
2017-02-03 10:42:01 +00:00
|
|
|
url,
|
2017-06-23 13:35:08 +01:00
|
|
|
service_one,
|
2016-11-08 13:12:07 +00:00
|
|
|
):
|
2017-06-23 13:35:08 +01:00
|
|
|
service_one['permissions'] = permissions
|
2016-10-26 18:37:26 +01:00
|
|
|
|
2017-06-23 13:35:08 +01:00
|
|
|
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
|
|
|
|
|
|
|
|
|
|
response = logged_in_platform_admin_client.get(url(service_id=service_one['id']))
|
2016-10-26 18:37:26 +01:00
|
|
|
|
|
|
|
|
assert response.status_code == response_code
|
2016-10-31 14:43:40 +00:00
|
|
|
|
|
|
|
|
|
2016-11-08 13:12:07 +00:00
|
|
|
@pytest.mark.parametrize('url', letters_urls)
|
2016-10-31 18:01:31 +00:00
|
|
|
def test_letters_lets_in_without_permission(
|
2016-10-31 14:43:40 +00:00
|
|
|
client,
|
|
|
|
|
mocker,
|
|
|
|
|
mock_login,
|
|
|
|
|
mock_has_permissions,
|
|
|
|
|
api_user_active,
|
2016-11-08 13:12:07 +00:00
|
|
|
mock_get_service_templates,
|
2017-02-03 10:42:01 +00:00
|
|
|
url,
|
2017-06-23 13:35:08 +01:00
|
|
|
service_one
|
2016-10-31 14:43:40 +00:00
|
|
|
):
|
2017-06-23 13:35:08 +01:00
|
|
|
service_one['permissions'] = ['letter']
|
|
|
|
|
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
|
2016-10-31 14:43:40 +00:00
|
|
|
|
|
|
|
|
client.login(api_user_active)
|
2017-06-23 13:35:08 +01:00
|
|
|
response = client.get(url(service_id=service_one['id']))
|
2016-10-31 14:43:40 +00:00
|
|
|
|
2016-10-31 18:01:31 +00:00
|
|
|
assert api_user_active.permissions == {}
|
2016-10-31 14:43:40 +00:00
|
|
|
assert response.status_code == 200
|
2017-02-28 12:16:35 +00:00
|
|
|
|
|
|
|
|
|
2017-06-23 13:35:08 +01:00
|
|
|
@pytest.mark.parametrize('permissions, choices', [
|
2017-07-26 10:24:14 +01:00
|
|
|
(
|
|
|
|
|
['email', 'sms', 'letter'],
|
|
|
|
|
['Email', 'Text message', 'Letter']
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
['email', 'sms'],
|
|
|
|
|
['Email', 'Text message']
|
|
|
|
|
),
|
2017-02-28 12:16:35 +00:00
|
|
|
])
|
|
|
|
|
def test_given_option_to_add_letters_if_allowed(
|
|
|
|
|
logged_in_client,
|
|
|
|
|
service_one,
|
|
|
|
|
mocker,
|
2017-06-23 13:35:08 +01:00
|
|
|
permissions,
|
2017-02-28 12:16:35 +00:00
|
|
|
choices,
|
|
|
|
|
):
|
2017-06-23 13:35:08 +01:00
|
|
|
service_one['permissions'] = permissions
|
2017-02-28 12:16:35 +00:00
|
|
|
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
|
|
|
|
|
|
|
|
|
|
response = logged_in_client.get(url_for('main.add_template_by_type', service_id=service_one['id']))
|
|
|
|
|
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
|
|
|
|
radios = page.select('input[type=radio]')
|
2017-07-26 10:24:14 +01:00
|
|
|
labels = page.select('label')
|
2017-02-28 12:16:35 +00:00
|
|
|
|
|
|
|
|
assert len(radios) == len(choices)
|
2017-07-26 10:24:14 +01:00
|
|
|
assert len(labels) == len(choices)
|
2017-02-28 12:16:35 +00:00
|
|
|
|
2017-07-26 10:24:14 +01:00
|
|
|
for index, choice in enumerate(permissions):
|
|
|
|
|
assert radios[index]['value'] == choice
|
|
|
|
|
|
|
|
|
|
for index, label in enumerate(choices):
|
|
|
|
|
assert labels[index].text.strip() == label
|