def post(self): """Handles the POST request.""" old_skill_id = self.payload.get('old_skill_id') new_skill_id = self.payload.get('new_skill_id') new_skill = skill_fetchers.get_skill_by_id(new_skill_id, strict=False) if new_skill is None: raise self.PageNotFoundException( Exception('The new skill with the given id doesn\'t exist.')) old_skill = skill_fetchers.get_skill_by_id(old_skill_id, strict=False) if old_skill is None: raise self.PageNotFoundException( Exception('The old skill with the given id doesn\'t exist.')) skill_services.replace_skill_id_in_all_topics(self.user_id, old_skill_id, new_skill_id) question_services.replace_skill_id_for_all_questions( old_skill_id, old_skill.description, new_skill_id) changelist = [ skill_domain.SkillChange({ 'cmd': skill_domain.CMD_UPDATE_SKILL_PROPERTY, 'property_name': (skill_domain.SKILL_PROPERTY_SUPERSEDING_SKILL_ID), 'old_value': old_skill.superseding_skill_id, 'new_value': new_skill_id }) ] skill_services.update_skill( self.user_id, old_skill_id, changelist, 'Marking the skill as having being merged successfully.') skill_services.delete_skill(self.user_id, old_skill_id) self.render_json({'merged_into_skill': new_skill_id})
def test_replace_skill_id_for_all_questions(self): question_id_2 = question_services.get_new_question_id() self.save_new_question(question_id_2, self.editor_id, self._create_valid_question_data('ABC'), ['skill_1']) question_id_3 = question_services.get_new_question_id() self.save_new_question(question_id_3, self.editor_id, self._create_valid_question_data('ABC'), ['skill_2']) question_services.create_new_question_skill_link( self.editor_id, self.question_id, 'skill_1', 0.5) question_services.create_new_question_skill_link( self.editor_id, question_id_2, 'skill_1', 0.3) question_services.create_new_question_skill_link( self.editor_id, question_id_3, 'skill_2', 0.9) question_skill_links = ( question_services.get_question_skill_links_of_skill( 'skill_1', 'Skill Description 1')) self.assertEqual(len(question_skill_links), 2) question_ids = [ question_skill.question_id for question_skill in question_skill_links ] self.assertItemsEqual(question_ids, [self.question_id, question_id_2]) for question_skill in question_skill_links: if question_skill.question_id == self.question_id: self.assertEqual(question_skill.skill_difficulty, 0.5) question_services.replace_skill_id_for_all_questions( 'skill_1', 'Description 1', 'skill_3') question_skill_links = ( question_services.get_question_skill_links_of_skill( 'skill_1', 'Description 1')) self.assertEqual(len(question_skill_links), 0) question_skill_links = ( question_services.get_question_skill_links_of_skill( 'skill_3', 'Skill Description 3')) question_ids = [ question_skill.question_id for question_skill in question_skill_links ] self.assertItemsEqual(question_ids, [self.question_id, question_id_2]) for question_skill in question_skill_links: if question_skill.question_id == self.question_id: self.assertEqual(question_skill.skill_difficulty, 0.5) questions = question_services.get_questions_by_ids( [self.question_id, question_id_2, question_id_3]) for question in questions: if question.id in ([self.question_id, question_id_2]): self.assertItemsEqual(question.linked_skill_ids, ['skill_3']) else: self.assertItemsEqual(question.linked_skill_ids, ['skill_2'])