diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_filters.py | 1 | ||||
| -rw-r--r-- | tests/test_htmlrenderer.py | 6 | ||||
| -rw-r--r-- | tests/test_parsers.py | 4 | ||||
| -rw-r--r-- | tests/test_renderers.py | 85 | ||||
| -rw-r--r-- | tests/test_serializer.py | 17 | 
5 files changed, 39 insertions, 74 deletions
| diff --git a/tests/test_filters.py b/tests/test_filters.py index dc84dcbd..5b1b6ca5 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -467,6 +467,7 @@ class DjangoFilterOrderingTests(TestCase):          for d in data:              DjangoFilterOrderingModel.objects.create(**d) +    @unittest.skipUnless(django_filters, 'django-filter not installed')      def test_default_ordering(self):          class DjangoFilterOrderingView(generics.ListAPIView):              serializer_class = DjangoFilterOrderingSerializer diff --git a/tests/test_htmlrenderer.py b/tests/test_htmlrenderer.py index 2edc6b4b..a33b832f 100644 --- a/tests/test_htmlrenderer.py +++ b/tests/test_htmlrenderer.py @@ -56,7 +56,13 @@ class TemplateHTMLRendererTests(TestCase):                  return Template("example: {{ object }}")              raise TemplateDoesNotExist(template_name) +        def select_template(template_name_list, dirs=None, using=None): +            if template_name_list == ['example.html']: +                return Template("example: {{ object }}") +            raise TemplateDoesNotExist(template_name_list[0]) +          django.template.loader.get_template = get_template +        django.template.loader.select_template = select_template      def tearDown(self):          """ diff --git a/tests/test_parsers.py b/tests/test_parsers.py index 54455cf6..8816065a 100644 --- a/tests/test_parsers.py +++ b/tests/test_parsers.py @@ -101,7 +101,9 @@ class TestFileUploadParser(TestCase):          self.__replace_content_disposition('inline; filename=fallback.txt; filename*=utf-8--ÀĥƦ.txt')          filename = parser.get_filename(self.stream, None, self.parser_context) -        self.assertEqual(filename, 'fallback.txt') +        # Malformed. Either None or 'fallback.txt' will be acceptable. +        # See also https://code.djangoproject.com/ticket/24209 +        self.assertIn(filename, ('fallback.txt', None))      def __replace_content_disposition(self, disposition):          self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = disposition diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 3e64d8fe..f68405f0 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -15,7 +15,6 @@ from rest_framework.settings import api_settings  from rest_framework.test import APIRequestFactory  from collections import MutableMapping  import json -import pickle  import re @@ -408,87 +407,27 @@ class CacheRenderTest(TestCase):      urls = 'tests.test_renderers' -    cache_key = 'just_a_cache_key' - -    @classmethod -    def _get_pickling_errors(cls, obj, seen=None): -        """ Return any errors that would be raised if `obj' is pickled -        Courtesy of koffie @ http://stackoverflow.com/a/7218986/109897 -        """ -        if seen is None: -            seen = [] -        try: -            state = obj.__getstate__() -        except AttributeError: -            return -        if state is None: -            return -        if isinstance(state, tuple): -            if not isinstance(state[0], dict): -                state = state[1] -            else: -                state = state[0].update(state[1]) -        result = {} -        for i in state: -            try: -                pickle.dumps(state[i], protocol=2) -            except pickle.PicklingError: -                if not state[i] in seen: -                    seen.append(state[i]) -                    result[i] = cls._get_pickling_errors(state[i], seen) -        return result - -    def http_resp(self, http_method, url): -        """ -        Simple wrapper for Client http requests -        Removes the `client' and `request' attributes from as they are -        added by django.test.client.Client and not part of caching -        responses outside of tests. -        """ -        method = getattr(self.client, http_method) -        resp = method(url) -        resp._closable_objects = [] -        del resp.client, resp.request -        try: -            del resp.wsgi_request -        except AttributeError: -            pass -        return resp - -    def test_obj_pickling(self): -        """ -        Test that responses are properly pickled -        """ -        resp = self.http_resp('get', '/cache') - -        # Make sure that no pickling errors occurred -        self.assertEqual(self._get_pickling_errors(resp), {}) - -        # Unfortunately LocMem backend doesn't raise PickleErrors but returns -        # None instead. -        cache.set(self.cache_key, resp) -        self.assertTrue(cache.get(self.cache_key) is not None) -      def test_head_caching(self):          """          Test caching of HEAD requests          """ -        resp = self.http_resp('head', '/cache') -        cache.set(self.cache_key, resp) - -        cached_resp = cache.get(self.cache_key) -        self.assertIsInstance(cached_resp, Response) +        response = self.client.head('/cache') +        cache.set('key', response) +        cached_response = cache.get('key') +        assert isinstance(cached_response, Response) +        assert cached_response.content == response.content +        assert cached_response.status_code == response.status_code      def test_get_caching(self):          """          Test caching of GET requests          """ -        resp = self.http_resp('get', '/cache') -        cache.set(self.cache_key, resp) - -        cached_resp = cache.get(self.cache_key) -        self.assertIsInstance(cached_resp, Response) -        self.assertEqual(cached_resp.content, resp.content) +        response = self.client.get('/cache') +        cache.set('key', response) +        cached_response = cache.get('key') +        assert isinstance(cached_response, Response) +        assert cached_response.content == response.content +        assert cached_response.status_code == response.status_code  class TestJSONIndentationStyles: diff --git a/tests/test_serializer.py b/tests/test_serializer.py index 68bbbe98..b7a0484b 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals  from .utils import MockObject  from rest_framework import serializers  from rest_framework.compat import unicode_repr +import pickle  import pytest @@ -278,3 +279,19 @@ class TestNotRequiredOutput:          serializer = ExampleSerializer(instance)          with pytest.raises(AttributeError):              serializer.data + + +class TestCacheSerializerData: +    def test_cache_serializer_data(self): +        """ +        Caching serializer data with pickle will drop the serializer info, +        but does preserve the data itself. +        """ +        class ExampleSerializer(serializers.Serializer): +            field1 = serializers.CharField() +            field2 = serializers.CharField() + +        serializer = ExampleSerializer({'field1': 'a', 'field2': 'b'}) +        pickled = pickle.dumps(serializer.data) +        data = pickle.loads(pickled) +        assert data == {'field1': 'a', 'field2': 'b'} | 
