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