base_adresse: add reverse endpoint result into address cache model (#53989)

This commit is contained in:
Nicolas Roche 2021-05-14 12:33:15 +02:00
parent 54574eee45
commit 6193d0a8ca
3 changed files with 34 additions and 1 deletions

View File

@ -221,6 +221,11 @@ class BaseAdresse(BaseResource):
if not feature['geometry']['type'] == 'Point':
continue # skip unknown
result = self.format_address_data(feature)
address, created = AddressCacheModel.objects.get_or_create(
api_id=result['id'], defaults={'data': result}
)
if not created:
address.update_timestamp()
break
return result

View File

@ -62,6 +62,7 @@ def api_adresse_data_gouv_fr_search(url, request):
@urlmatch(netloc='^api-adresse.data.gouv.fr$', path='^/reverse/$')
@remember_called
def api_adresse_data_gouv_fr_reverse(url, request):
return response(
200,
@ -103,7 +104,7 @@ def mock_api_adresse_data_gouv_fr_search():
@pytest.fixture
def mock_api_adresse_data_gouv_fr_reverse():
with HTTMock(api_adresse_data_gouv_fr_reverse):
yield None
yield api_adresse_data_gouv_fr_reverse
@pytest.fixture

View File

@ -911,3 +911,30 @@ def test_base_adresse_addresses_data_change(mocked_get, app, base_adresse):
AddressCacheModel.objects.all().delete()
resp = app.get(endpoint, params={'q': 'plop'}, status=200)
assert resp.json['data'][0]['text'] == 'changed'
def test_base_adresse_reverse_cache(
app, base_adresse, freezer, mock_api_adresse_data_gouv_fr_reverse, mock_api_adresse_data_gouv_fr_search
):
assert AddressCacheModel.objects.count() == 0
resp = app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
assert mock_api_adresse_data_gouv_fr_reverse.call['count'] == 1
data = resp.json
assert data['text'] == 'Rue Roger Halope 49000 Angers'
api_id = data['id']
assert AddressCacheModel.objects.filter(api_id=api_id).exists()
assert AddressCacheModel.objects.count() == 1
first_timestamp = AddressCacheModel.objects.get().timestamp
resp = app.get('/base-adresse/%s/addresses?id=%s' % (base_adresse.slug, api_id))
assert mock_api_adresse_data_gouv_fr_search.call['count'] == 0
assert data['text'] == 'Rue Roger Halope 49000 Angers'
assert 'address' in data
# check caching timestamp update
freezer.move_to(datetime.timedelta(hours=1, seconds=1))
resp = app.get('/base-adresse/%s/reverse?lon=-0.593775&lat=47.474633' % base_adresse.slug)
assert mock_api_adresse_data_gouv_fr_reverse.call['count'] == 2
assert AddressCacheModel.objects.get().timestamp > first_timestamp