def post(cls, request_id):
        """
        Create a task for a mentorship relation.

        Input:
        1. Header: valid access token
        2. Path: ID of request for which task is being created (request_id)
        3. Body: JSON object containing description of task.

        Returns:
        Success or failure message. It gets added to GET /tasks endpoint and
        is visible to the other person in the mentorship relation.
        """

        # TODO check if user id is well parsed, if it is an integer

        user_id = get_jwt_identity()
        request_body = request.json

        is_valid = CreateTask.is_valid_data(request_body)

        if is_valid != {}:
            return is_valid, HTTPStatus.BAD_REQUEST

        response = TaskDAO.create_task(user_id=user_id,
                                       mentorship_relation_id=request_id,
                                       data=request_body)

        return response
    def test_create_task_with_non_existing_mentorship_relation(self):

        expected_response = messages.MENTORSHIP_RELATION_DOES_NOT_EXIST, 404

        actual_response = TaskDAO.create_task(
            user_id=self.first_user.id,
            mentorship_relation_id=123123,
            data=dict(description=self.test_description,
                      is_done=self.test_is_done),
        )

        self.assertEqual(expected_response, actual_response)
    def test_create_task_with_user_not_involved_in_mentorship(self):

        expected_response = messages.USER_NOT_INVOLVED_IN_THIS_MENTOR_RELATION, 403
        self.mentorship_relation_w_second_user.state = MentorshipRelationState.ACCEPTED

        actual_response = TaskDAO.create_task(
            user_id=self.fourth_user.id,
            mentorship_relation_id=self.mentorship_relation_w_second_user.id,
            data=dict(description=self.test_description,
                      is_done=self.test_is_done),
        )

        self.assertEqual(expected_response, actual_response)
    def test_create_task_with_mentorship_relation_non_accepted_state(self):

        expected_response = messages.UNACCEPTED_STATE_RELATION, 400
        self.mentorship_relation_w_second_user.state = MentorshipRelationState.CANCELLED

        actual_response = TaskDAO.create_task(
            user_id=self.first_user.id,
            mentorship_relation_id=self.mentorship_relation_w_second_user.id,
            data=dict(description=self.test_description,
                      is_done=self.test_is_done),
        )

        self.assertEqual(expected_response, actual_response)
    def test_create_task(self):

        expected_response = messages.TASK_WAS_CREATED_SUCCESSFULLY, 201

        non_existent_task = self.tasks_list_1.find_task_by_id(3)
        self.assertIsNone(non_existent_task)

        actual_response = TaskDAO.create_task(
            user_id=self.first_user.id,
            mentorship_relation_id=self.mentorship_relation_w_second_user.id,
            data=dict(description=self.test_description,
                      is_done=self.test_is_done),
        )
        self.assertEqual(expected_response, actual_response)

        new_task = self.tasks_list_1.find_task_by_id(3)
        self.assertIsNotNone(new_task)
        self.assertEqual(self.test_description, new_task.get("description"))
        self.assertEqual(self.test_is_done, new_task.get("is_done"))