1717
1818import mock
1919
20- from .decorators import json_view
20+ from .decorators import json_view , json_request
2121from .exceptions import BadRequest
2222
2323
@@ -29,6 +29,7 @@ def eq_(a, b, msg=None):
2929 """From nose.tools.eq_."""
3030 assert a == b , msg or '%r != %r' % (a , b )
3131
32+
3233if sys .version < '3' :
3334 def b (x ):
3435 return x
@@ -326,3 +327,101 @@ def get(self, request):
326327 eq_ (JSON , res ['content-type' ])
327328 data = json .loads (res .content .decode ('utf-8' ))
328329 eq_ ('bar' , data ['foo' ])
330+
331+
332+ class JsonRequestTests (TestCase ):
333+ def test_application_json (self ):
334+ data = {
335+ 'foo' : 'bar' ,
336+ 'baz' : 'qux' ,
337+ 'quz' : [{'foo' : 'bar' }],
338+ }
339+
340+ @json_request
341+ def temp (req ):
342+ return req .data
343+
344+ res = temp (rf .post (
345+ '/' ,
346+ data = json .dumps (data ),
347+ content_type = 'application/json'
348+ ))
349+ eq_ (res , data )
350+
351+ def test_get_requests (self ):
352+ data = {
353+ 'foo' : 'bar' ,
354+ 'baz' : '0'
355+ }
356+
357+ @json_request (assume_json = False )
358+ def temp (req ):
359+ return req .data
360+
361+ res = temp (rf .get ('/?foo=bar&baz=0' ))
362+ eq_ (res , data )
363+
364+ def test_post_requests (self ):
365+ data = {
366+ 'foo' : 'bar' ,
367+ 'baz' : '0'
368+ }
369+
370+ @json_request (assume_json = False )
371+ def temp (req ):
372+ return req .data
373+
374+ # test application/x-www-form-urlencoded
375+ res = temp (rf .post (
376+ '/' ,
377+ data = 'foo=bar&baz=0' ,
378+ content_type = 'application/x-www-form-urlencoded'
379+ ))
380+ eq_ (res , data )
381+
382+ # test multipart/form-data
383+ res = temp (rf .post ('/' , data = data , files = None ))
384+ eq_ (res , data )
385+
386+ def test_assume_json (self ):
387+ data = {
388+ 'foo' : 'bar' ,
389+ 'baz' : '0'
390+ }
391+
392+ @json_request (assume_json = True )
393+ def temp (req ):
394+ return req .data
395+
396+ @json_request (assume_json = False )
397+ def temp_2 (req ):
398+ return req .data
399+
400+ # test get request
401+ res = temp (rf .get ('/?foo=bar&baz=0' ))
402+ eq_ (res , {})
403+
404+ res = temp_2 (rf .get ('/?foo=bar&baz=0' ))
405+ eq_ (res , data )
406+
407+ # test application/x-www-form-urlencoded
408+ res = temp (rf .post (
409+ '/' ,
410+ data = 'foo=bar&baz=0' ,
411+ content_type = 'application/x-www-form-urlencoded'
412+ ))
413+ eq_ (res , {})
414+
415+ res = temp_2 (rf .post (
416+ '/' ,
417+ data = 'foo=bar&baz=0' ,
418+ content_type = 'application/x-www-form-urlencoded'
419+ ))
420+ eq_ (res , data )
421+
422+ # test multipart/form-data
423+ res = temp (rf .post ('/' , data = data , files = None ))
424+ eq_ (res , {})
425+
426+ res = temp_2 (rf .post ('/' , data = data , files = None ))
427+ eq_ (res , data )
0 commit comments