def post(self, request, *args, **kwargs): """ Handles a JSON request to save the course data """ self.object = self.get_object() original_status = self.object.status if not self.user_can_edit(request.user): return http.JsonResponse( { "message": response_messages("permission_error"), "status": "error", "errors": response_messages("permission_error"), }, status=403, ) try: data = json.loads(request.body) except ValueError as e: logger.debug(e) return http.JsonResponse( { "message": response_messages("json_error"), "status": "error", "errors": response_messages("json_error"), }, status=400, ) form_data = { "sections": json.dumps(data["sections"]), "title": data["title"], "status": data["status"], } form = forms.CourseForm(data=form_data, instance=self.object, user=request.user) if form.is_valid(): course = form.save() # Any checks against resource keys should happen here return http.JsonResponse( { "course_id": course.id, "course_status": course.status, "status": "ok", "message": course_save_message(original_status, course.status), } ) else: # form.errors is a dictionary with field names for keys and # the values of each is a list of errors in string format return http.JsonResponse( { "message": response_messages("error_saving"), "status": "error", "errors": form.errors, }, status=400, )
def test_save_course_form(admin_user, testing_user): form = forms.CourseForm( user=admin_user, data={"sections": "[]", "title": "Hello World"} ) assert form.is_valid() course = form.save() assert course.create_user == course.update_user == admin_user form = forms.CourseForm( user=testing_user, data={"sections": "[]", "title": "Hello World"}, instance=course, ) assert form.is_valid() course = form.save() assert course.create_user == admin_user assert course.update_user == testing_user
def post(self, request, *args, **kwargs): """ Handles a JSON request to save the course data Args: request: *args: **kwargs: Returns: """ try: data = json.loads(request.body) except ValueError as e: logger.debug(e) return http.JsonResponse({"errors": _("JSON decoding error")}, status=400) form_data = { "sections": json.dumps(data["sections"]), "title": data["title"] } form = forms.CourseForm(user=request.user, data=form_data) if form.is_valid(): course = form.save( ) # Any checks against resource keys should happen here return http.JsonResponse( { "course_id": course.id, "course_status": course.status, "status": "ok", "url": course.get_absolute_url(), "message": course_save_message(course.status, course.status), }, status=201, ) else: # form.errors is a dictionary with field names for keys and # the values of each is a list of errors in string format return http.JsonResponse( { "message": response_messages("error_saving"), "status": "error", "errors": form.errors, }, status=400, )
def test_form_invalid_json_data(): form = forms.CourseForm(data={"sections": "jakdj", "title": "Hello World"}) assert not form.is_valid()