Projet

Général

Profil

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

Nicolas Roche, 08 octobre 2019 08:32

Télécharger (2,75 ko)

Voir les différences:

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

 passerelle/apps/jsondatastore/models.py |  2 ++
 tests/test_jsondatastore.py             | 28 +++++++++++++++++++++++++
 2 files changed, 30 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
        for key, value in kwargs.items():
92
            objects = [o for o in objects if o.content.get(key) == value]
91 93
        return {'data': [x.to_json() for x in objects]}
92 94

  
93 95
    @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_list_by_attribute_filter(app, jsondatastore):
199
    resp = app.post_json('/jsondatastore/foobar/data/create?name_id=name1',
200
                         params={'key1': 'val1', 'key2': 'foo'})
201
    uuid1 = resp.json['id']
202
    resp = app.post_json('/jsondatastore/foobar/data/create?name_id=name2',
203
                         params={'key1': 'val1', 'key2': 'val2'})
204
    uuid2 = resp.json['id']
205
    resp = app.post_json('/jsondatastore/foobar/data/create?name_id=name1',
206
                         params={'key1': 'val1', 'key2': 'val2'})
207
    uuid3 = resp.json['id']
208

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

  
213
    resp = app.get('/jsondatastore/foobar/data/',
214
                   params={'key1': 'val1', 'key2': 'val2'})
215
    assert sorted([d['id'] for d in resp.json['data']]) == sorted([uuid2, uuid3])
216

  
217
    resp = app.get('/jsondatastore/foobar/data/?name_id=name1',
218
                   params={'key2': 'val2'})
219
    assert [d['id'] for d in resp.json['data']] == [uuid3]
220

  
221
    resp = app.get('/jsondatastore/foobar/data/',
222
                   params={'key3': ''})
223
    assert [d['id'] for d in resp.json['data']] == []
196
-