|
10 | 10 | from nested_multipart_parser.drf import DrfNestedParser, NestedParser # noqa: E402
|
11 | 11 | from rest_framework.request import Request # noqa: E402
|
12 | 12 | from rest_framework.exceptions import ParseError # noqa: E402
|
13 |
| - |
| 13 | +from django.core.files.uploadedfile import SimpleUploadedFile, InMemoryUploadedFile |
14 | 14 |
|
15 | 15 | def toQueryDict(data):
|
16 | 16 | q = QueryDict(mutable=True)
|
@@ -212,3 +212,48 @@ def test_views_options_mixed_valid(self):
|
212 | 212 | }
|
213 | 213 |
|
214 | 214 | self.assertEqual(results.data, toQueryDict(expected))
|
| 215 | + |
| 216 | + def test_nested_files(self): |
| 217 | + file = SimpleUploadedFile("file.png", b"file_content", content_type="image/png") |
| 218 | + file1 = SimpleUploadedFile("file.pdf", b"file_content", content_type="application/pdf") |
| 219 | + |
| 220 | + data = { |
| 221 | + "file": file, |
| 222 | + "title": "title", |
| 223 | + 'files[0].description': 'description', |
| 224 | + 'files[1].file': file1, |
| 225 | + 'files[1].description': 'description2', |
| 226 | + } |
| 227 | + results = self.parser_boundary(data) |
| 228 | + |
| 229 | + # files is not in |
| 230 | + expected = { |
| 231 | + "file": file, |
| 232 | + "title": "title", |
| 233 | + "files": [ |
| 234 | + { |
| 235 | + "description": "description", |
| 236 | + }, |
| 237 | + { |
| 238 | + "file": file1, |
| 239 | + "description": "description2", |
| 240 | + } |
| 241 | + ], |
| 242 | + } |
| 243 | + data = results.data.dict() |
| 244 | + self.assertEqual(len(data), 3) |
| 245 | + |
| 246 | + self.assertIsInstance(data["file"], InMemoryUploadedFile) |
| 247 | + self.assertEqual(data["title"], expected["title"]) |
| 248 | + |
| 249 | + self.assertEqual(len(data["files"]), 2) |
| 250 | + self.assertIsInstance(data["files"], list) |
| 251 | + |
| 252 | + self.assertIsInstance(data["files"][0], dict) |
| 253 | + self.assertEqual(len(data["files"][0]), 1) |
| 254 | + self.assertEqual(data["files"][0]["description"], "description") |
| 255 | + |
| 256 | + self.assertIsInstance(data["files"][1], dict) |
| 257 | + self.assertEqual(len(data["files"][1]), 2) |
| 258 | + self.assertEqual(data["files"][1]["description"], "description2") |
| 259 | + self.assertIsInstance(data["files"][1]["file"], InMemoryUploadedFile) |
0 commit comments