base adresse: add support for ?id= on streets endpoint (#32132)

This commit is contained in:
Frédéric Péters 2019-04-10 08:31:10 +02:00
parent 595e4a1773
commit fdf35728ad
2 changed files with 39 additions and 5 deletions

View File

@ -100,12 +100,19 @@ class BaseAdresse(BaseResource):
return result
@endpoint()
def streets(self, request, zipcode=None, q=None, distinct=True, page_limit=None):
def streets(self, request, zipcode=None, q=None, id=None, distinct=True, page_limit=None):
result = []
streets = StreetModel.objects.all()
if q:
unaccented_q = unicodedata.normalize('NFKD', q).encode('ascii', 'ignore').lower()
streets = streets.filter(unaccent_name__icontains=unaccented_q)
if id is not None:
try:
id = int(id)
except ValueError:
return {'data': []}
streets = StreetModel.objects.filter(id=id)
else:
streets = StreetModel.objects.all()
if q:
unaccented_q = unicodedata.normalize('NFKD', q).encode('ascii', 'ignore').lower()
streets = streets.filter(unaccent_name__icontains=unaccented_q)
if zipcode:
streets = streets.filter(zipcode__startswith=zipcode)

View File

@ -160,6 +160,33 @@ def test_base_adresse_streets_unaccent(app, base_adresse, street):
assert result['zipcode'] == street.zipcode
assert result['id'] == street.id
def test_base_adresse_streets_get_by_id(app, base_adresse, street):
for i in range(10):
# create additional streets
StreetModel.objects.create(city=u'Chambéry',
name=u'Une rue différente',
zipcode=str(73001 + i),
type='street',
citycode=str(73001 + i))
resp = app.get('/base-adresse/%s/streets?q=une rue tres acc' % base_adresse.slug)
assert 'data' in resp.json
result = resp.json['data'][0]
street_id = result['id']
resp = app.get('/base-adresse/%s/streets?id=%s' % (base_adresse.slug, street_id))
assert len(resp.json['data']) == 1
result2 = resp.json['data'][0]
assert result2['text'] == result['text']
# non integer id.
resp = app.get('/base-adresse/%s/streets?id=%s' % (base_adresse.slug, 'XXX'))
assert len(resp.json['data']) == 0
# integer but without match.
resp = app.get('/base-adresse/%s/streets?id=%s' % (base_adresse.slug, '-20'))
assert len(resp.json['data']) == 0
@mock.patch('passerelle.utils.Request.get')
def test_base_adresse_command_update(mocked_get, db, base_adresse):