Exemple #1
0
    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)
Exemple #6
0
    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])
Exemple #7
0
    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])
Exemple #8
0
    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))