예제 #1
0
def test_negated_query():
    expected = Not(
        Exact(
            ExpressionWrapper(F('char_field'),
                              output_field=models.CharField()), Value('')))
    query_1 = ~Q(char_field='')
    query_2 = Q(~Q(char_field=''))
    expanded_1 = expand_query(FakeModel, query_1)
    expanded_2 = expand_query(FakeModel, query_2)
    assert are_equal(expected, expanded_1)
    assert are_equal(expected, expanded_2)
예제 #2
0
def test_char_expression() -> None:
    expected = Exact(
        Lower(
            ExpressionWrapper(F('char_field'),
                              output_field=models.CharField())), Value(''))
    query_1 = Q(char_field__lower='')
    query_2 = Q(char_field__lower__exact='')

    expanded_1 = expand_query(FakeModel, query_1)
    expanded_2 = expand_query(FakeModel, query_2)

    assert are_equal(expected, expanded_1)
    assert are_equal(expected, expanded_2)
예제 #3
0
def test_nested_query():
    expected = Exact(
        ExpressionWrapper(F('char_field'), output_field=models.CharField()),
        Value(''))
    query = Q(Q(char_field=''))
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
예제 #4
0
def test_combining_empty_query():
    # when Django combines an empty with an empty, it will only output one.
    expected = EmptyQuery()
    query = Q() & Q()
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert wrap(expanded).as_python(None)
예제 #5
0
def test_negated_empty_as_a_sibling():
    expected = Exact(
        ExpressionWrapper(F('int_field'), output_field=IntegerField()),
        Value(1))
    query = Q(~Q(), Q(int_field=1))
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert wrap(expanded).as_python(dict(int_field=1))
예제 #6
0
def test_combining_empty_with_query():
    expected = Exact(
        ExpressionWrapper(F('int_field'), output_field=IntegerField()),
        Value(1))
    query = Q() & Q(int_field=1)
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert wrap(expanded).as_python(dict(int_field=1))
예제 #7
0
def test_lookup_comparison() -> None:
    q1 = Exact(
        Lower(
            ExpressionWrapper(F('char_field'),
                              output_field=models.CharField())), Value(''))
    q2 = Exact(
        Lower(
            ExpressionWrapper(F('char_field'),
                              output_field=models.CharField())), Value(''))
    q3 = GreaterThan(
        ExpressionWrapper(F('int_field'), output_field=models.IntegerField()),
        Value(2))
    q4 = Exact(
        Lower(
            ExpressionWrapper(F('char_field'),
                              output_field=models.TextField())), Value(''))

    assert are_equal(q1, q2)
    assert not are_equal(q1, q3)
    assert not are_equal(q1, q4)
예제 #8
0
def test_and_query():
    expected = And(
        Exact(
            ExpressionWrapper(F('char_field'),
                              output_field=models.CharField()), Value('')),
        Exact(
            ExpressionWrapper(F('int_field'),
                              output_field=models.IntegerField()), Value(1)),
    )
    queries = [
        # Q(char_field='', int_field=1),  # Order is not guaranteed!
        Q(Q(char_field=''), int_field=1),
        Q(Q(char_field=''), Q(int_field=1)),
        Q(char_field='') & Q(int_field=1),
    ]
    for query in queries:
        expanded = expand_query(FakeModel, query)
        assert are_equal(expected, expanded)
예제 #9
0
def test_empty_in_empty():
    expected = EmptyQuery()
    query = Q(Q(Q(Q())))
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert expanded.as_python(None)
예제 #10
0
def test_multiple_empty_children():
    expected = EmptyQuery()
    query = Q(Q(), Q())
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert wrap(expanded).as_python(None)
예제 #11
0
def test_negated_empty_query():
    expected = EmptyQuery()
    query = ~Q()
    expanded = expand_query(FakeModel, query)
    assert are_equal(expected, expanded)
    assert wrap(expanded).as_python(None)