|
1 | 1 | # -*- coding: utf-8 -*-
|
2 | 2 |
|
3 | 3 | from __future__ import unicode_literals
|
4 |
| -from rest_framework.compat import StringIO |
5 | 4 | from django import forms
|
6 | 5 | from django.core.files.uploadhandler import MemoryFileUploadHandler
|
7 | 6 | from django.test import TestCase
|
8 | 7 | from django.utils import unittest
|
9 | 8 | from rest_framework.compat import etree
|
| 9 | +from rest_framework.compat import StringIO |
| 10 | +from rest_framework.exceptions import ParseError |
10 | 11 | from rest_framework.parsers import FormParser, FileUploadParser
|
11 | 12 | from rest_framework.parsers import XMLParser
|
12 | 13 | import datetime
|
@@ -104,13 +105,40 @@ class MockRequest(object):
|
104 | 105 | self.parser_context = {'request': request, 'kwargs': {}}
|
105 | 106 |
|
106 | 107 | def test_parse(self):
|
107 |
| - """ Make sure the `QueryDict` works OK """ |
| 108 | + """ |
| 109 | + Parse raw file upload. |
| 110 | + """ |
108 | 111 | parser = FileUploadParser()
|
109 | 112 | self.stream.seek(0)
|
110 | 113 | data_and_files = parser.parse(self.stream, None, self.parser_context)
|
111 | 114 | file_obj = data_and_files.files['file']
|
112 | 115 | self.assertEqual(file_obj._size, 14)
|
113 | 116 |
|
| 117 | + def test_parse_missing_filename(self): |
| 118 | + """ |
| 119 | + Parse raw file upload when filename is missing. |
| 120 | + """ |
| 121 | + parser = FileUploadParser() |
| 122 | + self.stream.seek(0) |
| 123 | + self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = '' |
| 124 | + with self.assertRaises(ParseError): |
| 125 | + parser.parse(self.stream, None, self.parser_context) |
| 126 | + |
| 127 | + def test_parse_missing_filename_multiple_upload_handlers(self): |
| 128 | + """ |
| 129 | + Parse raw file upload with multiple handlers when filename is missing. |
| 130 | + Regression test for #2109. |
| 131 | + """ |
| 132 | + parser = FileUploadParser() |
| 133 | + self.stream.seek(0) |
| 134 | + self.parser_context['request'].upload_handlers = ( |
| 135 | + MemoryFileUploadHandler(), |
| 136 | + MemoryFileUploadHandler() |
| 137 | + ) |
| 138 | + self.parser_context['request'].META['HTTP_CONTENT_DISPOSITION'] = '' |
| 139 | + with self.assertRaises(ParseError): |
| 140 | + parser.parse(self.stream, None, self.parser_context) |
| 141 | + |
114 | 142 | def test_get_filename(self):
|
115 | 143 | parser = FileUploadParser()
|
116 | 144 | filename = parser.get_filename(self.stream, None, self.parser_context)
|
|
0 commit comments