Beispiel #1
0
    def test_delete_question(self):
        question_rights_model = question_models.QuestionRightsModel.get(
            self.question_id)
        self.assertFalse(question_rights_model is None)

        question_summary_model = question_models.QuestionSummaryModel.get(
            self.question_id)
        self.assertFalse(question_summary_model is None)

        question_services.delete_question(self.editor_id, self.question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionModel with id %s not found' %
             (self.question_id))):
            question_models.QuestionModel.get(self.question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionRightsModel with id %s not found' %
             (self.question_id))):
            question_models.QuestionRightsModel.get(self.question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionSummaryModel with id %s not found' %
             (self.question_id))):
            question_models.QuestionSummaryModel.get(self.question_id)

        with self.assertRaisesRegexp(
                Exception,
                'Entity for class QuestionModel with id question_id '
                'not found'):
            question_services.delete_question(self.editor_id, 'question_id')
    def test_migration_job_skips_deleted_question(self):
        """Tests that the question migration job skips deleted question
        and does not attempt to migrate.
        """
        # Delete the question before migration occurs.
        question_services.delete_question(self.albert_id, self.QUESTION_ID)

        # Ensure the question is deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        # Start migration job on sample question.
        with self.swap(constants, 'ENABLE_NEW_STRUCTURES', True):
            job_id = (
                question_jobs_one_off.QuestionMigrationOneOffJob.create_new())
            question_jobs_one_off.QuestionMigrationOneOffJob.enqueue(job_id)

            # This running without errors indicates the deleted question is
            # being ignored.
            self.process_and_flush_pending_tasks()

        # Ensure the question is still deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        output = question_jobs_one_off.QuestionMigrationOneOffJob.get_output(job_id)  # pylint: disable=line-too-long
        expected = [[
            u'question_deleted', [u'Encountered 1 deleted questions.']
        ]]
        self.assertEqual(expected, [ast.literal_eval(x) for x in output])
    def test_migration_job_fails_with_invalid_question(self):
        question_services.delete_question(self.albert_id,
                                          self.QUESTION_ID,
                                          force_deletion=True)
        state = self._create_valid_question_data('ABC')
        question_state_data = state.to_dict()
        language_code = 'en'
        version = 1
        question_model = question_models.QuestionModel.create(
            question_state_data, language_code, version, [])
        question_model.question_state_data_schema_version = (
            feconf.CURRENT_STATE_SCHEMA_VERSION)
        question_model.commit(self.albert_id, 'invalid question created', [])
        question_id = question_model.id

        # Start migration job.
        job_id = (
            question_jobs_one_off.QuestionMigrationOneOffJob.create_new())
        question_jobs_one_off.QuestionMigrationOneOffJob.enqueue(job_id)
        self.assertEqual(
            self.count_jobs_in_taskqueue(
                taskqueue_services.QUEUE_NAME_ONE_OFF_JOBS), 1)

        self.process_and_flush_pending_tasks()

        output = (question_jobs_one_off.QuestionMigrationOneOffJob.get_output(
            job_id))
        expected = [[
            u'validation_error',
            [
                u'Question %s failed validation: linked_skill_ids is '
                'either null or an empty list' % question_id
            ]
        ]]
        self.assertEqual(expected, [ast.literal_eval(x) for x in output])
    def test_migration_job_skips_deleted_question(self):
        """Tests that the question migration job skips deleted questions
        and does not attempt to migrate.
        """
        self.save_new_question(
            self.QUESTION_ID, self.albert_id,
            self._create_valid_question_data('ABC'), [self.skill_id])

        # Delete the question before migration occurs.
        question_services.delete_question(self.albert_id, self.QUESTION_ID)

        # Ensure the question is deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        # Start migration job on sample question.
        job_id = (
            question_jobs_one_off.QuestionSnapshotsMigrationJob.create_new())
        question_jobs_one_off.QuestionSnapshotsMigrationJob.enqueue(job_id)

        # This running without errors indicates the deleted question is
        # being ignored.
        self.process_and_flush_pending_mapreduce_tasks()

        actual_output = (
            question_jobs_one_off.QuestionSnapshotsMigrationJob.get_output(
                job_id))
        expected_output_choices = [
            '[u\'INFO - Question does not exist\', [u\'%s-1\', u\'%s-2\']]' %
            (self.QUESTION_ID, self.QUESTION_ID),
            '[u\'INFO - Exploration does not exist\', [u\'%s-2\', u\'%s-1\']]' %
            (self.QUESTION_ID, self.QUESTION_ID)
        ]
        self.assertEqual(len(actual_output), 1)
        self.assertIn(actual_output[0], expected_output_choices)
    def test_deleted_question_are_not_processed(self):
        """Tests that the job does not process deleted questions."""
        # Delete the question before migration occurs.
        question_services.delete_question(
            self.albert_id, self.QUESTION_ID)

        # Ensure the question is deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        # Start migration job on sample question.
        job_id = (
            question_jobs_one_off.FixQuestionImagesStorageOneOffJob.create_new()
        )
        question_jobs_one_off.FixQuestionImagesStorageOneOffJob.enqueue(job_id)
        self.process_and_flush_pending_mapreduce_tasks()

        # Ensure that the question is still deleted and the output is None.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        output = (
            question_jobs_one_off.FixQuestionImagesStorageOneOffJob.get_output(
                job_id))
        self.assertEqual(
            [[u'question_deleted', [u'Encountered 1 deleted questions.']]],
            [ast.literal_eval(x) for x in output])
