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', ])
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), })
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, {})
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])
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), })
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'], })
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, {})