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[
|
||||
self.search_param
|
||||
].replace(',', ' ').split()
|
||||
return []
|
||||
|
||||
def construct_search(self, field_name):
|
||||
lookup = self.lookup_prefixes.get(field_name[0])
|
||||
|
|
|
@ -50,6 +50,13 @@ class SearchFilterSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
|
||||
class SearchListViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = SearchFilterModel.objects.all()
|
||||
serializer_class = SearchFilterSerializer
|
||||
filter_backends = (filters.SearchFilter,)
|
||||
search_fields = ('title', 'text')
|
||||
|
||||
|
||||
class SearchFilterTests(TestCase):
|
||||
def setUp(self):
|
||||
# Sequence of title/text is:
|
||||
|
@ -183,31 +190,27 @@ class SearchFilterTests(TestCase):
|
|||
]
|
||||
|
||||
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'}
|
||||
view = SearchListViewSet.as_view({'get': 'list'})
|
||||
request = factory.get('/', payload)
|
||||
response = view(request)
|
||||
# ignores incorrect search param, returns all objects
|
||||
assert len(response.data) == 10
|
||||
|
||||
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'}
|
||||
view = SearchListViewSet.as_view({'get': 'list'})
|
||||
request = factory.get('/', payload)
|
||||
response = view(request)
|
||||
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):
|
||||
label = models.CharField(max_length=32)
|
||||
|
|
Loading…
Reference in New Issue
Block a user