Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_handle_not_implemented(self):
self.res.request = FakeHttpRequest('TRACE')
resp = self.res.handle('list')
self.assertEqual(resp['Content-Type'], 'application/json')
self.assertEqual(resp.status_code, 501)
resp_json = json.loads(resp.content.decode('utf-8'))
self.assertEqual(
resp_json['error'], "Unsupported method 'TRACE' for list endpoint.")
self.assertTrue('traceback' in resp_json)
},
{
'title': "Hitchhiker's Guide To The Galaxy",
'author': 'Douglas Adams',
'short_desc': "Don't forget your towel.",
'pub_date': '1979',
}
]
self.res.preparer = FieldsPreparer(fields={
'title': 'title',
'author': 'author',
'synopsis': 'short_desc',
})
res = self.res.serialize_list(data)
self.assertEqual(json.loads(res), {
'objects': [
{
'author': 'Carl Sagan',
'synopsis': 'A journey through the stars by an emminent astrophysist.',
'title': 'Cosmos'
},
{
'title': "Hitchhiker's Guide To The Galaxy",
'author': 'Douglas Adams',
'synopsis': "Don't forget your towel.",
},
],
})
# Make sure we don't try to serialize a ``None``, which would fail.
self.assertEqual(self.res.serialize_list(None), '')
def test_as_list(self):
list_endpoint = FlTestResource.as_list()
flask.request = FakeHttpRequest('GET')
with self.app.test_request_context('/whatever/', method='GET'):
resp = list_endpoint()
self.assertEqual(resp.headers['Content-Type'], 'application/json')
self.assertEqual(resp.status_code, 200)
self.assertEqual(json.loads(resp.data.decode('utf-8')), {
'objects': [
{
'id': 2,
'title': 'First post'
},
{
'id': 4,
'title': 'Another'
},
{
'id': 5,
'title': 'Last'
}
def test_handle_not_authenticated(self):
# Special-cased above for testing.
self.res.request = FakeHttpRequest('DELETE')
# First with DEBUG on
resp = self.res.handle('list')
self.assertEqual(resp['Content-Type'], 'application/json')
self.assertEqual(resp.status_code, 401)
resp_json = json.loads(resp.content.decode('utf-8'))
self.assertEqual(resp_json['error'], 'Unauthorized.')
self.assertTrue('traceback' in resp_json)
# Now with DEBUG off.
settings.DEBUG = False
self.addCleanup(setattr, settings, 'DEBUG', True)
resp = self.res.handle('list')
self.assertEqual(resp['Content-Type'], 'application/json')
self.assertEqual(resp.status_code, 401)
resp_json = json.loads(resp.content.decode('utf-8'))
self.assertEqual(resp_json, {
'error': 'Unauthorized.',
})
self.assertFalse('traceback' in resp_json)
# Last, with bubble_exceptions.
def test_http404_exception_handling(self):
# Make sure we get a proper Not Found exception rather than a
# generic 500, when code raises a Http404 exception.
res = DjTestResourceHttp404Handling()
res.request = FakeHttpRequest('GET')
settings.DEBUG = False
self.addCleanup(setattr, settings, 'DEBUG', True)
resp = res.handle('detail', 1001)
self.assertEqual(resp['Content-Type'], 'application/json')
self.assertEqual(resp.status_code, 404)
self.assertEqual(json.loads(resp.content.decode('utf-8')), {
'error': 'Model with pk 1001 not found.'
})
Underpins ``deserialize``, ``deserialize_list`` &
``deserialize_detail``.
Has no built-in smarts, simply loads the JSON.
:param body: The body of the current request
:type body: string
:returns: The deserialized data
:rtype: ``list`` or ``dict``
"""
try:
if isinstance(body, bytes):
return json.loads(body.decode('utf-8'))
return json.loads(body)
except ValueError:
raise BadRequest('Request body is not valid JSON')