Example #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)
Example #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)
Example #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)
Example #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)
Example #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))
Example #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))
Example #7
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)
Example #8
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)
Example #9
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)
Example #10
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)
Example #11
0
 def as_python(self, obj: Model) -> bool:
     expanded_query = expand_query(obj._meta.model, self.expression)
     wrapped = wrap(expanded_query)
     return cast(SupportsPythonComparison, wrapped).as_python(obj)