def test_required_method_put(self): from djsonapi import api from djsonapi import serial @api.required_method("PUT", debug=True) def view(request, put=None): self.assertIsNotNone(put) return api.ok(put=put) ## test put data = {"test": 123} json = serial.dumps(data) factory = RequestFactory() request = factory.put("/", content_type="application/json", data=json) response = view(request) response_data = serial.loads(response.content) self.assertEqual(response.status_code, 200) self.assertEqual(data, response_data["body"]["put"]) ## test debug factory = RequestFactory() request = factory.put("/", content_type="application/json", data="FAILJSON") response = view(request) response_data = serial.loads(response.content) self.assertEqual(response.status_code, 400) self.assertFalse(response_data["ok"]) self.assertIsNotNone(response_data["body"]["exception"])
def test_form_valid(self): from django import forms from djsonapi import api from djsonapi import serial class SomeForm(forms.Form): field = forms.IntegerField() @api.required_method("GET", "POST", "PUT") @api.post_form(SomeForm) def view(request, form=None): return api.ok(form=form.cleaned_data if form else None, method=request.method) ## Valid data = {"field": 123} json = serial.dumps(data) factory = RequestFactory() request = factory.post("/", content_type="application/json", data=json) response = view(request) response_data = serial.loads(response.content) self.assertEqual(response.status_code, 200) self.assertEqual(response_data["body"]["method"], "POST") self.assertEqual(response_data["body"]["form"]["field"], data["field"]) ## Invalid data = {"xxx": 123} json = serial.dumps(data) factory = RequestFactory() request = factory.post("/", content_type="application/json", data=json) response = view(request) response_data = serial.loads(response.content) self.assertEqual(response.status_code, 400) self.assertIsNotNone(response_data["body"]["errors"]["field"])
def json_response(status, ok, message, **body): """ Return an HttpResponse with a content type of "application/json" and the given status code. The JSON will have an "ok" status, message, and optional body. """ bag = { "ok": ok, } if body: bag["body"] = body if message: bag["message"] = message response = http.HttpResponse(serial.dumps(bag), status=status) response["Content-type"] = "application/json; charset=utf-8" return response
def test_dump(self): try: from cStringIO import StringIO except ImportError: from StringIO import StringIO from djsonapi import serial io = StringIO() data = {"test": "test"} serial.dump(data, io) io_out = io.getvalue() reg_out = serial.dumps(data) self.assertEqual(io_out, reg_out)
def test_post_form_lambda_dict(self): from django import forms from djsonapi import api from djsonapi import serial class TestForm(forms.Form): field = forms.IntegerField() @api.required_method("POST") @api.post_form(lambda request, data: {"POST": TestForm(data=data)}) def view(request, form=None): return api.ok(data=form.cleaned_data) factory = RequestFactory() request = factory.post("/", content_type="application/json", data=serial.dumps({"field": 123})) response = view(request) not_found = object() self.assertEqual(response.status_code, 200) response_data = serial.loads(response.content) self.assertEqual(response_data["ok"], True) self.assertEqual(response_data.get("message", not_found), not_found) self.assertEqual(response_data["body"]["data"]["field"], 123)
def test_nowserializes(self): from django.utils import timezone from djsonapi import serial json = serial.dumps({"datetime": timezone.now()}) self.assertIsInstance(json, (unicode, str))
def test_dateserializes(self): from datetime import date from djsonapi import serial json = serial.dumps({"datetime": date.today()}) self.assertIsInstance(json, (unicode, str))