1+ from io import BytesIO
2+ from unittest .mock import patch
3+
14import django
25from django .urls import reverse_lazy
3- from django .test import override_settings , TestCase
6+ from django .test import override_settings , modify_settings , TestCase
47if django .VERSION [0 ] < 2 :
58 from django .conf .urls import url
69else :
710 from django .urls import re_path as url
811from rest_framework import serializers
12+ from rest_framework .response import Response
13+ from rest_framework .decorators import api_view
14+ from rest_framework .test import APITestCase
915
1016from requestlogs .storages import JsonDumpField , BaseStorage
1117
1218
19+ @api_view (['POST' ])
20+ def upload_view (request ):
21+ class FileSerializer (serializers .Serializer ):
22+ file = serializers .FileField ()
23+
24+ s = FileSerializer (data = request .data )
25+ assert s .is_valid ()
26+ return Response ({'status' : 'ok' })
27+
28+
1329urlpatterns = [
1430 url (r'^/?$' , lambda r : None , name = 'home' ),
31+ url (r'^upload/?$' , upload_view ),
1532]
1633
1734
@@ -26,3 +43,20 @@ def test_serialize_proxy(self):
2643 storage = SimpleStorage ()
2744 s = storage .prepare ({'blob' : {'url' : reverse_lazy ('home' )}})
2845 assert s == {'blob' : '{"url": "/"}' }
46+
47+
48+ @override_settings (
49+ ROOT_URLCONF = __name__ ,
50+ REQUESTLOGS = {'STORAGE_CLASS' : 'tests.test_views.TestStorage' },
51+ )
52+ @modify_settings (MIDDLEWARE = {
53+ 'append' : 'requestlogs.middleware.RequestLogsMiddleware' ,
54+ })
55+ class TestWithFileUpload (APITestCase ):
56+ def test_post_file (self ):
57+ buf = BytesIO (b'\x89 PNG' )
58+ with patch ('tests.test_views.TestStorage.do_store' ) as mocked_store :
59+ response = self .client .post ('/upload' , data = {'file' : buf })
60+
61+ assert mocked_store .call_args [0 ][0 ]['request' ]['data' ] == \
62+ '{"file": "<InMemoryUploadedFile, size=4>"}'
0 commit comments