base_adresse: fix cron with not found region (#67629)

This commit is contained in:
Lauréline Guérin 2022-07-25 14:34:16 +02:00
parent 9f916e1827
commit 7cf903431a
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 35 additions and 0 deletions

View File

@ -543,6 +543,8 @@ class BaseAdresse(AddressResource):
if not data:
return None
region = get_region(data['codeRegion'])
if not region:
return None
departement, created = self.departmentmodel_set.get_or_create(
code=data['code'], defaults={'name': data['nom'], 'region': region}
)

View File

@ -817,6 +817,39 @@ def test_base_adresse_command_update_geo_invalid(mocked_get, db, base_adresse):
assert not RegionModel.objects.exists()
@pytest.mark.usefixtures('mock_update_streets')
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update_geo_region_not_found(mocked_get, db, base_adresse):
new_fake_api_geo_regions = json.dumps([json.loads(FAKE_API_GEO_REGIONS)[1]])
return_values = [
tests.utils.FakedResponse(content=content, status_code=200)
for content in (
new_fake_api_geo_regions, # first call, get regions
FAKE_API_GEO_DEPARTMENTS, # then, get departments
FAKE_API_GEO, # and get communes
)
] + [
# region code 11 not found, try to get it again
tests.utils.FakedResponse(content='not-json', status_code=200),
tests.utils.FakedResponse(content='not-json', status_code=200),
tests.utils.FakedResponse(content='not-json', status_code=200),
]
mocked_get.side_effect = return_values
call_command('cron', 'daily')
assert mocked_get.call_args_list == [
mock.call('https://geo.api.gouv.fr/regions'),
mock.call('https://geo.api.gouv.fr/departements'),
mock.call('https://geo.api.gouv.fr/communes'),
mock.call('https://geo.api.gouv.fr/regions/11'),
mock.call('https://geo.api.gouv.fr/regions/11'),
mock.call('https://geo.api.gouv.fr/regions/11'),
]
assert RegionModel.objects.count() == 1
assert RegionModel.objects.get().code == '27'
assert DepartmentModel.objects.count() == 1
assert DepartmentModel.objects.get().code == '58'
@pytest.mark.usefixtures('mock_update_api_geo')
@mock.patch('passerelle.utils.Request.get', side_effect=ConnectionError)
def test_base_adresse_command_update_street_timeout(mocked_get, db, base_adresse):