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)
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)
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)
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)
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)