aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTom Christie2014-12-02 13:52:46 +0000
committerTom Christie2014-12-02 13:52:46 +0000
commit0359e9250d34e18aef2db6216f24c130a4f51fce (patch)
tree9c78dbb87ec129ec21494a769afa587a76fa8899 /tests
parente30e3f6dfc8cdb47c1048bbe497599d250d7bf75 (diff)
downloaddjango-rest-framework-0359e9250d34e18aef2db6216f24c130a4f51fce.tar.bz2
FileUploadParser. Raising StopFutureHandlers removes any handlers not yet run for the active set. Closes #2109.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_parsers.py32
1 files changed, 30 insertions, 2 deletions
diff --git a/tests/test_parsers.py b/tests/test_parsers.py
index 3f2672df..88eccef3 100644
--- a/tests/test_parsers.py
+++ b/tests/test_parsers.py
@@ -1,12 +1,13 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-from rest_framework.compat import StringIO
from django import forms
from django.core.files.uploadhandler import MemoryFileUploadHandler
from django.test import TestCase
from django.utils import unittest
from rest_framework.compat import etree
+from rest_framework.compat import StringIO
+from rest_framework.exceptions import ParseError
from rest_framework.parsers import FormParser, FileUploadParser
from rest_framework.parsers import XMLParser
import datetime
@@ -104,13 +105,40 @@ class TestFileUploadParser(TestCase):
self.parser_context = {'request': request, 'kwargs': {}}
def test_parse(self):
- """ Make sure the `QueryDict` works OK """
+ """
+ Parse raw file upload.
+ """
parser = FileUploadParser()
self.stream.seek(0)
data_and_files = parser.parse(self.stream, None, self.parser_context)
file_obj = data_and_files.files['file']
self.assertEqual(file_obj._size, 14)
+ def test_parse_missing_filename(self):
+ """
+ Parse raw file upload when filename is missing.
+ """
+ parser = FileUploadParser()
+ self.stream.seek(0)
+ self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = ''
+ with self.assertRaises(ParseError):
+ parser.parse(self.stream, None, self.parser_context)
+
+ def test_parse_missing_filename_multiple_upload_handlers(self):
+ """
+ Parse raw file upload with multiple handlers when filename is missing.
+ Regression test for #2109.
+ """
+ parser = FileUploadParser()
+ self.stream.seek(0)
+ self.parser_context['request'].upload_handlers = (
+ MemoryFileUploadHandler(),
+ MemoryFileUploadHandler()
+ )
+ self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = ''
+ with self.assertRaises(ParseError):
+ parser.parse(self.stream, None, self.parser_context)
+
def test_get_filename(self):
parser = FileUploadParser()
filename = parser.get_filename(self.stream, None, self.parser_context)