Projet

Général

Profil

0003-opendatasoft-do-not-send-sort-parameter-with-q-54442.patch

Nicolas Roche, 28 juillet 2021 16:04

Télécharger (4,04 ko)

Voir les différences:

Subject: [PATCH 3/3] opendatasoft: do not send sort parameter with q (#54442)

 passerelle/apps/opendatasoft/models.py | 2 +-
 tests/test_opendatasoft.py             | 7 ++-----
 2 files changed, 3 insertions(+), 6 deletions(-)
passerelle/apps/opendatasoft/models.py
75 75
        if id is not None:
76 76
            params.update({'q': 'recordid:%s' % id})
77 77
        elif q is not None:
78 78
            params.update({'q': q})
79 79
        if self.api_key:
80 80
            params.update({'apikey': self.api_key})
81 81
        if limit:
82 82
            params.update({'rows': limit})
83
        if sort:
83
        if sort and not (q or id):
84 84
            params.update({'sort': sort})
85 85
        params.update(urlparse.parse_qs(filter_expression))
86 86

  
87 87
        result_response = self.requests.get(url, params=params)
88 88
        err_desc = result_response.json().get('error')
89 89
        if err_desc:
90 90
            raise APIError(err_desc, http_status=200)
91 91

  
tests/test_opendatasoft.py
236 236
        'q': "rue de l'aubepine",
237 237
        'limit': 3,
238 238
    }
239 239
    mocked_get.return_value = utils.FakedResponse(content=FAKED_CONTENT_Q_SEARCH, status_code=200)
240 240
    resp = app.get(endpoint, params=params, status=200)
241 241
    assert mocked_get.call_args[1]['params'] == {
242 242
        'apikey': 'my_secret',
243 243
        'dataset': 'referentiel-adresse-test',
244
        'sort': '-nom_rue',
245 244
        'q': "rue de l'aubepine",
246 245
        'rows': '3',
247 246
    }
248 247
    assert not resp.json['err']
249 248
    assert len(resp.json['data']) == 3
250 249
    # check order is kept
251 250
    assert [x['id'] for x in resp.json['data']] == [
252 251
        'e00cf6161e52a4c8fe510b2b74d4952036cb3473',
......
326 325
    }
327 326
    mocked_get.return_value = utils.FakedResponse(content=FAKED_CONTENT_Q_SEARCH, status_code=200)
328 327
    resp = app.get(endpoint, params=params, status=200)
329 328
    assert mocked_get.call_args[1]['params'] == {
330 329
        'apikey': 'my_secret',
331 330
        'dataset': 'referentiel-adresse-test',
332 331
        'refine.source': ['Ville et Eurométropole de Strasbourg'],
333 332
        'exclude.numero': ['42', '43'],
334
        'sort': '-nom_rue',
335 333
        'q': "rue de l'aubepine",
336 334
        'rows': '3',
337 335
    }
338 336
    assert not resp.json['err']
339 337
    assert len(resp.json['data']) == 3
340 338
    # check order is kept
341 339
    assert [x['id'] for x in resp.json['data']] == [
342 340
        'e00cf6161e52a4c8fe510b2b74d4952036cb3473',
......
357 355
def test_query_q_using_id(mocked_get, app, query):
358 356
    endpoint = '/opendatasoft/my_connector/q/my_query/'
359 357
    params = {
360 358
        'id': '7cafcd5c692773e8b863587b2d38d6be82e023d8',
361 359
    }
362 360
    mocked_get.return_value = utils.FakedResponse(content=FAKED_CONTENT_ID_SEARCH, status_code=200)
363 361
    resp = app.get(endpoint, params=params, status=200)
364 362
    assert mocked_get.call_args[1]['params'] == {
365
        'dataset': 'referentiel-adresse-test',
366
        'q': 'recordid:7cafcd5c692773e8b863587b2d38d6be82e023d8',
367 363
        'apikey': 'my_secret',
364
        'dataset': 'referentiel-adresse-test',
368 365
        'refine.source': ['Ville et Eurométropole de Strasbourg'],
369 366
        'exclude.numero': ['42', '43'],
370
        'sort': '-nom_rue',
367
        'q': 'recordid:7cafcd5c692773e8b863587b2d38d6be82e023d8',
371 368
    }
372 369
    assert len(resp.json['data']) == 1
373 370
    assert resp.json['data'][0]['text'] == "19 RUE DE L'AUBEPINE Lipsheim"
374 371

  
375 372

  
376 373
def test_opendatasoft_query_unicity(admin_user, app, connector, query):
377 374
    connector2 = OpenDataSoft.objects.create(
378 375
        slug='my_connector2',
379
-