mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-11 09:28:27 -04:00
Cache known domains in Redis
The domains lookup is a bit slow because it’s serialising all the organisations in the database. Since we’re putting this in the sign up flow it should feel snappy, so lets cache just the domain bit of it in Redis.
This commit is contained in:
94
tests/app/notify_client/test_organisation_client.py
Normal file
94
tests/app/notify_client/test_organisation_client.py
Normal file
@@ -0,0 +1,94 @@
|
||||
from unittest.mock import call
|
||||
|
||||
import pytest
|
||||
|
||||
from app import organisations_client
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
(
|
||||
'expected_cache_get_calls,'
|
||||
'cache_value,'
|
||||
'expected_api_calls,'
|
||||
'expected_cache_set_calls,'
|
||||
'expected_return_value,'
|
||||
),
|
||||
[
|
||||
(
|
||||
[
|
||||
call('domains')
|
||||
],
|
||||
b"""
|
||||
[
|
||||
{"domains": ["a", "b", "c"]},
|
||||
{"domains": ["c", "d", "e"]}
|
||||
]
|
||||
""",
|
||||
[],
|
||||
[],
|
||||
['a', 'b', 'c', 'd', 'e'],
|
||||
),
|
||||
(
|
||||
[
|
||||
call('domains')
|
||||
],
|
||||
None,
|
||||
[
|
||||
call(url='/organisations')
|
||||
],
|
||||
[
|
||||
call(
|
||||
'domains',
|
||||
'["x", "y", "z"]',
|
||||
ex=604800
|
||||
)
|
||||
],
|
||||
'from api',
|
||||
),
|
||||
]
|
||||
)
|
||||
def test_returns_value_from_cache(
|
||||
app_,
|
||||
mocker,
|
||||
expected_cache_get_calls,
|
||||
cache_value,
|
||||
expected_return_value,
|
||||
expected_api_calls,
|
||||
expected_cache_set_calls,
|
||||
):
|
||||
|
||||
mock_redis_get = mocker.patch(
|
||||
'app.extensions.RedisClient.get',
|
||||
return_value=cache_value,
|
||||
)
|
||||
mock_api_get = mocker.patch(
|
||||
'app.notify_client.NotifyAdminAPIClient.get',
|
||||
return_value=[
|
||||
{'domains': ['x', 'y', 'z']}
|
||||
],
|
||||
)
|
||||
mock_redis_set = mocker.patch(
|
||||
'app.extensions.RedisClient.set',
|
||||
)
|
||||
|
||||
organisations_client.get_domains()
|
||||
|
||||
assert mock_redis_get.call_args_list == expected_cache_get_calls
|
||||
assert mock_api_get.call_args_list == expected_api_calls
|
||||
assert mock_redis_set.call_args_list == expected_cache_set_calls
|
||||
|
||||
|
||||
def test_deletes_domain_cache(
|
||||
app_,
|
||||
mock_get_user,
|
||||
mocker,
|
||||
fake_uuid,
|
||||
):
|
||||
mocker.patch('app.notify_client.current_user', id='1')
|
||||
mock_redis_delete = mocker.patch('app.extensions.RedisClient.delete')
|
||||
mock_request = mocker.patch('notifications_python_client.base.BaseAPIClient.request')
|
||||
|
||||
organisations_client.update_organisation(fake_uuid, foo='bar')
|
||||
|
||||
assert call('domains') in mock_redis_delete.call_args_list
|
||||
assert len(mock_request.call_args_list) == 1
|
||||
Reference in New Issue
Block a user