diff options
| author | Tom Christie | 2014-03-07 07:36:37 +0000 | 
|---|---|---|
| committer | Tom Christie | 2014-03-07 07:36:37 +0000 | 
| commit | 35787fb3ca3081d13b7e97cd540e3c30a1c90f18 (patch) | |
| tree | d8282959920b89316ea18daff09e492f75658c82 /rest_framework/tests | |
| parent | d48e8ca8d6372ae73a6b420e92c546b017fd0b46 (diff) | |
| parent | 29f5ce7aeb57abde3924527f63bb761e0c2342d3 (diff) | |
| download | django-rest-framework-35787fb3ca3081d13b7e97cd540e3c30a1c90f18.tar.bz2 | |
Merge pull request #1460 from inglesp/issue1434
Add SEARCH_PARAM and ORDERING_PARAM to settings
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/test_filters.py | 42 | ||||
| -rw-r--r-- | rest_framework/tests/utils.py | 25 | 
2 files changed, 66 insertions, 1 deletions
diff --git a/rest_framework/tests/test_filters.py b/rest_framework/tests/test_filters.py index dd5d8e42..23226bbc 100644 --- a/rest_framework/tests/test_filters.py +++ b/rest_framework/tests/test_filters.py @@ -7,9 +7,11 @@ from django.test import TestCase  from django.utils import unittest  from rest_framework import generics, serializers, status, filters  from rest_framework.compat import django_filters, patterns, url +from rest_framework.settings import api_settings  from rest_framework.test import APIRequestFactory  from rest_framework.tests.models import BasicModel  from .models import FilterableItem +from .utils import temporary_setting  factory = APIRequestFactory() @@ -363,6 +365,24 @@ class SearchFilterTests(TestCase):              ]          ) +    def test_search_with_nonstandard_search_param(self): +        with temporary_setting('SEARCH_PARAM', 'query', module=filters): +            class SearchListView(generics.ListAPIView): +                model = SearchFilterModel +                filter_backends = (filters.SearchFilter,) +                search_fields = ('title', 'text') + +            view = SearchListView.as_view() +            request = factory.get('/', {'query': 'b'}) +            response = view(request) +            self.assertEqual( +                response.data, +                [ +                    {'id': 1, 'title': 'z', 'text': 'abc'}, +                    {'id': 2, 'title': 'zz', 'text': 'bcd'} +                ] +            ) +  class OrdringFilterModel(models.Model):      title = models.CharField(max_length=20) @@ -520,6 +540,26 @@ class OrderingFilterTests(TestCase):              ]          ) +    def test_ordering_with_nonstandard_ordering_param(self): +        with temporary_setting('ORDERING_PARAM', 'order', filters): +            class OrderingListView(generics.ListAPIView): +                model = OrdringFilterModel +                filter_backends = (filters.OrderingFilter,) +                ordering = ('title',) +                ordering_fields = ('text',) + +            view = OrderingListView.as_view() +            request = factory.get('/', {'order': 'text'}) +            response = view(request) +            self.assertEqual( +                response.data, +                [ +                    {'id': 1, 'title': 'zyx', 'text': 'abc'}, +                    {'id': 2, 'title': 'yxw', 'text': 'bcd'}, +                    {'id': 3, 'title': 'xwv', 'text': 'cde'}, +                ] +            ) +  class SensitiveOrderingFilterModel(models.Model):      username = models.CharField(max_length=20) @@ -618,4 +658,4 @@ class SensitiveOrderingFilterTests(TestCase):                      {'id': 2, username_field: 'userB'}, # PassC                      {'id': 3, username_field: 'userC'}, # PassA                  ] -            )
\ No newline at end of file +            ) diff --git a/rest_framework/tests/utils.py b/rest_framework/tests/utils.py new file mode 100644 index 00000000..a8f2eb0b --- /dev/null +++ b/rest_framework/tests/utils.py @@ -0,0 +1,25 @@ +from contextlib import contextmanager +from rest_framework.compat import six +from rest_framework.settings import api_settings + + +@contextmanager +def temporary_setting(setting, value, module=None): +    """ +    Temporarily change value of setting for test. + +    Optionally reload given module, useful when module uses value of setting on +    import. +    """ +    original_value = getattr(api_settings, setting) +    setattr(api_settings, setting, value) + +    if module is not None: +        six.moves.reload_module(module) + +    yield + +    setattr(api_settings, setting, original_value) + +    if module is not None: +        six.moves.reload_module(module)  | 
