From b305733a69ccd2e349c712aefcb58172ca601165 Mon Sep 17 00:00:00 2001 From: Ryan Kaneshiro Date: Mon, 1 Feb 2016 18:12:48 -0800 Subject: [PATCH 1/2] Add failing test case for empty POSTs An empty POST body seems to be treated as HTML even though the content type is specified. --- tests/test_testing.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/test_testing.py b/tests/test_testing.py index e0bf759a4..373d62ac9 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -8,6 +8,7 @@ from django.contrib.auth.models import User from django.shortcuts import redirect from django.test import TestCase +from rest_framework import fields, serializers from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.test import ( @@ -37,10 +38,22 @@ def redirect_view(request): return redirect('/view/') +class BasicSerializer(serializers.Serializer): + flag = fields.BooleanField(default=lambda: False) + + +@api_view(['POST']) +def post_view(request): + serializer = BasicSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + return Response() + + urlpatterns = [ url(r'^view/$', view), url(r'^session-view/$', session_view), url(r'^redirect-view/$', redirect_view), + url(r'^post-view/$', post_view) ] @@ -182,6 +195,16 @@ class TestAPITestClient(TestCase): path='/view/', data={'valid': 123, 'invalid': {'a': 123}} ) + def test_empty_post_uses_default_boolean_value(self): + User.objects.create_user('example', 'example@example.com', 'password') + self.client.login(username='example', password='password') + response = self.client.post( + '/post-view/', + data=None, + content_type='application/json' + ) + self.assertEqual(response.status_code, 200, response.content) + class TestAPIRequestFactory(TestCase): def test_csrf_exempt_by_default(self): From c0cf2baf3120abd3adba041582ad6a424d6a7595 Mon Sep 17 00:00:00 2001 From: Ryan Kaneshiro Date: Tue, 9 Feb 2016 17:02:29 -0800 Subject: [PATCH 2/2] Remove unnecessary login in test Also clarify what the expected validated_data should look like. --- tests/test_testing.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/test_testing.py b/tests/test_testing.py index 373d62ac9..c9ecc348d 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -39,14 +39,14 @@ def redirect_view(request): class BasicSerializer(serializers.Serializer): - flag = fields.BooleanField(default=lambda: False) + flag = fields.BooleanField(default=lambda: True) @api_view(['POST']) def post_view(request): serializer = BasicSerializer(data=request.data) serializer.is_valid(raise_exception=True) - return Response() + return Response(serializer.validated_data) urlpatterns = [ @@ -196,14 +196,13 @@ class TestAPITestClient(TestCase): ) def test_empty_post_uses_default_boolean_value(self): - User.objects.create_user('example', 'example@example.com', 'password') - self.client.login(username='example', password='password') response = self.client.post( '/post-view/', data=None, content_type='application/json' ) self.assertEqual(response.status_code, 200, response.content) + self.assertEqual('{"flag":true}', response.content) class TestAPIRequestFactory(TestCase):