Projet

Général

Profil

0001-jsondatastore-attribute-filter-on-data-endpoint-3578.patch

Nicolas Roche, 07 octobre 2019 17:16

Télécharger (2,49 ko)

Voir les différences:

Subject: [PATCH] jsondatastore: attribute filter on data endpoint (#35780)

 passerelle/apps/jsondatastore/models.py |  9 +++++++++
 tests/test_jsondatastore.py             | 18 ++++++++++++++++++
 2 files changed, 27 insertions(+)
passerelle/apps/jsondatastore/models.py
88 88
        objects = JsonData.objects.filter(datastore=self)
89 89
        if name_id is not None:
90 90
            objects = objects.filter(name_id=name_id)
91
        else:
92
            params = request.GET
93
            try:
94
                key, value = params.items()[0]
95
            except IndexError:
96
                pass  # return whole list
97
            else:
98
                objects = [o for o in objects if o.content.get(key) == value]
99

  
91 100
        return {'data': [x.to_json() for x in objects]}
92 101

  
93 102
    @endpoint(perm='can_access', methods=['post'], name='data',
tests/test_jsondatastore.py
193 193
    resp = app.get('/jsondatastore/foobar/data/')
194 194
    assert resp.json['data'][0]['creation_datetime'] == encoder.default(creation_datetime)
195 195
    assert resp.json['data'][0]['last_update_datetime'] == encoder.default(last_update_datetime)
196

  
197

  
198
def test_jsondatastore_data_filter(app, jsondatastore):
199
    resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'})
200
    uuid1 = resp.json['id']
201
    resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'baz'})
202
    uuid2 = resp.json['id']
203
    resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'})
204
    uuid3 = resp.json['id']
205

  
206
    resp = app.get('/jsondatastore/foobar/data/', params={'foo': 'bar'})
207
    assert sorted([d['id'] for d in resp.json['data']]) == sorted([uuid1, uuid3])
208

  
209
    resp = app.get('/jsondatastore/foobar/data/', params={'foo': 'baz'})
210
    assert [d['id'] for d in resp.json['data']] == [uuid2]
211

  
212
    resp = app.get('/jsondatastore/foobar/data/', params={'arf': 'bar'})
213
    assert [d['id'] for d in resp.json['data']] == []
196
-