def test_empty(self): backend = DjangoFilterBackend( Place.objects.all(), context={'context': 'here'}, ) assert backend.empty().count() == 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_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.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)
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
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")
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_bind(self): backend = DjangoFilterBackend(Place.objects.all()) assert backend.specs == [] backend.bind([1, 2]) assert backend.specs == [1, 2]
def test_empty(self): backend = DjangoFilterBackend(Place.objects.all(), context={"context": "here"}) assert backend.empty().count() == 0
def test_prepare_spec(self): backend = DjangoFilterBackend(Place.objects.all()) spec = backend._prepare_spec(FilterSpec(["name"], "exact", "value")) assert spec == "name__exact"