mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
Merge pull request #3014 from alphagov/cache-organisations
Cache organisations, not just domains in Redis
This commit is contained in:
@@ -417,7 +417,12 @@ def clear_cache():
|
|||||||
('letter_branding', [
|
('letter_branding', [
|
||||||
'letter_branding',
|
'letter_branding',
|
||||||
'letter_branding-????????-????-????-????-????????????',
|
'letter_branding-????????-????-????-????-????????????',
|
||||||
])
|
]),
|
||||||
|
('organisation', [
|
||||||
|
'organisations',
|
||||||
|
'domains',
|
||||||
|
'live-service-and-organisation-counts',
|
||||||
|
]),
|
||||||
])
|
])
|
||||||
|
|
||||||
form = ClearCacheForm()
|
form = ClearCacheForm()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
|
|||||||
|
|
||||||
class OrganisationsClient(NotifyAdminAPIClient):
|
class OrganisationsClient(NotifyAdminAPIClient):
|
||||||
|
|
||||||
|
@cache.set('organisations')
|
||||||
def get_organisations(self):
|
def get_organisations(self):
|
||||||
return self.get(url='/organisations')
|
return self.get(url='/organisations')
|
||||||
|
|
||||||
@@ -30,6 +31,7 @@ class OrganisationsClient(NotifyAdminAPIClient):
|
|||||||
return None
|
return None
|
||||||
raise error
|
raise error
|
||||||
|
|
||||||
|
@cache.delete('organisations')
|
||||||
def create_organisation(self, name):
|
def create_organisation(self, name):
|
||||||
data = {
|
data = {
|
||||||
"name": name
|
"name": name
|
||||||
@@ -37,6 +39,7 @@ class OrganisationsClient(NotifyAdminAPIClient):
|
|||||||
return self.post(url="/organisations", data=data)
|
return self.post(url="/organisations", data=data)
|
||||||
|
|
||||||
@cache.delete('domains')
|
@cache.delete('domains')
|
||||||
|
@cache.delete('organisations')
|
||||||
def update_organisation(self, org_id, **kwargs):
|
def update_organisation(self, org_id, **kwargs):
|
||||||
return self.post(url="/organisations/{}".format(org_id), data=kwargs)
|
return self.post(url="/organisations/{}".format(org_id), data=kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -900,24 +900,42 @@ def test_clear_cache_shows_form(client_request, platform_admin_user, mocker):
|
|||||||
assert page.select('input[type=radio]')[0]['value'] == 'user'
|
assert page.select('input[type=radio]')[0]['value'] == 'user'
|
||||||
assert page.select('input[type=radio]')[1]['value'] == 'service'
|
assert page.select('input[type=radio]')[1]['value'] == 'service'
|
||||||
assert page.select('input[type=radio]')[2]['value'] == 'template'
|
assert page.select('input[type=radio]')[2]['value'] == 'template'
|
||||||
|
assert page.select('input[type=radio]')[3]['value'] == 'email_branding'
|
||||||
|
assert page.select('input[type=radio]')[4]['value'] == 'letter_branding'
|
||||||
|
assert page.select('input[type=radio]')[5]['value'] == 'organisation'
|
||||||
assert not redis.delete_cache_keys_by_pattern.called
|
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):
|
@pytest.mark.parametrize('model_type, expected_calls, expected_confirmation', (
|
||||||
|
('template', [
|
||||||
|
call('service-????????-????-????-????-????????????-templates'),
|
||||||
|
call('template-????????-????-????-????-????????????-version-*'),
|
||||||
|
call('template-????????-????-????-????-????????????-versions'),
|
||||||
|
], 'Removed 3 template objects from redis'),
|
||||||
|
('organisation', [
|
||||||
|
call('organisations'),
|
||||||
|
call('domains'),
|
||||||
|
call('live-service-and-organisation-counts'),
|
||||||
|
], 'Removed 3 organisation objects from redis'),
|
||||||
|
))
|
||||||
|
def test_clear_cache_submits_and_tells_you_how_many_things_were_deleted(
|
||||||
|
client_request,
|
||||||
|
platform_admin_user,
|
||||||
|
mocker,
|
||||||
|
model_type,
|
||||||
|
expected_calls,
|
||||||
|
expected_confirmation,
|
||||||
|
):
|
||||||
redis = mocker.patch('app.main.views.platform_admin.redis_client')
|
redis = mocker.patch('app.main.views.platform_admin.redis_client')
|
||||||
redis.delete_cache_keys_by_pattern.side_effect = [0, 3, 1]
|
redis.delete_cache_keys_by_pattern.side_effect = [0, 3, 1]
|
||||||
client_request.login(platform_admin_user)
|
client_request.login(platform_admin_user)
|
||||||
|
|
||||||
page = client_request.post('main.clear_cache', _data={'model_type': 'template'}, _expected_status=200)
|
page = client_request.post('main.clear_cache', _data={'model_type': model_type}, _expected_status=200)
|
||||||
|
|
||||||
assert redis.delete_cache_keys_by_pattern.call_args_list == [
|
assert redis.delete_cache_keys_by_pattern.call_args_list == expected_calls
|
||||||
call('service-????????-????-????-????-????????????-templates'),
|
|
||||||
call('template-????????-????-????-????-????????????-version-*'),
|
|
||||||
call('template-????????-????-????-????-????????????-versions'),
|
|
||||||
]
|
|
||||||
|
|
||||||
flash_banner = page.find('div', class_='banner-default')
|
flash_banner = page.find('div', class_='banner-default')
|
||||||
assert flash_banner.text.strip() == 'Removed 3 template objects from redis'
|
assert flash_banner.text.strip() == expected_confirmation
|
||||||
|
|
||||||
|
|
||||||
def test_clear_cache_requires_option(client_request, platform_admin_user, mocker):
|
def test_clear_cache_requires_option(client_request, platform_admin_user, mocker):
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from app import organisations_client
|
|||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
(
|
(
|
||||||
|
'client_method,'
|
||||||
'expected_cache_get_calls,'
|
'expected_cache_get_calls,'
|
||||||
'cache_value,'
|
'cache_value,'
|
||||||
'expected_api_calls,'
|
'expected_api_calls,'
|
||||||
@@ -15,13 +16,14 @@ from app import organisations_client
|
|||||||
),
|
),
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
|
'get_domains',
|
||||||
[
|
[
|
||||||
call('domains')
|
call('domains'),
|
||||||
],
|
],
|
||||||
b"""
|
b"""
|
||||||
[
|
[
|
||||||
{"domains": ["a", "b", "c"]},
|
{"name": "org 1", "domains": ["a", "b", "c"]},
|
||||||
{"domains": ["c", "d", "e"]}
|
{"name": "org 2", "domains": ["c", "d", "e"]}
|
||||||
]
|
]
|
||||||
""",
|
""",
|
||||||
[],
|
[],
|
||||||
@@ -29,19 +31,62 @@ from app import organisations_client
|
|||||||
['a', 'b', 'c', 'd', 'e'],
|
['a', 'b', 'c', 'd', 'e'],
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
'get_domains',
|
||||||
[
|
[
|
||||||
call('domains')
|
call('domains'),
|
||||||
|
call('organisations'),
|
||||||
],
|
],
|
||||||
None,
|
None,
|
||||||
[
|
[
|
||||||
call(url='/organisations')
|
call(url='/organisations')
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
call(
|
||||||
|
'organisations',
|
||||||
|
'[{"domains": ["x", "y", "z"]}]',
|
||||||
|
ex=604800,
|
||||||
|
),
|
||||||
call(
|
call(
|
||||||
'domains',
|
'domains',
|
||||||
'["x", "y", "z"]',
|
'["x", "y", "z"]',
|
||||||
ex=604800
|
ex=604800
|
||||||
)
|
),
|
||||||
|
],
|
||||||
|
'from api',
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'get_organisations',
|
||||||
|
[
|
||||||
|
call('organisations'),
|
||||||
|
],
|
||||||
|
b"""
|
||||||
|
[
|
||||||
|
{"name": "org 1", "domains": ["a", "b", "c"]},
|
||||||
|
{"name": "org 2", "domains": ["c", "d", "e"]}
|
||||||
|
]
|
||||||
|
""",
|
||||||
|
[],
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
{"name": "org 1", "domains": ["a", "b", "c"]},
|
||||||
|
{"name": "org 2", "domains": ["c", "d", "e"]}
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'get_organisations',
|
||||||
|
[
|
||||||
|
call('organisations'),
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
[
|
||||||
|
call(url='/organisations')
|
||||||
|
],
|
||||||
|
[
|
||||||
|
call(
|
||||||
|
'organisations',
|
||||||
|
'[{"domains": ["x", "y", "z"]}]',
|
||||||
|
ex=604800,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
'from api',
|
'from api',
|
||||||
),
|
),
|
||||||
@@ -50,6 +95,7 @@ from app import organisations_client
|
|||||||
def test_returns_value_from_cache(
|
def test_returns_value_from_cache(
|
||||||
app_,
|
app_,
|
||||||
mocker,
|
mocker,
|
||||||
|
client_method,
|
||||||
expected_cache_get_calls,
|
expected_cache_get_calls,
|
||||||
cache_value,
|
cache_value,
|
||||||
expected_return_value,
|
expected_return_value,
|
||||||
@@ -71,7 +117,7 @@ def test_returns_value_from_cache(
|
|||||||
'app.extensions.RedisClient.set',
|
'app.extensions.RedisClient.set',
|
||||||
)
|
)
|
||||||
|
|
||||||
organisations_client.get_domains()
|
getattr(organisations_client, client_method)()
|
||||||
|
|
||||||
assert mock_redis_get.call_args_list == expected_cache_get_calls
|
assert mock_redis_get.call_args_list == expected_cache_get_calls
|
||||||
assert mock_api_get.call_args_list == expected_api_calls
|
assert mock_api_get.call_args_list == expected_api_calls
|
||||||
|
|||||||
Reference in New Issue
Block a user