def test_element_limit(self): self.add_user(age=10) json = jsonify({ 'operator': 'and', 'value': [{ 'column': 'age', 'value': 10, 'operator': '==' }] }) with pytest.raises(ValueError): jsonquery(self.session, self.model, json, max_elements=1).one()
def test_depth_limit(self): self.add_user(age=10) json = jsonify({ 'operator': 'and', 'value': [{ 'column': 'age', 'value': 10, 'operator': '==' }] }) with self.assertRaises(ValueError): jsonquery(self.session, self.model, json, max_depth=1).one()
def test_depth_limit(self): self.add_user(age=10) json = jsonify({ 'operator': 'and', 'value': [ { 'column': 'age', 'value': 10, 'operator': '==' } ] }) with pytest.raises(ValueError): jsonquery(self.session, self.model, json, max_depth=1).one()
def test_multi_criteria_or(self): self.add_user(age=10, height=20) self.add_user(age=10, height=15) self.add_user(age=5, height=15) json = jsonify({ 'operator': 'or', 'value': [ { 'column': 'age', 'value': 10, 'operator': '==' }, { 'column': 'height', 'value': 15, 'operator': '==' } ] }) actual_users = jsonquery(self.session, self.model, json).all() expected_users = self.query.filter( or_(self.model.age == 10, self.model.height == 15)).all() assert 3 == len(actual_users) == len(expected_users) assert set(actual_users) == set(expected_users)
def test_basic_query(self): self.add_user(age=10) json = jsonify({'column': 'age', 'value': 10, 'operator': '=='}) actual_user = jsonquery(self.session, self.model, json).one() expected_user = self.query.filter(self.model.age == 10).one() assert actual_user is expected_user
def card(name): query = { 'column': 'processed_ascii_name', 'operator': 'ilike', 'value': name } card = jsonquery(db.session, models.Card, query).first() card_dict = controllers.with_fields(card) return jsonify(**card_dict)
def test_eq(self): json = jsonify({ 'column': 'foo', 'value': 10, 'operator': '==' }) actual_foo = jsonquery(self.session, self.model, json).one() expected_foo = self.query.filter(self.model.foo == 10).one() assert actual_foo is expected_foo
def test_ne(self): json = jsonify({ 'column': 'foo', 'value': 10, 'operator': '!=' }) actual_foos = jsonquery(self.session, self.model, json).all() expected_foos = self.query.filter(self.model.foo != 10).all() assert 2 == len(actual_foos) == len(expected_foos) assert set(actual_foos) == set(expected_foos)
def like_value(self, value): json = jsonify({ 'column': 'string', 'value': value, 'operator': 'like' }) actual_strings = jsonquery(self.session, self.model, json).all() expected_strings = self.query.filter( self.model.string.like(value)).all() return actual_strings, expected_strings
def test_basic_query(self): self.add_user(age=10) json = jsonify({ 'column': 'age', 'value': 10, 'operator': '==' }) actual_user = jsonquery(self.session, self.model, json).one() expected_user = self.query.filter(self.model.age == 10).one() assert actual_user is expected_user
def filtered_results(query, schema, paginate=True): q = json.loads(request.args.get('q', '{}')) query = jsonquery(query, q) if q else query # ensure deterministic ordering # (we need this for paginated results with queries involving subqueries) # We assume that all queriable tables have an 'id' column query = query.order_by('id') if not paginate: return serialize(query.all(), schema, many=True) page = q.get('page', 1) items_per_page = config.ITEMS_PER_PAGE pag = query.paginate(page, items_per_page) return PaginatedResult(pag, schema)
def test_basic_not(self): self.add_user(age=10) self.add_user(age=20) self.add_user(age=30) json = jsonify({ 'operator': 'not', 'value': { 'column': 'age', 'value': 10, 'operator': '==' } }) actual_users = jsonquery(self.session, self.model, json).all() expected_users = self.query.filter(not_(self.model.age == 10)).all() assert 2 == len(actual_users) == len(expected_users) assert set(actual_users) == set(expected_users)
def test_multi_criteria_and(self): self.add_user(age=10, height=20) self.add_user(age=10, height=15) self.add_user(age=5, height=15) json = jsonify({ 'operator': 'and', 'value': [{ 'column': 'age', 'value': 10, 'operator': '==' }, { 'column': 'height', 'value': 15, 'operator': '==' }] }) actual_user = jsonquery(self.session, self.model, json).one() expected_user = self.query.filter( and_(self.model.age == 10, self.model.height == 15)).one() assert actual_user is expected_user
def test_multi_criteria_or(self): self.add_user(age=10, height=20) self.add_user(age=10, height=15) self.add_user(age=5, height=15) json = jsonify({ 'operator': 'or', 'value': [{ 'column': 'age', 'value': 10, 'operator': '==' }, { 'column': 'height', 'value': 15, 'operator': '==' }] }) actual_users = jsonquery(self.session, self.model, json).all() expected_users = self.query.filter( or_(self.model.age == 10, self.model.height == 15)).all() assert 3 == len(actual_users) == len(expected_users) assert set(actual_users) == set(expected_users)
def test_multi_criteria_and(self): self.add_user(age=10, height=20) self.add_user(age=10, height=15) self.add_user(age=5, height=15) json = jsonify({ 'operator': 'and', 'value': [ { 'column': 'age', 'value': 10, 'operator': '==' }, { 'column': 'height', 'value': 15, 'operator': '==' } ] }) actual_user = jsonquery(self.session, self.model, json).one() expected_user = self.query.filter( and_(self.model.age == 10, self.model.height == 15)).one() assert actual_user is expected_user
def test_ge(self): json = jsonify({'column': 'foo', 'value': 15, 'operator': '>='}) actual_foos = jsonquery(self.session, self.model, json).all() expected_foos = self.query.filter(self.model.foo >= 15).all() assert 2 == len(actual_foos) == len(expected_foos) assert set(actual_foos) == set(expected_foos)
def test_gt(self): json = jsonify({'column': 'foo', 'value': 15, 'operator': '>'}) actual_foo = jsonquery(self.session, self.model, json).one() expected_foo = self.query.filter(self.model.foo > 15).one() assert actual_foo is expected_foo