mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +03:00
move SearchListViewSet out of test class scope and reuse
This commit is contained in:
parent
67959d2909
commit
bfdf11583f
|
@ -79,6 +79,7 @@ class SearchFilter(BaseFilterBackend):
|
||||||
return form.cleaned_data[
|
return form.cleaned_data[
|
||||||
self.search_param
|
self.search_param
|
||||||
].replace(',', ' ').split()
|
].replace(',', ' ').split()
|
||||||
|
return []
|
||||||
|
|
||||||
def construct_search(self, field_name):
|
def construct_search(self, field_name):
|
||||||
lookup = self.lookup_prefixes.get(field_name[0])
|
lookup = self.lookup_prefixes.get(field_name[0])
|
||||||
|
|
|
@ -50,6 +50,13 @@ class SearchFilterSerializer(serializers.ModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class SearchListViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
|
queryset = SearchFilterModel.objects.all()
|
||||||
|
serializer_class = SearchFilterSerializer
|
||||||
|
filter_backends = (filters.SearchFilter,)
|
||||||
|
search_fields = ('title', 'text')
|
||||||
|
|
||||||
|
|
||||||
class SearchFilterTests(TestCase):
|
class SearchFilterTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
# Sequence of title/text is:
|
# Sequence of title/text is:
|
||||||
|
@ -183,31 +190,27 @@ class SearchFilterTests(TestCase):
|
||||||
]
|
]
|
||||||
|
|
||||||
def test_search_field_with_invalid_search_param(self):
|
def test_search_field_with_invalid_search_param(self):
|
||||||
class SearchListViewSet(viewsets.ReadOnlyModelViewSet):
|
|
||||||
queryset = SearchFilterModel.objects.all()
|
|
||||||
serializer_class = SearchFilterSerializer
|
|
||||||
filter_backends = (filters.SearchFilter,)
|
|
||||||
search_fields = ('title', 'text')
|
|
||||||
|
|
||||||
payload = {'invalid-search-param': 'ijk'}
|
payload = {'invalid-search-param': 'ijk'}
|
||||||
view = SearchListViewSet.as_view({'get': 'list'})
|
view = SearchListViewSet.as_view({'get': 'list'})
|
||||||
request = factory.get('/', payload)
|
request = factory.get('/', payload)
|
||||||
response = view(request)
|
response = view(request)
|
||||||
|
# ignores incorrect search param, returns all objects
|
||||||
assert len(response.data) == 10
|
assert len(response.data) == 10
|
||||||
|
|
||||||
def test_search_field_with_valid_search_param(self):
|
def test_search_field_with_valid_search_param(self):
|
||||||
class SearchListViewSet(viewsets.ReadOnlyModelViewSet):
|
|
||||||
queryset = SearchFilterModel.objects.all()
|
|
||||||
serializer_class = SearchFilterSerializer
|
|
||||||
filter_backends = (filters.SearchFilter,)
|
|
||||||
search_fields = ('title', 'text')
|
|
||||||
|
|
||||||
payload = {'search': 'ijk'}
|
payload = {'search': 'ijk'}
|
||||||
view = SearchListViewSet.as_view({'get': 'list'})
|
view = SearchListViewSet.as_view({'get': 'list'})
|
||||||
request = factory.get('/', payload)
|
request = factory.get('/', payload)
|
||||||
response = view(request)
|
response = view(request)
|
||||||
assert len(response.data) == 1
|
assert len(response.data) == 1
|
||||||
|
|
||||||
|
def test_search_field_with_non_existing_value(self):
|
||||||
|
payload = {'search': 'nothing-to-find'}
|
||||||
|
view = SearchListViewSet.as_view({'get': 'list'})
|
||||||
|
request = factory.get('/', payload)
|
||||||
|
response = view(request)
|
||||||
|
assert len(response.data) == 0
|
||||||
|
|
||||||
|
|
||||||
class AttributeModel(models.Model):
|
class AttributeModel(models.Model):
|
||||||
label = models.CharField(max_length=32)
|
label = models.CharField(max_length=32)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user