def test_merge_skill(self): self.login(self.ADMIN_EMAIL) old_skill_id = self.linked_skill_id new_skill_id = skill_services.get_new_skill_id() self.save_new_skill(new_skill_id, self.admin_id, 'Skill Description') old_links = question_services.get_question_skill_links_of_skill( old_skill_id, 'Old Description') new_links = question_services.get_question_skill_links_of_skill( new_skill_id, 'Skill Description') self.assertEqual(len(old_links), 1) self.assertEqual(old_links[0].skill_id, old_skill_id) self.assertEqual(len(new_links), 0) csrf_token = self.get_new_csrf_token() payload = { 'old_skill_id': old_skill_id, 'new_skill_id': new_skill_id } json_response = self.post_json( self.url, payload, csrf_token=csrf_token) old_links = question_services.get_question_skill_links_of_skill( old_skill_id, 'Old Description') new_links = question_services.get_question_skill_links_of_skill( new_skill_id, 'Skill Description') self.assertEqual(json_response['merged_into_skill'], new_skill_id) self.assertEqual(len(old_links), 0) self.assertEqual(len(new_links), 1) self.assertEqual(new_links[0].skill_id, new_skill_id) self.logout()
def test_merge_skill(self): self.login(self.ADMIN_EMAIL) old_skill_id = self.linked_skill_id new_skill_id = skill_services.get_new_skill_id() old_links = question_services.get_question_skill_links_of_skill( old_skill_id) new_links = question_services.get_question_skill_links_of_skill( new_skill_id) self.assertEqual(len(old_links), 1) self.assertEqual(old_links[0].skill_id, old_skill_id) self.assertEqual(len(new_links), 0) with self.swap(constants, 'ENABLE_NEW_STRUCTURES', True): csrf_token = self._get_csrf_token_for_put() payload = { 'old_skill_id': old_skill_id, 'new_skill_id': new_skill_id } json_response = self.post_json(self.url, payload, csrf_token=csrf_token) old_links = question_services.get_question_skill_links_of_skill( old_skill_id) new_links = question_services.get_question_skill_links_of_skill( new_skill_id) self.assertEqual(json_response['merged_into_skill'], new_skill_id) self.assertEqual(len(old_links), 0) self.assertEqual(len(new_links), 1) self.assertEqual(new_links[0].skill_id, new_skill_id) self.logout()
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'])
def test_update_skill_ids_of_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')) 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')) question_services.create_new_question_skill_link( self.question_id, 'skill_1', 0.5) question_services.create_new_question_skill_link( question_id_2, 'skill_1', 0.3) question_services.create_new_question_skill_link( 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.update_skill_ids_of_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)
def test_get_question_skill_links_of_skill(self): # If the skill id doesnt exist at all, it returns an empty list. question_skill_links = ( question_services.get_question_skill_links_of_skill( 'non_existent_skill_id', 'Skill Description')) self.assertEqual(len(question_skill_links), 0) # If the question ids dont exist for a skill, it returns an empty list. question_skill_links = ( question_services.get_question_skill_links_of_skill( 'skill_1', 'Skill Description 1')) self.assertEqual(len(question_skill_links), 0) 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']) # Setting skill difficulty for self.question_id. 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.1) # When question ids exist, it returns a list of questionskilllinks. question_skill_links = ( question_services.get_question_skill_links_of_skill( 'skill_1', 'Skill Description 1')) self.assertEqual(len(question_skill_links), 2) self.assertTrue( isinstance(question_skill_links[0], question_domain.QuestionSkillLink)) 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)
def test_update_skill_ids_of_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')) 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')) question_services.create_new_question_skill_link( self.question_id, 'skill_1') question_services.create_new_question_skill_link( question_id_2, 'skill_1') question_services.create_new_question_skill_link( question_id_3, 'skill_2') question_skill_links = ( question_services.get_question_skill_links_of_skill('skill_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]) question_services.update_skill_ids_of_questions('skill_1', 'skill_3') question_skill_links = ( question_services.get_question_skill_links_of_skill('skill_1')) self.assertEqual(len(question_skill_links), 0) question_skill_links = ( question_services.get_question_skill_links_of_skill('skill_3')) question_ids = [ question_skill.question_id for question_skill in question_skill_links ] self.assertItemsEqual(question_ids, [self.question_id, question_id_2])
def test_get_question_skill_links_of_skill(self): # If the skill id doesnt exist at all, it returns an empty list. question_skill_links = ( question_services.get_question_skill_links_of_skill( 'non_existent_skill_id')) self.assertEqual(len(question_skill_links), 0) # If the question ids dont exist for a skill, it returns an empty list. question_skill_links = ( question_services.get_question_skill_links_of_skill('skill_1')) self.assertEqual(len(question_skill_links), 0) 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')) 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')) question_services.create_new_question_skill_link( self.question_id, 'skill_1') question_services.create_new_question_skill_link( question_id_2, 'skill_1') question_services.create_new_question_skill_link( question_id_3, 'skill_2') # When question ids exist, it returns a list of questionskilllinks. question_skill_links = ( question_services.get_question_skill_links_of_skill('skill_1')) self.assertEqual(len(question_skill_links), 2) self.assertTrue( isinstance(question_skill_links[0], question_domain.QuestionSkillLink)) question_ids = [ question_skill.question_id for question_skill in question_skill_links ] self.assertItemsEqual(question_ids, [self.question_id, question_id_2])
def _validate_question_count(cls, item, field_name_to_external_model_references): """Validate that question_count matches the number of questions linked to the opportunity's skill. Args: item: ndb.Model. SkillOpportunityModel to validate. field_name_to_external_model_references: dict(str, (list(base_model_validators.ExternalModelReference))). A dict keyed by field name. The field name represents a unique identifier provided by the storage model to which the external model is associated. Each value contains a list of ExternalModelReference objects corresponding to the field_name. For examples, all the external Exploration Models corresponding to a storage model can be associated with the field name 'exp_ids'. This dict is used for validation of External Model properties linked to the storage model. """ skill_model_references = ( field_name_to_external_model_references['skill_ids']) for skill_model_reference in skill_model_references: skill_model = skill_model_reference.model_instance if skill_model is None or skill_model.deleted: model_class = skill_model_reference.model_class model_id = skill_model_reference.model_id cls._add_error( 'skill_ids %s' % (base_model_validators.ERROR_CATEGORY_FIELD_CHECK), 'Entity id %s: based on field skill_ids having' ' value %s, expect model %s with id %s but it doesn\'t' ' exist' % (item.id, model_id, model_class.__name__, model_id)) continue skill = skill_fetchers.get_skill_from_model(skill_model) question_skill_links = ( question_services.get_question_skill_links_of_skill( skill.id, skill.description)) question_count = len(question_skill_links) if question_count != item.question_count: cls._add_error( 'question_%s' % (base_model_validators.ERROR_CATEGORY_COUNT_CHECK), 'Entity id %s: question_count: %s does not match the ' 'question_count of external skill model: %s' % (item.id, item.question_count, question_count))