mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-25 10:29:14 -04:00
Refactor archive to do one sync delete of all keys rather than many
Otherwise we could be waiting on 50 sync calls to redis to happen. This
way we do it in one sync call and follow the pattern of
b98f4561fa/app/notify_client/organisations_api_client.py (L56)
This commit is contained in:
@@ -302,7 +302,11 @@ def archive_service(service_id):
|
||||
):
|
||||
abort(403)
|
||||
if request.method == 'POST':
|
||||
service_api_client.archive_service(service_id, current_service.active_users)
|
||||
# We need to purge the cache for the services users as otherwise, although they will have had their permissions
|
||||
# removed in the DB, they would still have permissions in the cache to view/edit/manage this service
|
||||
cached_service_user_ids = [user.id for user in current_service.active_users]
|
||||
|
||||
service_api_client.archive_service(service_id, cached_service_user_ids)
|
||||
flash(
|
||||
'‘{}’ was deleted'.format(current_service.name),
|
||||
'default_with_tick',
|
||||
|
||||
@@ -130,11 +130,9 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
||||
|
||||
@cache.delete('service-{service_id}')
|
||||
@cache.delete('service-{service_id}-templates')
|
||||
def archive_service(self, service_id, service_users):
|
||||
# We need to purge the cache for the services users as otherwise, although they will have had their permissions
|
||||
# removed in the DB, they would still have permissions in the cache to view/edit/manage this service
|
||||
for user in service_users:
|
||||
cache.delete(f'user-{user.id}')
|
||||
def archive_service(self, service_id, cached_service_user_ids):
|
||||
if cached_service_user_ids:
|
||||
cache.delete(*map('user-{}'.format, cached_service_user_ids))
|
||||
return self.post('/service/{}/archive'.format(service_id), data=None)
|
||||
|
||||
@cache.delete('service-{service_id}')
|
||||
|
||||
@@ -479,3 +479,12 @@ def test_deletes_caches_when_modifying_templates(
|
||||
|
||||
assert mock_redis_delete.call_args_list == list(map(call, expected_cache_deletes))
|
||||
assert len(mock_request.call_args_list) == 1
|
||||
|
||||
|
||||
def test_deletes_cached_users_when_archiving_service(mocker):
|
||||
mock_redis_delete = mocker.patch('app.notify_client.service_api_client.cache.delete')
|
||||
mocker.patch('notifications_python_client.base.BaseAPIClient.request')
|
||||
|
||||
service_api_client.archive_service(SERVICE_ONE_ID, ["my-user-id1", "my-user-id2"])
|
||||
|
||||
assert mock_redis_delete.call_args_list == [call('user-my-user-id1', 'user-my-user-id2')]
|
||||
|
||||
Reference in New Issue
Block a user