def test_filtering(self): users, notes = self.get_users_and_notes() # do a simple filter on a related model resp = self.app.get('/api/note/?user=%s&ordering=id' % self.normal.id) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.normal.note_set.order_by(Note.id)) # do a filter following a join resp = self.app.get('/api/note/?user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.admin.note_set.order_by(Note.id)) # filter multiple fields notes = list(self.admin.note_set.order_by(Note.id)) third_id = notes[3].id resp = self.app.get( '/api/note/?user__username=admin&id__lt=%s&ordering=id' % third_id) resp_json = self.response_json(resp) self.assertAPINotes(resp_json, notes[:3]) # do a filter using multiple values resp = self.app.get( '/api/note/?user__username=admin&user__username=inactive&ordering=id' ) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes( resp_json, Note.filter(user__in=[self.admin, self.inactive]).order_by( Note.id)) # do a filter with a negation resp = self.app.get('/api/note/?-user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPINotes( resp_json, Note.filter(user__in=[self.normal, self.inactive]).order_by( Note.id))
def test_filtering(self): users, notes = self.get_users_and_notes() # do a simple filter on a related model resp = self.app.get('/api/note/?user=%s&ordering=id' % self.normal.id) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.normal.note_set.order_by(Note.id)) # do a filter following a join resp = self.app.get('/api/note/?user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.admin.note_set.order_by(Note.id)) # filter multiple fields notes = list(self.admin.note_set.order_by(Note.id)) third_id = notes[3].id resp = self.app.get('/api/note/?user__username=admin&id__lt=%s&ordering=id' % third_id) resp_json = self.response_json(resp) self.assertAPINotes(resp_json, notes[:3]) # do a filter using multiple values resp = self.app.get('/api/note/?user__username=admin&user__username=inactive&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, Note.filter(user__in=[self.admin, self.inactive]).order_by(Note.id)) # do a filter with a negation resp = self.app.get('/api/note/?-user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPINotes(resp_json, Note.filter(user__in=[ self.normal, self.inactive]).order_by(Note.id))
def test_filtering(self): users, notes = self.get_users_and_notes() # do a simple filter on a related model resp = self.app.get('/api/note/?user=%s&ordering=id' % self.normal.id) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.normal.note_set.order_by(Note.id)) # do a filter following a join resp = self.app.get('/api/note/?user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.admin.note_set.order_by(Note.id)) # filter multiple fields notes = list(self.admin.note_set.order_by(Note.id)) third_id = notes[3].id resp = self.app.get('/api/note/?user__username=admin&id__lt=%s&ordering=id' % third_id) resp_json = self.response_json(resp) self.assertAPINotes(resp_json, notes[:3]) # do a filter using multiple values resp = self.app.get('/api/note/?user__username=admin&user__username=inactive&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, Note.filter(user__in=[self.admin, self.inactive]).order_by(Note.id)) # do a filter with a negation resp = self.app.get('/api/note/?-user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPINotes(resp_json, Note.filter(user__in=[ self.normal, self.inactive]).order_by(Note.id)) # do a filter with an IN operator and multiple IDs # https://github.com/coleifer/flask-peewee/issues/112 resp = self.app.get('/api/note/?id__in=1,2,5') resp_json = self.response_json(resp) self.assertAPINotes(resp_json, Note.filter(id__in=[1,2,5]).order_by(Note.id)) # also test that the IN operator works with list of strings resp = self.app.get('/api/user/?username__in=admin,normal') resp_json = self.response_json(resp) self.assertAPIUsers(resp_json, User.filter(username__in=['admin', 'normal']).order_by(User.id))
def test_filtering(self): users, notes = self.get_users_and_notes() # do a simple filter on a related model resp = self.app.get('/api/note/?user=%s&ordering=id' % self.normal.id) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.normal.note_set.order_by(Note.id)) # do a filter following a join resp = self.app.get('/api/note/?user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes(resp_json, self.admin.note_set.order_by(Note.id)) # filter multiple fields notes = list(self.admin.note_set.order_by(Note.id)) third_id = notes[3].id resp = self.app.get( '/api/note/?user__username=admin&id__lt=%s&ordering=id' % third_id) resp_json = self.response_json(resp) self.assertAPINotes(resp_json, notes[:3]) # do a filter using multiple values resp = self.app.get( '/api/note/?user__username=admin&user__username=inactive&ordering=id' ) resp_json = self.response_json(resp) self.assertAPIMeta(resp_json, { 'model': 'note', 'previous': '', 'next': '', 'page': 1, }) self.assertAPINotes( resp_json, Note.filter(user__in=[self.admin, self.inactive]).order_by( Note.id)) # do a filter with a negation resp = self.app.get('/api/note/?-user__username=admin&ordering=id') resp_json = self.response_json(resp) self.assertAPINotes( resp_json, Note.filter(user__in=[self.normal, self.inactive]).order_by( Note.id)) # do a filter with an IN operator and multiple IDs # https://github.com/coleifer/flask-peewee/issues/112 resp = self.app.get('/api/note/?id__in=1,2,5') resp_json = self.response_json(resp) self.assertAPINotes(resp_json, Note.filter(id__in=[1, 2, 5]).order_by(Note.id)) # also test that the IN operator works with list of strings resp = self.app.get('/api/user/?username__in=admin,normal') resp_json = self.response_json(resp) self.assertAPIUsers( resp_json, User.filter(username__in=['admin', 'normal']).order_by(User.id))