Delete cached template-folders when adding user to service

The api endpoint to get all template folders also returns the users who
can see each folder.

We need to clear the template-folder cache when adding a user to a service so
that we are not using out of date data about who can see each folder.
This commit is contained in:
Katie Smith
2019-03-19 11:49:10 +00:00
parent c39f6d49ea
commit 3fb752a009
2 changed files with 24 additions and 0 deletions

View File

@@ -149,6 +149,7 @@ class UserApiClient(NotifyAdminAPIClient):
return [User(data) for data in resp['data']]
@cache.delete('service-{service_id}')
@cache.delete('service-{service_id}-template-folders')
@cache.delete('user-{user_id}')
def add_user_to_service(self, service_id, user_id, permissions, folder_permissions):
# permissions passed in are the combined admin roles, not db permissions

View File

@@ -1,3 +1,4 @@
import uuid
from unittest.mock import call
import pytest
@@ -272,3 +273,25 @@ def test_deletes_user_cache(
assert call('user-{}'.format(user_id)) in mock_redis_delete.call_args_list
assert len(mock_request.call_args_list) == 1
def test_add_user_to_service_calls_correct_endpoint_and_deletes_keys_from_cache(mocker):
mock_redis_delete = mocker.patch('app.extensions.RedisClient.delete')
service_id = uuid.uuid4()
user_id = uuid.uuid4()
folder_id = uuid.uuid4()
expected_url = '/service/{}/users/{}'.format(service_id, user_id)
data = {'permissions': [], 'folder_permissions': [folder_id]}
mock_post = mocker.patch('app.notify_client.user_api_client.UserApiClient.post')
user_api_client.add_user_to_service(service_id, user_id, [], [folder_id])
mock_post.assert_called_once_with(expected_url, data=data)
assert mock_redis_delete.call_args_list == [
call('service-{service_id}'.format(service_id=service_id)),
call('service-{service_id}-template-folders'.format(service_id=service_id)),
call('user-{user_id}'.format(user_id=user_id)),
]