mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-28 18:24:00 -04:00
Merge pull request #2452 from alphagov/create-template-folders
Create template folders
This commit is contained in:
@@ -139,6 +139,7 @@ def test_accepting_invite_removes_invite_from_session(
|
||||
mock_get_template_statistics,
|
||||
mock_get_jobs,
|
||||
mock_get_service_statistics,
|
||||
mock_get_template_folders,
|
||||
mock_get_usage,
|
||||
mock_get_inbound_sms_summary,
|
||||
fake_uuid,
|
||||
@@ -157,7 +158,7 @@ def test_accepting_invite_removes_invite_from_session(
|
||||
token='thisisnotarealtoken',
|
||||
_follow_redirects=True,
|
||||
)
|
||||
assert page.h1.string == landing_page_title
|
||||
assert normalize_spaces(page.h1.string) == landing_page_title
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
assert 'invited_user' not in session
|
||||
|
||||
@@ -56,11 +56,11 @@ def test_letters_lets_in_without_permission(
|
||||
@pytest.mark.parametrize('permissions, choices', [
|
||||
(
|
||||
['email', 'sms', 'letter'],
|
||||
['Email', 'Text message', 'Letter', 'Copy of an existing template']
|
||||
['Email template', 'Text message template', 'Letter template', 'Copy of an existing template']
|
||||
),
|
||||
(
|
||||
['email', 'sms'],
|
||||
['Email', 'Text message', 'Copy of an existing template']
|
||||
['Email template', 'Text message template', 'Copy of an existing template']
|
||||
),
|
||||
])
|
||||
def test_given_option_to_add_letters_if_allowed(
|
||||
|
||||
@@ -2186,7 +2186,6 @@ def test_dont_show_preview_letter_templates_for_bad_filetype(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('route, response_code', [
|
||||
('main.choose_template', 200),
|
||||
('main.send_messages', 200),
|
||||
('main.get_example_csv', 200),
|
||||
('main.send_test', 302)
|
||||
@@ -2259,7 +2258,6 @@ def test_route_permissions_send_check_notifications(
|
||||
|
||||
|
||||
@pytest.mark.parametrize('route, expected_status', [
|
||||
('main.choose_template', 200),
|
||||
('main.send_messages', 403),
|
||||
('main.get_example_csv', 403),
|
||||
('main.send_test', 403),
|
||||
|
||||
@@ -563,13 +563,13 @@ def test_should_show_request_to_go_live_checklist(
|
||||
)
|
||||
|
||||
mock_templates = mocker.patch(
|
||||
'app.models.service.Service.templates',
|
||||
'app.models.service.Service.all_templates',
|
||||
new_callable=PropertyMock,
|
||||
return_value=list(range(0, count_of_templates)),
|
||||
)
|
||||
|
||||
mock_templates_by_type = mocker.patch(
|
||||
'app.models.service.Service.templates_by_type',
|
||||
mock_get_templates = mocker.patch(
|
||||
'app.models.service.Service.get_templates',
|
||||
side_effect=_templates_by_type,
|
||||
)
|
||||
|
||||
@@ -598,7 +598,7 @@ def test_should_show_request_to_go_live_checklist(
|
||||
assert mock_templates.call_args_list == [
|
||||
call(),
|
||||
]
|
||||
assert mock_templates_by_type.call_args_list == [
|
||||
assert mock_get_templates.call_args_list == [
|
||||
call('email'),
|
||||
call('sms'),
|
||||
]
|
||||
@@ -683,12 +683,12 @@ def test_should_check_for_sms_sender_on_go_live(
|
||||
return_value=99,
|
||||
)
|
||||
mock_templates = mocker.patch(
|
||||
'app.models.service.Service.templates',
|
||||
'app.models.service.Service.all_templates',
|
||||
new_callable=PropertyMock,
|
||||
side_effect=partial(_templates_by_type, 'all'),
|
||||
)
|
||||
mock_templates_by_type = mocker.patch(
|
||||
'app.models.service.Service.templates_by_type',
|
||||
mock_get_templates = mocker.patch(
|
||||
'app.models.service.Service.get_templates',
|
||||
side_effect=_templates_by_type,
|
||||
)
|
||||
|
||||
@@ -712,7 +712,7 @@ def test_should_check_for_sms_sender_on_go_live(
|
||||
assert mock_templates.call_args_list == [
|
||||
call(),
|
||||
]
|
||||
assert mock_templates_by_type.call_args_list == [
|
||||
assert mock_get_templates.call_args_list == [
|
||||
call('email'),
|
||||
call('sms'),
|
||||
]
|
||||
@@ -747,7 +747,7 @@ def test_should_check_for_mou_on_request_to_go_live(
|
||||
return_value=0,
|
||||
)
|
||||
mocker.patch(
|
||||
'app.models.service.Service.templates',
|
||||
'app.models.service.Service.all_templates',
|
||||
new_callable=PropertyMock,
|
||||
return_value=[],
|
||||
)
|
||||
|
||||
166
tests/app/main/views/test_template_folders.py
Normal file
166
tests/app/main/views/test_template_folders.py
Normal file
@@ -0,0 +1,166 @@
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
from flask import url_for
|
||||
|
||||
from tests.conftest import SERVICE_ONE_ID, normalize_spaces
|
||||
|
||||
PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0'
|
||||
CHILD_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||
def test_add_page_shows_option_for_folder(
|
||||
client_request,
|
||||
service_one,
|
||||
parent_folder_id,
|
||||
mocker,
|
||||
mock_get_service_templates,
|
||||
mock_get_organisations_and_services_for_user,
|
||||
):
|
||||
service_one['permissions'] += ['edit_folders']
|
||||
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
|
||||
|
||||
page = client_request.get(
|
||||
'main.add_template_by_type',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=parent_folder_id,
|
||||
_test_page_title=False
|
||||
)
|
||||
|
||||
radios = page.select('input[type=radio]')
|
||||
labels = page.select('label')
|
||||
|
||||
assert [x['value'] for x in radios] == ['email', 'sms', 'copy-existing', 'folder']
|
||||
assert [x.text.strip() for x in labels] == [
|
||||
'Email template',
|
||||
'Text message template',
|
||||
'Copy of an existing template',
|
||||
'Folder'
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||
def test_get_add_template_folder_page(client_request, service_one, parent_folder_id):
|
||||
service_one['permissions'] += ['edit_folders']
|
||||
|
||||
page = client_request.get(
|
||||
'main.add_template_folder',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=parent_folder_id
|
||||
)
|
||||
|
||||
assert page.select_one('input[name=name]') is not None
|
||||
|
||||
|
||||
def test_add_template_folder_page_rejects_if_service_doesnt_have_permission(client_request, service_one):
|
||||
client_request.get('main.add_template_folder', service_id=service_one['id'], _expected_status=403)
|
||||
client_request.post('main.add_template_folder', service_id=service_one['id'], _expected_status=403)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||
def test_post_add_template_folder_page(client_request, service_one, mocker, parent_folder_id):
|
||||
mock_create = mocker.patch('app.template_folder_api_client.create_template_folder')
|
||||
|
||||
service_one['permissions'] += ['edit_folders']
|
||||
|
||||
client_request.post(
|
||||
'main.add_template_folder',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=parent_folder_id,
|
||||
_data={'name': 'foo'},
|
||||
_expected_redirect=url_for(
|
||||
'main.choose_template',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=parent_folder_id,
|
||||
_external=True,
|
||||
)
|
||||
)
|
||||
|
||||
mock_create.assert_called_once_with(service_one['id'], name='foo', parent_id=parent_folder_id)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'expected_page_title, extra_args, expected_nav_links, expected_links',
|
||||
[
|
||||
(
|
||||
'Templates',
|
||||
{},
|
||||
['Text message', 'Email', 'Letter'],
|
||||
[
|
||||
'folder_one',
|
||||
'folder_two',
|
||||
'sms_template_one',
|
||||
'sms_template_two',
|
||||
'email_template_one',
|
||||
'email_template_two',
|
||||
'letter_template_one',
|
||||
'letter_template_two',
|
||||
]
|
||||
),
|
||||
(
|
||||
'Templates',
|
||||
{'template_type': 'sms'},
|
||||
['All', 'Email', 'Letter'],
|
||||
['folder_one', 'folder_two', 'sms_template_one', 'sms_template_two'],
|
||||
),
|
||||
(
|
||||
'Templates / folder_one',
|
||||
{'template_type': 'sms', 'template_folder_id': PARENT_FOLDER_ID},
|
||||
['All', 'Email', 'Letter'],
|
||||
['folder_one_one', 'folder_one_two'],
|
||||
),
|
||||
(
|
||||
'Templates / folder_one / folder_one_one',
|
||||
{'template_folder_id': CHILD_FOLDER_ID},
|
||||
['Text message', 'Email', 'Letter'],
|
||||
[],
|
||||
),
|
||||
]
|
||||
)
|
||||
def test_should_show_templates_folder_page(
|
||||
client_request,
|
||||
mock_get_service_templates,
|
||||
mock_get_template_folders,
|
||||
mock_has_no_jobs,
|
||||
service_one,
|
||||
mocker,
|
||||
fake_uuid,
|
||||
expected_page_title,
|
||||
extra_args,
|
||||
expected_nav_links,
|
||||
expected_links,
|
||||
):
|
||||
|
||||
mock_get_template_folders.return_value = [
|
||||
{'id': PARENT_FOLDER_ID, 'name': 'folder_one', 'parent_id': None},
|
||||
{'id': str(uuid.uuid4()), 'name': 'folder_two', 'parent_id': None},
|
||||
{'id': CHILD_FOLDER_ID, 'name': 'folder_one_one', 'parent_id': PARENT_FOLDER_ID},
|
||||
{'id': str(uuid.uuid4()), 'name': 'folder_one_two', 'parent_id': PARENT_FOLDER_ID},
|
||||
]
|
||||
|
||||
service_one['permissions'] += ['letter', 'edit_folders']
|
||||
|
||||
page = client_request.get(
|
||||
'main.choose_template',
|
||||
service_id=SERVICE_ONE_ID,
|
||||
**extra_args
|
||||
)
|
||||
|
||||
assert normalize_spaces(page.select_one('h1').text) == expected_page_title
|
||||
|
||||
links_in_page = page.select('.pill a')
|
||||
|
||||
assert len(links_in_page) == len(expected_nav_links)
|
||||
|
||||
for index, expected_link in enumerate(expected_nav_links):
|
||||
assert links_in_page[index].text.strip() == expected_link
|
||||
|
||||
page_links = page.select('.message-name a')
|
||||
|
||||
assert len(page_links) == len(expected_links)
|
||||
|
||||
for index, expected_link in enumerate(expected_links):
|
||||
assert page_links[index].text.strip() == expected_link
|
||||
|
||||
mock_get_service_templates.assert_called_once_with(SERVICE_ONE_ID)
|
||||
@@ -96,6 +96,7 @@ from tests.conftest import single_letter_contact_block
|
||||
def test_should_show_page_for_choosing_a_template(
|
||||
client_request,
|
||||
mock_get_service_templates,
|
||||
mock_get_template_folders,
|
||||
mock_has_no_jobs,
|
||||
extra_args,
|
||||
expected_nav_links,
|
||||
@@ -136,6 +137,7 @@ def test_should_show_page_for_choosing_a_template(
|
||||
|
||||
def test_should_not_show_template_nav_if_only_one_type_of_template(
|
||||
client_request,
|
||||
mock_get_template_folders,
|
||||
mock_get_service_templates_with_only_one_template,
|
||||
):
|
||||
|
||||
@@ -149,6 +151,7 @@ def test_should_not_show_template_nav_if_only_one_type_of_template(
|
||||
|
||||
def test_should_not_show_live_search_if_list_of_templates_fits_onscreen(
|
||||
client_request,
|
||||
mock_get_template_folders,
|
||||
mock_get_service_templates
|
||||
):
|
||||
|
||||
@@ -162,6 +165,7 @@ def test_should_not_show_live_search_if_list_of_templates_fits_onscreen(
|
||||
|
||||
def test_should_show_live_search_if_list_of_templates_taller_than_screen(
|
||||
client_request,
|
||||
mock_get_template_folders,
|
||||
mock_get_more_service_templates_than_can_fit_onscreen
|
||||
):
|
||||
|
||||
@@ -1213,6 +1217,7 @@ def test_route_permissions_for_choose_template(
|
||||
app_,
|
||||
client,
|
||||
api_user_active,
|
||||
mock_get_template_folders,
|
||||
service_one,
|
||||
mock_get_service_templates,
|
||||
):
|
||||
|
||||
Reference in New Issue
Block a user