diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 14a6110cd..63f4bc96c 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -15,7 +15,12 @@ from app import ( ) from app.extensions import antivirus_client, redis_client from app.main import main -from app.main.forms import DateFilterForm, PDFUploadForm, ReturnedLettersForm, ClearCacheForm +from app.main.forms import ( + ClearCacheForm, + DateFilterForm, + PDFUploadForm, + ReturnedLettersForm, +) from app.statistics_utils import ( get_formatted_percentage, get_formatted_percentage_two_dp, diff --git a/app/navigation.py b/app/navigation.py index e83ff3800..a3fb7247e 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -303,7 +303,6 @@ class MainNavigation(Navigation): 'check_notification', 'choose_template', 'choose_template_to_copy', - 'clear_cache', 'confirm_redact_template', 'conversation_reply', 'copy_template', diff --git a/app/templates/views/platform-admin/clear-cache.html b/app/templates/views/platform-admin/clear-cache.html index b4d89030f..5cdc11b0a 100644 --- a/app/templates/views/platform-admin/clear-cache.html +++ b/app/templates/views/platform-admin/clear-cache.html @@ -10,7 +10,7 @@ {% block platform_admin_content %}

- Clear Redis Cache + Clear Cache

{% call form_wrapper() %} diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index 719f83ef3..22de66a6d 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -2,7 +2,7 @@ import datetime import re import uuid from functools import partial -from unittest.mock import ANY +from unittest.mock import ANY, call import pytest import requests_mock @@ -858,3 +858,42 @@ def test_letter_validation_preview_doesnt_call_template_preview_when_file_doesnt page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') assert page.find('div', class_='banner-dangerous').text.strip() == "Document didn't pass the virus scan" + + +def test_clear_cache_shows_form(client_request, platform_admin_user, mocker): + redis = mocker.patch('app.main.views.platform_admin.redis_client') + client_request.login(platform_admin_user) + + page = client_request.get('main.clear_cache') + + assert page.select('input[type=radio]')[0]['value'] == 'user' + assert page.select('input[type=radio]')[1]['value'] == 'service' + assert page.select('input[type=radio]')[2]['value'] == 'template' + assert not redis.delete_cache_keys_by_pattern.called + + +def test_clear_cache_submits_and_tells_you_how_many_things_were_deleted(client_request, platform_admin_user, mocker): + redis = mocker.patch('app.main.views.platform_admin.redis_client') + redis.delete_cache_keys_by_pattern.side_effect = [0, 3, 1] + client_request.login(platform_admin_user) + + page = client_request.post('main.clear_cache', _data={'model_type': 'template'}, _expected_status=200) + + assert redis.delete_cache_keys_by_pattern.call_args_list == [ + call('service-????????-????-????-????-????????????-templates'), + call('template-????????-????-????-????-????????????-version-*'), + call('template-????????-????-????-????-????????????-versions'), + ] + + flash_banner = page.find('div', class_='banner-dangerous') + assert flash_banner.text.strip() == 'Removed 3 template objects from redis' + + +def test_clear_cache_requires_option(client_request, platform_admin_user,mocker): + redis = mocker.patch('app.main.views.platform_admin.redis_client') + client_request.login(platform_admin_user) + + page = client_request.post('main.clear_cache', _data={}, _expected_status=200) + + assert normalize_spaces(page.find('span', class_='error-message').text) == 'Not a valid choice' + assert not redis.delete_cache_keys_by_pattern.called