def put(self, question_id):
        """Updates the QuestionSkillLink models with respect to the given
        question.
        """
        skill_ids_task_list = self.payload.get('skill_ids_task_list')
        if skill_ids_task_list is None:
            raise self.InvalidInputException(
                'Missing fields \'skill_ids_task_list\'in payload')

        for task_dict in skill_ids_task_list:
            if not 'id' in task_dict:
                raise self.InvalidInputException('Missing skill ID.')
            if task_dict['task'] == 'remove':
                question_services.delete_question_skill_link(
                    self.user_id, question_id, task_dict['id'])
            elif task_dict['task'] == 'add':
                question_services.create_new_question_skill_link(
                    self.user_id, question_id, task_dict['id'],
                    task_dict['difficulty'])
            elif task_dict['task'] == 'update_difficulty':
                question_services.update_question_skill_link_difficulty(
                    question_id, task_dict['id'],
                    float(task_dict['difficulty']))
            else:
                raise self.InvalidInputException('Invalid task.')

        self.render_json(self.values)
Exemple #2
0
    def delete(self, question_id, skill_id):
        """Unlinks a question from a skill."""
        if not constants.ENABLE_NEW_STRUCTURES:
            raise self.PageNotFoundException

        question_services.delete_question_skill_link(question_id, skill_id)
        self.render_json(self.values)
Exemple #3
0
    def test_delete_question_skill_link_decrements_question_count(self):
        opportunity_services.create_skill_opportunity(
            self.SKILL_ID, 'description')
        self.save_new_question(
            self.QUESTION_ID, self.USER_ID,
            self._create_valid_question_data('ABC'), ['skill_2'])
        question_services.create_new_question_skill_link(
            self.USER_ID, self.QUESTION_ID, self.SKILL_ID, 0.3)

        question_services.delete_question_skill_link(
            self.USER_ID, self.QUESTION_ID, self.SKILL_ID)

        skill_opportunities, _, _ = (
            opportunity_services.get_skill_opportunities(None))
        opportunity = skill_opportunities[0]
        self.assertEqual(opportunity.question_count, 0)
    def test_delete_question_skill_link(self):
        question_services.create_new_question_skill_link(
            self.editor_id, self.question_id, 'skill_1', 0.3)
        question_services.create_new_question_skill_link(
            self.editor_id, self.question_id, 'skill_2', 0.3)
        question_services.delete_question_skill_link(
            self.editor_id, self.question_id, 'skill_1')
        skill_ids = [skill.id for skill in
                     question_services.get_skills_linked_to_question(
                         self.question_id)]
        self.assertItemsEqual(skill_ids, ['skill_2'])

        question_services.delete_question_skill_link(
            self.editor_id, self.question_id, 'skill_2')

        question = question_services.get_question_by_id(
            self.question_id, strict=False)
        self.assertIsNone(question)
Exemple #5
0
    def put(self, question_id):
        """Updates the QuestionSkillLink models with respect to the given
        question.
        """
        if self.payload.get('action') == 'update_difficulty':
            new_difficulty = self.payload.get('new_difficulty')
            skill_id = self.payload.get('skill_id')
            if skill_id is None:
                raise self.InvalidInputException(
                    'The \'skill_id\' field is missing in payload')
            if new_difficulty is None:
                raise self.InvalidInputException(
                    'The \'new_difficulty\' field is missing in payload')
            question_services.update_question_skill_link_difficulty(
                question_id, skill_id, float(new_difficulty))
        elif self.payload.get('action') == 'edit_links':
            difficulty = self.payload.get('difficulty')
            skill_ids_task_list = self.payload.get('skill_ids_task_list')
            if skill_ids_task_list is None:
                raise self.InvalidInputException(
                    'Missing fields \'skill_ids_task_list\'in payload')

            for task_dict in skill_ids_task_list:
                if not 'id' in task_dict:
                    raise self.InvalidInputException(
                        'Missing skill ID for edit_links.')
                if task_dict['task'] == 'remove':
                    question_services.delete_question_skill_link(
                        self.user_id, question_id, task_dict['id'])
                elif task_dict['task'] == 'add':
                    if difficulty is None:
                        raise self.InvalidInputException(
                            'Missing field \'difficulty\' in payload')
                    question_services.create_new_question_skill_link(
                        self.user_id, question_id, task_dict['id'], difficulty)
                else:
                    raise self.InvalidInputException(
                        'Invalid task for edit_links.')
        else:
            raise self.InvalidInputException('Invalid action in payload.')

        self.render_json(self.values)
Exemple #6
0
 def delete(self, question_id, skill_id):
     """Unlinks a question from a skill."""
     question_services.delete_question_skill_link(self.user_id, question_id,
                                                  skill_id)
     self.render_json(self.values)