Beispiel #1
0
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())
Beispiel #2
0
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'
Beispiel #3
0
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))
Beispiel #4
0
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())
Beispiel #5
0
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')
Beispiel #6
0
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)"
Beispiel #7
0
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"
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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))
Beispiel #13
0
 class Meta:
     filters = Query.filters_from_model(model=Bar)
Beispiel #14
0
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']
Beispiel #15
0
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']
Beispiel #16
0
 class Meta:
     variables = Query.variables_from_model(model=Bar)
Beispiel #17
0
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']
Beispiel #18
0
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']
Beispiel #19
0
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())
Beispiel #20
0
def test_filter_model_mixup():
    q = Query(auto__model=TBar).bind(request=req('get'))
    assert q.filters.foo.model == TFoo