def test_invalid_form_data(): query2 = Query( filters__bazaar=Filter.integer(attr='quux__bar__bazaar', field__include=True), ).bind(request=req('get', bazaar='asds')) assert query2.get_query_string() == '' assert repr(query2.get_q()) == repr(Q())
def test_boolean_filter(): for i in range(3): BooleanFromModelTestModel.objects.create(b=True) for i in range(5): BooleanFromModelTestModel.objects.create(b=False) assert ( BooleanFromModelTestModel.objects.filter( Query(auto__model=BooleanFromModelTestModel).bind(request=req('get', b='1')).get_q() ).count() == 3 ) assert ( BooleanFromModelTestModel.objects.filter( Query(auto__model=BooleanFromModelTestModel).bind(request=req('get', b='0')).get_q() ).count() == 5 ) with pytest.raises(QueryException) as e: Query(auto__model=BooleanFromModelTestModel).bind(request=req('get', **{'-query': 'b>0'})).get_q() assert str(e.value) == 'Invalid operator ">" for boolean filter. The only valid operator is "=".' with pytest.raises(ValueError) as e: Query(auto__model=BooleanFromModelTestModel).bind(request=req('get', **{'-query': 'b=9'})).get_q() assert str(e.value) == '9 is not a valid boolean value'
def test_filter_on_camel_case(): CamelCaseFieldModel.objects.create(camelCaseField=True) CamelCaseFieldModel.objects.create(camelCaseField=False) CamelCaseFieldModel.objects.create(camelCaseField=False) query = Query(auto__model=CamelCaseFieldModel).bind() assert repr(query.parse_query_string('camelCaseField=1')) == repr(Q(camelCaseField__exact=True))
def test_invalid_form_data(): query2 = Query( variables__bazaar=Variable.integer(attr='quux__bar__bazaar', form__include=True), ).bind(request=req('get', bazaar='asds')) assert query2.to_query_string() == '' assert repr(query2.to_q()) == repr(Q())
def test_none_attr_with_value_to_q(): q = Query(filters__bazaar=Filter( attr=None, value_to_q=lambda filter, op, value_string_or_f: Q(bazonk= value_string_or_f), field__include=True, ), ).bind(request=req('get', bazaar='foo')) assert q.get_q() == Q(bazonk='foo')
def test_none_attr(): # pragma: no cover with pytest.raises(AssertionError) as e: Query( filters__bazaar=Filter(attr=None, field__include=True), ).bind(request=req('get', bazaar='foo')) assert str(e.value) == "bazaar cannot be a part of a query, it has no attr or value_to_q so we don't know what to search for. If you want to include it anyway set check_filterable=False (filter__check_filterable=False for a Column)"
def test_none_attr(): with pytest.raises(AssertionError) as e: Query( filters__bazaar=Filter(attr=None, field__include=True), ).bind(request=req('get', bazaar='foo')) assert str(e.value) == "bazaar cannot be a part of a query, it has no attr or value_to_q so we don't know what to search for"
def test_invalid_filter(): q = Query(filters__bazaar=Filter(), ).bind(request=req('get')) query2 = Query(filters__bazaar=Filter(), ).bind( request=req('get', **{q.get_advanced_query_param(): 'not_bazaar=asd'})) with pytest.raises(QueryException) as e: query2.get_q() assert 'Unknown filter "not_bazaar"' in str(e)
def test_invalid_variable(): q = Query( variables__bazaar=Variable(), ).bind(request=req('get')) query2 = Query( variables__bazaar=Variable(), ).bind(request=req('get', **{q.advanced_query_param():'not_bazaar=asd'})) with pytest.raises(QueryException) as e: query2.to_q() assert 'Unknown variable "not_bazaar"' in str(e)
def test_invalid_value(): q = Query( filters__bazaar=Filter.integer(value_to_q=lambda filter, op, value_string_or_f: None), ).bind(request=req('get')) request = req('get', **{q.get_advanced_query_param(): 'bazaar=asd'}) query2 = Query( filters__bazaar=Filter.integer(value_to_q=lambda filter, op, value_string_or_f: None), ).bind(request=request) with pytest.raises(QueryException) as e: query2.get_q() assert 'Unknown value "asd" for filter "bazaar"' in str(e)
def test_invalid_value(): q = Query( variables__bazaar=Variable.integer( value_to_q=lambda variable, op, value_string_or_f: None ), ).bind(request=req('get')) request = req('get', **{q.advanced_query_param(): 'bazaar=asd'}) query2 = Query( variables__bazaar=Variable.integer( value_to_q=lambda variable, op, value_string_or_f: None ), ).bind(request=request) with pytest.raises(QueryException) as e: query2.to_q() assert 'Unknown value "asd" for variable "bazaar"' in str(e)
def test_filter_api(): Foo.objects.create(foo=5) Foo.objects.create(foo=7) query = Query(auto__model=Foo).bind(request=req('get')) assert list(query.filter(query=query, rows=Foo.objects.all())) == list(Foo.objects.all()) def refined_filter(query, rows, **_): assert isinstance(query, Query) return rows.filter(foo=5) query = Query(auto__model=Foo, filter=refined_filter).bind(request=req('get')) assert list(query.filter(query=query, rows=Foo.objects.all())) == list(Foo.objects.filter(foo=5))
class Meta: filters = Query.filters_from_model(model=Bar)
def test_from_model_with_queryset(): t = Query(auto__rows=Foo.objects.all()).bind(request=None) assert list(declared_members(t).filters.keys()) == ['id', 'foo'] assert list(t.filters.keys()) == ['foo']
def test_from_model_with_model_class(): t = Query(auto__model=Foo).bind(request=None) assert list(declared_members(t).filters.keys()) == ['id', 'foo'] assert list(t.filters.keys()) == ['foo']
class Meta: variables = Query.variables_from_model(model=Bar)
def test_from_model_with_queryset(): t = Query.from_model(rows=Foo.objects.all()).bind(request=None) assert list(t.declared_variables.keys()) == ['id', 'foo'] assert list(t.variables.keys()) == ['foo']
def test_from_model_with_model_class(): t = Query.from_model(model=Foo).bind(request=None) assert list(t.declared_variables.keys()) == ['id', 'foo'] assert list(t.variables.keys()) == ['foo']
def test_none_attr(): query2 = Query( variables__bazaar=Variable(attr=None, form__include=True), ).bind(request=req('get', bazaar='foo')) assert repr(query2.to_q()) == repr(Q())
def test_filter_model_mixup(): q = Query(auto__model=TBar).bind(request=req('get')) assert q.filters.foo.model == TFoo