示例#1
0
    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
示例#3
0
    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()