base_adresse: handle bad ban_id format (#56710)
This commit is contained in:
parent
b431c1d8a1
commit
84e0250564
|
@ -67,8 +67,9 @@ class BaseAdresse(AddressResource):
|
|||
verbose_name = _('Base Adresse Web Service')
|
||||
|
||||
def sectorize(self, address):
|
||||
ban_id = address.get('ban_id') or ''
|
||||
address['address']['street_id'] = '_'.join(ban_id.split('_', 2)[0:2])
|
||||
ban_id = address.get('ban_id')
|
||||
if isinstance(ban_id, str) and '_' in ban_id:
|
||||
address['address']['street_id'] = '_'.join(ban_id.split('_', 2)[0:2])
|
||||
super().sectorize(address)
|
||||
|
||||
def format_address_data(self, data):
|
||||
|
|
|
@ -154,6 +154,50 @@ BAN = {
|
|||
},
|
||||
"type": "Feature",
|
||||
},
|
||||
# id is not a string => no street_id
|
||||
{
|
||||
"geometry": {"coordinates": [2.323365, 48.833702], "type": "Point"},
|
||||
"properties": {
|
||||
"city": "Paris",
|
||||
"citycode": "75114",
|
||||
"context": "75, Paris, Île-de-France",
|
||||
"district": "Paris 14e Arrondissement",
|
||||
"housenumber": "169",
|
||||
"id": 42, # integer id => no street_id
|
||||
"importance": 0.77751,
|
||||
"label": "169 Rue du Château 75014 Paris",
|
||||
"name": "169 Rue du Château",
|
||||
"postcode": "75014",
|
||||
"score": 0.9797736363636363,
|
||||
"street": "Rue du Château",
|
||||
"type": "housenumber",
|
||||
"x": 650331.55,
|
||||
"y": 6859506.98,
|
||||
},
|
||||
"type": "Feature",
|
||||
},
|
||||
# id without "_" => no street_id
|
||||
{
|
||||
"geometry": {"coordinates": [2.323365, 48.833702], "type": "Point"},
|
||||
"properties": {
|
||||
"city": "Paris",
|
||||
"citycode": "75114",
|
||||
"context": "75, Paris, Île-de-France",
|
||||
"district": "Paris 14e Arrondissement",
|
||||
"housenumber": "169",
|
||||
"id": "123", # no "_" => no street_id
|
||||
"importance": 0.77751,
|
||||
"label": "169 Rue du Château 75014 Paris",
|
||||
"name": "169 Rue du Château",
|
||||
"postcode": "75014",
|
||||
"score": 0.9797736363636363,
|
||||
"street": "Rue du Château",
|
||||
"type": "housenumber",
|
||||
"x": 650331.55,
|
||||
"y": 6859506.98,
|
||||
},
|
||||
"type": "Feature",
|
||||
},
|
||||
],
|
||||
"licence": "ETALAB-2.0",
|
||||
"limit": 5,
|
||||
|
@ -193,16 +237,17 @@ def test_sectorization(mocked_get, app, base_adresse, sector):
|
|||
mocked_get.return_value = utils.FakedResponse(content=json.dumps(BAN), status_code=200)
|
||||
url = utils.generic_endpoint_url('base-adresse', 'search', slug=base_adresse.slug)
|
||||
addresses = app.get(url, params={'q': 'foo'}, status=200).json
|
||||
assert len(addresses) == 6
|
||||
assert len(addresses) == 8
|
||||
for address in addresses:
|
||||
assert 'sectors' not in address
|
||||
assert 'sectorization_error' not in address
|
||||
|
||||
base_adresse.sectors.add(sector)
|
||||
|
||||
# empty sector
|
||||
sector.sector_set.all().delete()
|
||||
addresses = app.get(url, params={'q': 'foo'}, status=200).json
|
||||
assert len(addresses) == 6
|
||||
assert len(addresses) == 8
|
||||
for address in addresses:
|
||||
assert address['sectors'] == {} # sector is empty
|
||||
|
||||
|
@ -217,6 +262,10 @@ def test_sectorization(mocked_get, app, base_adresse, sector):
|
|||
# bad address format, no street_id
|
||||
assert addresses[5]['sectors'] == {}
|
||||
assert addresses[5]['sectorization_error'] == 'missing street_id in address'
|
||||
assert addresses[6]['sectors'] == {}
|
||||
assert addresses[6]['sectorization_error'] == 'missing street_id in address'
|
||||
assert addresses[7]['sectors'] == {}
|
||||
assert addresses[7]['sectorization_error'] == 'missing street_id in address'
|
||||
|
||||
url = utils.generic_endpoint_url('base-adresse', 'sectors', slug=base_adresse.slug)
|
||||
for params in (None, {'id': 'ecole'}, {'q': 'scolaire'}):
|
||||
|
|
Loading…
Reference in New Issue