Exemple #1
0
    def test_fetch_identifies_the_resolved_tasks_of_each_state(self):
        tasks = [
            self._new_resolved_task(
                state_name='A',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE),
            self._new_resolved_task(
                state_name='B',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE),
            self._new_resolved_task(
                state_name='B',
                task_type=(
                    improvements_models.TASK_TYPE_NEEDS_GUIDING_RESPONSES)),
            self._new_resolved_task(
                state_name='C',
                task_type=(
                    improvements_models.TASK_TYPE_INEFFECTIVE_FEEDBACK_LOOP)),
            self._new_resolved_task(
                state_name='D',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE),
            self._new_resolved_task(
                state_name='D',
                task_type=(
                    improvements_models.TASK_TYPE_NEEDS_GUIDING_RESPONSES)),
            self._new_resolved_task(
                state_name='D',
                task_type=(
                    improvements_models.TASK_TYPE_INEFFECTIVE_FEEDBACK_LOOP)),
            self._new_resolved_task(
                state_name='D',
                task_type=(improvements_models.
                           TASK_TYPE_SUCCESSIVE_INCORRECT_ANSWERS))
        ]
        improvements_services.put_tasks(tasks)
        open_tasks, resolved_task_types_by_state_name = (
            improvements_services.fetch_exploration_tasks(self.exp))

        self.assertEqual(open_tasks, [])
        self.assertItemsEqual(list(resolved_task_types_by_state_name.keys()), [
            'A',
            'B',
            'C',
            'D',
        ])
        self.assertItemsEqual(resolved_task_types_by_state_name['A'],
                              ['high_bounce_rate'])
        self.assertItemsEqual(resolved_task_types_by_state_name['B'], [
            'high_bounce_rate',
            'needs_guiding_responses',
        ])
        self.assertItemsEqual(resolved_task_types_by_state_name['C'], [
            'ineffective_feedback_loop',
        ])
        self.assertItemsEqual(resolved_task_types_by_state_name['D'], [
            'high_bounce_rate',
            'needs_guiding_responses',
            'ineffective_feedback_loop',
            'successive_incorrect_answers',
        ])
Exemple #2
0
 def get(self, exploration_id):
     open_tasks, resolved_task_types_by_state_name = (
         improvements_services.fetch_exploration_tasks(
             exp_fetchers.get_exploration_by_id(exploration_id)))
     self.render_json({
         'open_tasks': [t.to_dict() for t in open_tasks],
         'resolved_task_types_by_state_name':
         (resolved_task_types_by_state_name),
     })
Exemple #3
0
    def test_fetch_ignores_obsolete_tasks(self):
        tasks = [
            self._new_obsolete_task(state_name='State %d' % (i, ))
            for i in range(50)
        ]
        improvements_services.put_tasks(tasks)
        open_tasks, resolved_task_types_by_state_name = (
            improvements_services.fetch_exploration_tasks(self.exp))

        self.assertEqual(open_tasks, [])
        self.assertEqual(resolved_task_types_by_state_name, {})
Exemple #4
0
    def test_fetch_when_number_of_open_tasks_exceed_single_fetch_limit(self):
        tasks = [
            self._new_open_task(state_name='State %d' % (i, ))
            for i in range(int(feconf.MAX_TASK_MODELS_PER_FETCH * 2.5))
        ]
        improvements_services.put_tasks(tasks)
        open_tasks, resolved_task_types_by_state_name = (
            improvements_services.fetch_exploration_tasks(self.exp))

        self.assertEqual(resolved_task_types_by_state_name, {})
        self.assertItemsEqual([t.to_dict() for t in tasks],
                              [t.to_dict() for t in open_tasks])
Exemple #5
0
 def get(self, exploration_id):
     open_tasks, resolved_task_types_by_state_name = (
         improvements_services.fetch_exploration_tasks(
             exp_fetchers.get_exploration_by_id(exploration_id)))
     self.render_json({
         'open_tasks': [
             get_task_dict_with_username_and_profile_picture(
                 task
             ) for task in open_tasks
         ],
         'resolved_task_types_by_state_name': (
             resolved_task_types_by_state_name),
     })
Exemple #6
0
    def test_fetch_only_returns_tasks_for_the_given_exploration_version(self):
        tasks = [
            # Version 1 tasks.
            self._new_open_task(
                state_name='A',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE,
                exploration_version=1),
            self._new_open_task(
                state_name='B',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE,
                exploration_version=1),
            self._new_open_task(
                state_name='C',
                task_type=improvements_models.TASK_TYPE_NEEDS_GUIDING_RESPONSES,
                exploration_version=1),
            # Version 2 tasks.
            self._new_open_task(
                state_name='A',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE,
                exploration_version=2),
            self._new_resolved_task(
                state_name='B',
                task_type=improvements_models.TASK_TYPE_HIGH_BOUNCE_RATE,
                exploration_version=2),
            self._new_resolved_task(
                state_name='C',
                task_type=improvements_models.TASK_TYPE_NEEDS_GUIDING_RESPONSES,
                exploration_version=2),
        ]
        improvements_services.put_tasks(tasks)

        self.exp.version = 2
        open_tasks, resolved_task_types_by_state_name = (
            improvements_services.fetch_exploration_tasks(self.exp))

        self.assertItemsEqual(
            [t.to_dict() for t in open_tasks], [tasks[3].to_dict()])
        self.assertEqual(
            resolved_task_types_by_state_name, {
                'B': ['high_bounce_rate'],
                'C': ['needs_guiding_responses'],
            })
Exemple #7
0
 def test_fetch_when_no_models_exist(self):
     open_tasks, resolved_task_types_by_state_name = (
         improvements_services.fetch_exploration_tasks(self.exp))
     self.assertEqual(open_tasks, [])
     self.assertEqual(resolved_task_types_by_state_name, {})