* Generate common/djangoapps import shims for LMS * Generate common/djangoapps import shims for Studio * Stop appending project root to sys.path * Stop appending common/djangoapps to sys.path * Import from common.djangoapps.course_action_state instead of course_action_state * Import from common.djangoapps.course_modes instead of course_modes * Import from common.djangoapps.database_fixups instead of database_fixups * Import from common.djangoapps.edxmako instead of edxmako * Import from common.djangoapps.entitlements instead of entitlements * Import from common.djangoapps.pipline_mako instead of pipeline_mako * Import from common.djangoapps.static_replace instead of static_replace * Import from common.djangoapps.student instead of student * Import from common.djangoapps.terrain instead of terrain * Import from common.djangoapps.third_party_auth instead of third_party_auth * Import from common.djangoapps.track instead of track * Import from common.djangoapps.util instead of util * Import from common.djangoapps.xblock_django instead of xblock_django * Add empty common/djangoapps/__init__.py to fix pytest collection * Fix pylint formatting violations * Exclude import_shims/ directory tree from linting
129 lines
4.8 KiB
Python
129 lines
4.8 KiB
Python
"""
|
|
Test for JsonResponse and JsonResponseBadRequest util classes.
|
|
"""
|
|
|
|
|
|
import json
|
|
import unittest
|
|
|
|
import mock
|
|
from django.http import HttpResponse, HttpResponseBadRequest
|
|
|
|
from common.djangoapps.util.json_request import JsonResponse, JsonResponseBadRequest
|
|
|
|
|
|
class JsonResponseTestCase(unittest.TestCase):
|
|
"""
|
|
A set of tests to make sure that JsonResponse Class works correctly.
|
|
"""
|
|
def test_empty(self):
|
|
resp = JsonResponse()
|
|
self.assertIsInstance(resp, HttpResponse)
|
|
self.assertEqual(resp.content.decode('utf-8'), "")
|
|
self.assertEqual(resp.status_code, 204)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_empty_string(self):
|
|
resp = JsonResponse("")
|
|
self.assertIsInstance(resp, HttpResponse)
|
|
self.assertEqual(resp.content.decode('utf-8'), "")
|
|
self.assertEqual(resp.status_code, 204)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_string(self):
|
|
resp = JsonResponse("foo")
|
|
self.assertEqual(resp.content.decode('utf-8'), '"foo"')
|
|
self.assertEqual(resp.status_code, 200)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_dict(self):
|
|
obj = {"foo": "bar"}
|
|
resp = JsonResponse(obj)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 200)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_set_status_kwarg(self):
|
|
obj = {"error": "resource not found"}
|
|
resp = JsonResponse(obj, status=404)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 404)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_set_status_arg(self):
|
|
obj = {"error": "resource not found"}
|
|
resp = JsonResponse(obj, 404)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 404)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_encoder(self):
|
|
obj = [1, 2, 3]
|
|
encoder = object()
|
|
with mock.patch.object(json, "dumps", return_value="[1,2,3]") as dumps:
|
|
resp = JsonResponse(obj, encoder=encoder)
|
|
self.assertEqual(resp.status_code, 200)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
kwargs = dumps.call_args[1]
|
|
self.assertIs(kwargs["cls"], encoder)
|
|
|
|
|
|
class JsonResponseBadRequestTestCase(unittest.TestCase):
|
|
"""
|
|
A set of tests to make sure that the JsonResponseBadRequest wrapper class
|
|
works as intended.
|
|
"""
|
|
|
|
def test_empty(self):
|
|
resp = JsonResponseBadRequest()
|
|
self.assertIsInstance(resp, HttpResponseBadRequest)
|
|
self.assertEqual(resp.content.decode("utf-8"), "")
|
|
self.assertEqual(resp.status_code, 400)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_empty_string(self):
|
|
resp = JsonResponseBadRequest("")
|
|
self.assertIsInstance(resp, HttpResponse)
|
|
self.assertEqual(resp.content.decode('utf-8'), "")
|
|
self.assertEqual(resp.status_code, 400)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_dict(self):
|
|
obj = {"foo": "bar"}
|
|
resp = JsonResponseBadRequest(obj)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 400)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_set_status_kwarg(self):
|
|
obj = {"error": "resource not found"}
|
|
resp = JsonResponseBadRequest(obj, status=404)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 404)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_set_status_arg(self):
|
|
obj = {"error": "resource not found"}
|
|
resp = JsonResponseBadRequest(obj, 404)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
self.assertEqual(resp.status_code, 404)
|
|
self.assertEqual(resp["content-type"], "application/json")
|
|
|
|
def test_encoder(self):
|
|
obj = [1, 2, 3]
|
|
encoder = object()
|
|
with mock.patch.object(json, "dumps", return_value="[1,2,3]") as dumps:
|
|
resp = JsonResponseBadRequest(obj, encoder=encoder)
|
|
self.assertEqual(resp.status_code, 400)
|
|
compare = json.loads(resp.content.decode('utf-8'))
|
|
self.assertEqual(obj, compare)
|
|
kwargs = dumps.call_args[1]
|
|
self.assertIs(kwargs["cls"], encoder)
|