From d507a6943adb4c9c5cd03eadadf38c7c42956f57 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Fri, 7 Jul 2017 11:19:35 -0400 Subject: [PATCH] Add test for file closing at request end --- tests/test_request.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/test_request.py b/tests/test_request.py index 428b969f5..208d2737e 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -3,6 +3,9 @@ Tests for content parsing, and form-overloaded content parsing. """ from __future__ import unicode_literals +import os.path +import tempfile + from django.conf.urls import url from django.contrib.auth import authenticate, login, logout from django.contrib.auth.models import User @@ -120,11 +123,39 @@ class MockView(APIView): return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) + +class FileUploadView(APIView): + def post(self, request): + filenames = [file.temporary_file_path() for file in request.FILES.values()] + + for filename in filenames: + assert os.path.exists(filename) + + return Response(status=status.HTTP_200_OK, data=filenames) + + urlpatterns = [ url(r'^$', MockView.as_view()), + url(r'^upload/$', FileUploadView.as_view()) ] +@override_settings( + ROOT_URLCONF='tests.test_request', + FILE_UPLOAD_HANDLERS=['django.core.files.uploadhandler.TemporaryFileUploadHandler']) +class FileUploadTests(TestCase): + + def test_fileuploads_closed_at_request_end(self): + with tempfile.NamedTemporaryFile() as f: + response = self.client.post('/upload/', {'file': f}) + + # sanity check that file was processed + assert len(response.data) == 1 + + for file in response.data: + assert not os.path.exists(file) + + @override_settings(ROOT_URLCONF='tests.test_request') class TestContentParsingWithAuthentication(TestCase): def setUp(self):