Beispiel #6
0
    def test_job_skips_deleted_question(self):
        """Tests that the regenerate summary job skips deleted question."""

        question_services.delete_question(self.albert_id, self.QUESTION_ID)

        # Ensure the question is deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        # Start migration job on sample question.
        job_id = (question_jobs_one_off.RegenerateQuestionSummaryOneOffJob.
                  create_new())
        question_jobs_one_off.RegenerateQuestionSummaryOneOffJob.enqueue(
            job_id)
        self.process_and_flush_pending_mapreduce_tasks()

        # Ensure the question is still deleted.
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id(self.QUESTION_ID)

        output = (question_jobs_one_off.RegenerateQuestionSummaryOneOffJob.
                  get_output(job_id))

        expected = [[
            u'question_deleted', [u'Encountered 1 deleted questions.']
        ]]
        self.assertEqual(expected, [ast.literal_eval(x) for x in output])
Beispiel #7
0
 def delete(self, collection_id, question_id):
     """Handles Delete requests."""
     if not collection_id:
         raise self.PageNotFoundException
     if not question_id:
         raise self.PageNotFoundException
     question_services.delete_question(self.user_id, collection_id,
                                       question_id)
 def delete(self, question_id):
     """Handles Delete requests."""
     question = question_services.get_question_by_id(question_id,
                                                     strict=False)
     if question is None:
         raise self.PageNotFoundException(
             'The question with the given id doesn\'t exist.')
     question_services.delete_question(self.user_id, question_id)
     self.render_json(self.values)
Beispiel #9
0
    def delete(self, question_id):
        """Handles Delete requests."""
        if not feconf.ENABLE_NEW_STRUCTURES:
            raise self.PageNotFoundException

        question = question_services.get_question_by_id(question_id,
                                                        strict=False)
        if question is None:
            raise self.PageNotFoundException(
                'The question with the given id doesn\'t exist.')
        question_services.delete_question(self.user_id, question_id)
Beispiel #10
0
    def test_delete_question(self):
        question_services.delete_question(self.editor_id, self.question_id)

        with self.assertRaisesRegexp(Exception, (
            'Entity for class QuestionModel with id %s not found' % (
                self.question_id))):
            question_models.QuestionModel.get(self.question_id)

        with self.assertRaisesRegexp(
            Exception, 'Entity for class QuestionModel with id question_id '
            'not found'):
            question_services.delete_question(self.editor_id, 'question_id')
Beispiel #11
0
    def test_delete_question(self):
        question = question_domain.Question(
            'dummy', self._create_valid_question_data('ABC'), 1, 'en')

        question_id = question_services.add_question(self.owner_id, question)
        question_services.delete_question(self.owner_id, question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionModel with id %s not found' %
             (question_id))):
            question_models.QuestionModel.get(question_id)
    def test_delete_question(self):
        question = question_domain.Question(
            'dummy', 'A Question',
            exp_domain.State.create_default_state('ABC').to_dict(), 1, 'en')

        question_id = question_services.add_question(self.owner_id, question)
        question_services.delete_question(self.owner_id, question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionModel with id %s not found' %
             (question_id))):
            question_models.QuestionModel.get(question_id)
    def test_delete_question_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'),
                               [self.SKILL_ID])

        question_services.delete_question(self.USER_ID, self.QUESTION_ID)

        skill_opportunities, _, _ = (
            opportunity_services.get_skill_opportunities(None))
        opportunity = skill_opportunities[0]
        self.assertEqual(len(skill_opportunities), 1)
        self.assertEqual(opportunity.question_count, 0)
    def test_job_skips_deleted_questions(self):
        question_data1 = self._create_valid_question_data('ABC')
        self.save_new_question('question_id1', self.albert_id, question_data1,
                               ['skill_id1'])
        question_services.delete_question(self.albert_id, 'question_id1')
        with self.assertRaisesRegexp(Exception, 'Entity .* not found'):
            question_services.get_question_by_id('question_id1')

        job_id = (
            question_jobs_one_off.QuestionsMathRteAuditOneOffJob.create_new())
        question_jobs_one_off.QuestionsMathRteAuditOneOffJob.enqueue(job_id)
        self.assertEqual(
            self.count_jobs_in_taskqueue(
                taskqueue_services.QUEUE_NAME_ONE_OFF_JOBS), 1)

        self.process_and_flush_pending_tasks()
        output = (question_jobs_one_off.QuestionsMathRteAuditOneOffJob.
                  get_output(job_id))
        self.assertEqual(output, [])
Beispiel #15
0
    def test_delete_question(self):
        collection_id = 'col1'
        exp_id = '0_exploration_id'
        owner_id = self.get_user_id_from_email(self.OWNER_EMAIL)

        # Create a new collection and exploration.
        self.save_new_valid_collection(collection_id,
                                       owner_id,
                                       exploration_id=exp_id)

        # Add a skill.
        collection_services.update_collection(
            owner_id, collection_id, [{
                'cmd': collection_domain.CMD_ADD_COLLECTION_SKILL,
                'name': 'skill0'
            }], 'Add a new skill')

        question = question_domain.Question(
            'dummy', 'A Question',
            exp_domain.State.create_default_state('ABC').to_dict(), 1,
            collection_id, 'en')

        question_id = question_services.add_question(self.owner_id, question)
        with self.assertRaisesRegexp(
                Exception, ('The question with ID %s is not present'
                            ' in the given collection' % question_id)):
            question_services.delete_question(self.owner_id, 'random',
                                              question_id)
        question_services.delete_question(self.owner_id, collection_id,
                                          question_id)

        with self.assertRaisesRegexp(
                Exception,
            ('Entity for class QuestionModel with id %s not found' %
             (question_id))):
            question_models.QuestionModel.get(question_id)