mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-14 17:13:25 -05:00
This commit adds logic to: - take the list of selected folders and templates - split it into two lists (of folders and templates) - `POST` that data to the API, to effect the movement of said folders and templates I’ve tried to architect it in such a way that we can easily add more template ‘operations’ in the future, as we add more forms to the choose template page.
106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
import uuid
|
|
from unittest.mock import call
|
|
|
|
import pytest
|
|
from orderedset import OrderedSet
|
|
|
|
from app.notify_client.template_folder_api_client import TemplateFolderAPIClient
|
|
|
|
|
|
@pytest.mark.parametrize('parent_id', [uuid.uuid4(), None])
|
|
def test_create_template_folder_calls_correct_api_endpoint(mocker, api_user_active, parent_id):
|
|
mock_redis_delete = mocker.patch('app.notify_client.RedisClient.delete')
|
|
|
|
some_service_id = uuid.uuid4()
|
|
expected_url = '/service/{}/template-folder'.format(some_service_id)
|
|
data = {'name': 'foo', 'parent_id': parent_id}
|
|
|
|
client = TemplateFolderAPIClient()
|
|
|
|
mock_post = mocker.patch('app.notify_client.template_folder_api_client.TemplateFolderAPIClient.post')
|
|
|
|
client.create_template_folder(some_service_id, name='foo', parent_id=parent_id)
|
|
|
|
mock_post.assert_called_once_with(expected_url, data)
|
|
mock_redis_delete.assert_called_once_with('service-{}-template-folders'.format(some_service_id))
|
|
|
|
|
|
def test_get_template_folders_calls_correct_api_endpoint(mocker, api_user_active):
|
|
mock_redis_get = mocker.patch('app.notify_client.RedisClient.get', return_value=None)
|
|
mock_redis_set = mocker.patch('app.notify_client.RedisClient.set')
|
|
mock_api_get = mocker.patch(
|
|
'app.notify_client.NotifyAdminAPIClient.get',
|
|
return_value={'template_folders': {'a': 'b'}}
|
|
)
|
|
|
|
some_service_id = uuid.uuid4()
|
|
expected_url = '/service/{}/template-folder'.format(some_service_id)
|
|
redis_key = 'service-{}-template-folders'.format(some_service_id)
|
|
|
|
client = TemplateFolderAPIClient()
|
|
|
|
ret = client.get_template_folders(some_service_id)
|
|
|
|
assert ret == {'a': 'b'}
|
|
|
|
mock_redis_get.assert_called_once_with(redis_key)
|
|
mock_api_get.assert_called_once_with(expected_url)
|
|
mock_redis_set.assert_called_once_with(redis_key, '{"a": "b"}', ex=604800)
|
|
|
|
|
|
def test_move_templates_and_folders(mocker, api_user_active):
|
|
|
|
mock_redis_delete = mocker.patch('app.notify_client.RedisClient.delete')
|
|
mock_api_post = mocker.patch('app.notify_client.NotifyAdminAPIClient.post')
|
|
|
|
some_service_id = uuid.uuid4()
|
|
some_folder_id = uuid.uuid4()
|
|
|
|
TemplateFolderAPIClient().move_to_folder(
|
|
some_service_id,
|
|
some_folder_id,
|
|
template_ids=OrderedSet(('a', 'b', 'c')),
|
|
folder_ids=OrderedSet(('1', '2', '3')),
|
|
)
|
|
|
|
mock_api_post.assert_called_once_with(
|
|
'/service/{}/template-folder/move-to-folder/{}'.format(
|
|
some_service_id, some_folder_id
|
|
),
|
|
{
|
|
'folders': ['1', '2', '3'],
|
|
'templates': ['a', 'b', 'c'],
|
|
},
|
|
)
|
|
assert mock_redis_delete.call_args_list == [
|
|
call('service-{}-template-folders'.format(some_service_id)),
|
|
call('service-{}-templates'.format(some_service_id)),
|
|
call(
|
|
'template-a-version-None',
|
|
'template-b-version-None',
|
|
'template-c-version-None',
|
|
),
|
|
]
|
|
|
|
|
|
def test_move_templates_and_folders_to_root(mocker, api_user_active):
|
|
|
|
mock_api_post = mocker.patch('app.notify_client.NotifyAdminAPIClient.post')
|
|
|
|
some_service_id = uuid.uuid4()
|
|
|
|
TemplateFolderAPIClient().move_to_folder(
|
|
some_service_id,
|
|
None,
|
|
template_ids=OrderedSet(('a', 'b', 'c')),
|
|
folder_ids=OrderedSet(('1', '2', '3')),
|
|
)
|
|
|
|
mock_api_post.assert_called_once_with(
|
|
'/service/{}/template-folder/move-to-folder'.format(some_service_id),
|
|
{
|
|
'folders': ['1', '2', '3'],
|
|
'templates': ['a', 'b', 'c'],
|
|
},
|
|
)
|