base adresse: add support for ?id= on streets endpoint (#32132)
This commit is contained in:
parent
595e4a1773
commit
fdf35728ad
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue