def test_empty(self):
        backend = DjangoFilterBackend(
            Place.objects.all(),
            context={'context': 'here'},
        )

        assert backend.empty().count() == 0
    def test_empty(self):
        backend = DjangoFilterBackend(
            Place.objects.all(),
            context={'context': 'here'},
        )

        assert backend.empty().count() == 0
Exemple #3
0
    def test_excludes(self):
        backend = DjangoFilterBackend(Place.objects.all())
        backend.bind([
            FilterSpec(['name'], 'exact', 'value', False),
            FilterSpec(['address'], 'contains', 'value', True),
        ])

        assert list(backend.excludes) == [
            FilterSpec(['address'], 'contains', 'value', True),
        ]
    def test_excludes(self):
        backend = DjangoFilterBackend(Place.objects.all())
        backend.bind([
            FilterSpec(["name"], "exact", "value", False),
            FilterSpec(["address"], "contains", "value", True),
        ])

        assert list(backend.excludes) == [
            FilterSpec(["address"], "contains", "value", True)
        ]
    def test_excludes(self):
        backend = DjangoFilterBackend(Place.objects.all())
        backend.bind([
            FilterSpec(['name'], 'exact', 'value', False),
            FilterSpec(['address'], 'contains', 'value', True),
        ])

        assert list(backend.excludes) == [
            FilterSpec(['address'], 'contains', 'value', True),
        ]
    def test_filter_to_many(self):
        qs = mock.Mock()

        backend = DjangoFilterBackend(qs)
        backend.model = Place
        backend.bind([
            FilterSpec(['restaurant', 'waiter', 'name'], 'exact', 'value', False),
        ])

        result = backend.filter()

        assert result == qs.filter.return_value.distinct.return_value
        qs.filter.assert_called_once_with(restaurant__waiter__name__exact='value')
Exemple #7
0
    def test_filter(self):
        qs = mock.Mock()

        backend = DjangoFilterBackend(qs)
        backend.bind([
            FilterSpec(['name'], 'exact', 'value', False),
            FilterSpec(['address'], 'contains', 'value', True),
        ])

        result = backend.filter()

        assert result == qs.filter.return_value.exclude.return_value
        qs.filter.assert_called_once_with(name__exact='value')
        qs.filter.return_value.exclude.assert_called_once_with(address__contains='value')
    def test_filter_callable_specs(self):
        qs = mock.Mock()

        def foo(queryset, spec):
            return queryset.filter(spec)

        spec = FilterSpec(['name'], 'exact', 'value', False, foo)
        backend = DjangoFilterBackend(qs)
        backend.bind([spec])

        result = backend.filter()

        assert result == qs.filter.return_value
        qs.filter.assert_called_once_with(spec)
    def test_filter_callable_specs(self):
        qs = mock.Mock()

        def foo(queryset, spec):
            return queryset.filter(spec)

        spec = FilterSpec(["name"], "exact", "value", False, foo)
        backend = DjangoFilterBackend(qs)
        backend.bind([spec])

        result = backend.filter()

        assert result == qs.filter.return_value
        qs.filter.assert_called_once_with(spec)
Exemple #10
0
    def test_init(self):
        backend = DjangoFilterBackend(
            Place.objects.all(),
            context={'context': 'here'},
        )

        assert backend.model is Place
        assert backend.context == {'context': 'here'}
    def test_get_form_field_no_form_field(self):
        class Foo(CallableFilter):
            def filter_foo_for_django(self):
                pass

        f = Foo()
        f.filter_backend = DjangoFilterBackend(queryset=[])

        with pytest.raises(AssertionError):
            f.get_form_field("foo")
    def test_get_form_field_default_form_field(self):
        field = forms.CharField()

        class Foo(CallableFilter):
            def filter_foo_for_django(self):
                pass

        f = Foo(form_field=field, lookups=["exact"])
        f.filter_backend = DjangoFilterBackend(queryset=[])

        assert f.get_form_field("foo") is field
    def test_get_form_field(self):
        field = forms.CharField()

        class Foo(CallableFilter):
            @form_field_for_filter(field)
            def filter_foo_for_django(self):
                pass

        f = Foo()
        f.filter_backend = DjangoFilterBackend(queryset=[])

        assert f.get_form_field("foo") is field
Exemple #14
0
    def test_get_spec(self):
        class Foo(CallableFilter):
            @form_field_for_filter(forms.CharField())
            def filter_foo_for_django(self):
                pass

        p = Filter(source='parent', form_field=forms.CharField())
        p.filter_backend = DjangoFilterBackend(queryset=[])
        f = Foo(source='child', default_lookup='foo')
        f.parent = p

        assert f.get_spec(LookupConfig('key', 'value')) == FilterSpec(
            ['child'], 'foo', 'value', False, f.filter_foo_for_django)
    def test_get_spec(self):
        class Foo(CallableFilter):
            @form_field_for_filter(forms.CharField())
            def filter_foo_for_django(self):
                pass

        p = Filter(source="parent", form_field=forms.CharField())
        p.filter_backend = DjangoFilterBackend(queryset=[])
        f = Foo(source="child", default_lookup="foo")
        f.parent = p

        assert f.get_spec(LookupConfig("key", "value")) == FilterSpec(
            ["child"], "foo", "value", False, f.filter_foo_for_django
        )
    def test_filter_to_many(self):
        qs = mock.Mock()

        backend = DjangoFilterBackend(qs)
        backend.model = Place
        backend.bind([
            FilterSpec(["restaurant", "waiter", "name"], "exact", "value",
                       False)
        ])

        result = backend.filter()

        assert result == qs.filter.return_value.distinct.return_value
        qs.filter.assert_called_once_with(
            restaurant__waiter__name__exact="value")
    def test_filter_to_many(self):
        qs = mock.Mock()

        backend = DjangoFilterBackend(qs)
        backend.model = Place
        backend.bind([
            FilterSpec(['restaurant', 'waiter', 'name'], 'exact', 'value',
                       False),
        ])

        result = backend.filter()

        assert result == qs.filter.return_value.distinct.return_value
        qs.filter.assert_called_once_with(
            restaurant__waiter__name__exact='value')
    def test_filter(self):
        qs = mock.Mock()

        backend = DjangoFilterBackend(qs)
        backend.model = Place
        backend.bind([
            FilterSpec(["name"], "exact", "value", False),
            FilterSpec(["address"], "contains", "value", True),
        ])

        result = backend.filter()

        assert result == qs.filter.return_value.exclude.return_value
        qs.filter.assert_called_once_with(name__exact="value")
        qs.filter.return_value.exclude.assert_called_once_with(
            address__contains="value")
Exemple #19
0
    def test_prepare_spec(self):
        backend = DjangoFilterBackend(Place.objects.all())
        spec = backend._prepare_spec(FilterSpec(['name'], 'exact', 'value'))

        assert spec == 'name__exact'
    def test_get_model(self):
        backend = DjangoFilterBackend(Place.objects.all())

        assert backend.get_model() is Place
    def test_init(self):
        backend = DjangoFilterBackend(Place.objects.all(),
                                      context={"context": "here"})

        assert backend.model is Place
        assert backend.context == {"context": "here"}
    def test_prepare_spec(self):
        backend = DjangoFilterBackend(Place.objects.all())
        spec = backend._prepare_spec(FilterSpec(['name'], 'exact', 'value'))

        assert spec == 'name__exact'
    def test_bind(self):
        backend = DjangoFilterBackend(Place.objects.all())

        assert backend.specs == []
        backend.bind([1, 2])
        assert backend.specs == [1, 2]
    def test_get_model(self):
        backend = DjangoFilterBackend(Place.objects.all())

        assert backend.get_model() is Place
    def test_empty(self):
        backend = DjangoFilterBackend(Place.objects.all(),
                                      context={"context": "here"})

        assert backend.empty().count() == 0
    def test_bind(self):
        backend = DjangoFilterBackend(Place.objects.all())

        assert backend.specs == []
        backend.bind([1, 2])
        assert backend.specs == [1, 2]
    def test_prepare_spec(self):
        backend = DjangoFilterBackend(Place.objects.all())
        spec = backend._prepare_spec(FilterSpec(["name"], "exact", "value"))

        assert spec == "name__exact"