mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-06-07 15:01:55 -04:00
We have a `client_request` fixture which does a bunch of useful stuff
like:
- checking the status code of the response
- returning a `BeautifulSoup` object
Lots of our tests still use an older fixture called `client`. This is
not as good because it:
- returns a raw `Response` object
- doesn’t do the additional checks
- means our tests contain a lot of repetetive boilerplate like `page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')`
This commit converts all the tests which had a `client.login(…)`
statement to use `client_request` (which is already logged in by
default).
Subsequent commits will remove uses of `client` in other tests, but
doing it this way means the work can be broken up into more manageable
chunks.
91 lines
2.3 KiB
Python
91 lines
2.3 KiB
Python
from functools import partial
|
|
|
|
import pytest
|
|
from flask import url_for
|
|
|
|
letters_urls = [
|
|
partial(url_for, 'main.add_service_template', template_type='letter'),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize('url', letters_urls)
|
|
@pytest.mark.parametrize('permissions, response_code', [
|
|
(['letter'], 200),
|
|
([], 403)
|
|
])
|
|
def test_letters_access_restricted(
|
|
client_request,
|
|
platform_admin_user,
|
|
mocker,
|
|
permissions,
|
|
response_code,
|
|
mock_get_service_templates,
|
|
url,
|
|
service_one,
|
|
):
|
|
service_one['permissions'] = permissions
|
|
client_request.login(platform_admin_user)
|
|
client_request.get_url(
|
|
url(service_id=service_one['id']),
|
|
_follow_redirects=True,
|
|
_expected_status=response_code,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize('url', letters_urls)
|
|
def test_letters_lets_in_without_permission(
|
|
client_request,
|
|
mocker,
|
|
mock_login,
|
|
mock_has_permissions,
|
|
api_user_active,
|
|
mock_get_service_templates,
|
|
url,
|
|
service_one
|
|
):
|
|
service_one['permissions'] = ['letter']
|
|
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
|
|
|
|
client_request.login(api_user_active)
|
|
client_request.get_url(url(service_id=service_one['id']))
|
|
|
|
assert api_user_active['permissions'] == {}
|
|
|
|
|
|
@pytest.mark.parametrize('permissions, choices', [
|
|
(
|
|
['email', 'sms', 'letter'],
|
|
['Email', 'Text message', 'Letter', 'Copy an existing template']
|
|
),
|
|
(
|
|
['email', 'sms'],
|
|
['Email', 'Text message', 'Copy an existing template']
|
|
),
|
|
])
|
|
def test_given_option_to_add_letters_if_allowed(
|
|
client_request,
|
|
service_one,
|
|
mocker,
|
|
mock_get_service_templates,
|
|
mock_get_template_folders,
|
|
mock_get_organisations_and_services_for_user,
|
|
mock_get_api_keys,
|
|
permissions,
|
|
choices,
|
|
):
|
|
service_one['permissions'] = permissions
|
|
|
|
page = client_request.get('main.choose_template', service_id=service_one['id'])
|
|
|
|
radios = page.select('#add_new_template_form input[type=radio]')
|
|
labels = page.select('#add_new_template_form label')
|
|
|
|
assert len(radios) == len(choices)
|
|
assert len(labels) == len(choices)
|
|
|
|
for index, choice in enumerate(permissions):
|
|
assert radios[index]['value'] == choice
|
|
|
|
for index, label in enumerate(choices):
|
|
assert labels[index].text.strip() == label
|