def test_get_total_open_threads_for_multiple_explorations(self): feedback_services.create_thread( self.EXP_ID_1, self.EXPECTED_THREAD_DICT['state_name'], None, self.EXPECTED_THREAD_DICT['subject'], 'not used here') feedback_services.create_thread( self.EXP_ID_2, self.EXPECTED_THREAD_DICT['state_name'], None, self.EXPECTED_THREAD_DICT['subject'], 'not used here') threads_exp_1 = feedback_services.get_all_threads(self.EXP_ID_1, False) self.assertEqual(1, len(threads_exp_1)) threads_exp_2 = feedback_services.get_all_threads(self.EXP_ID_2, False) self.assertEqual(1, len(threads_exp_2)) def _close_thread(exp_id, thread_id): thread = (feedback_models.FeedbackThreadModel. get_by_exp_and_thread_id(exp_id, thread_id)) thread.status = feedback_models.STATUS_CHOICES_FIXED thread.put() _close_thread(self.EXP_ID_1, threads_exp_1[0].get_thread_id()) self.assertEqual( len(feedback_services.get_closed_threads(self.EXP_ID_1, False)), 1) self._run_computation() self.assertEqual(feedback_services.get_total_open_threads( feedback_services.get_thread_analytics_multi( [self.EXP_ID_1, self.EXP_ID_2])), 1)
def test_get_total_open_threads_for_multiple_explorations(self): feedback_services.create_thread( 'exploration', self.EXP_ID_1, None, self.EXPECTED_THREAD_DICT['subject'], 'not used here') feedback_services.create_thread( 'exploration', self.EXP_ID_2, None, self.EXPECTED_THREAD_DICT['subject'], 'not used here') threads_exp_1 = feedback_services.get_all_threads( 'exploration', self.EXP_ID_1, False) self.assertEqual(1, len(threads_exp_1)) threads_exp_2 = feedback_services.get_all_threads( 'exploration', self.EXP_ID_2, False) self.assertEqual(1, len(threads_exp_2)) def _close_thread(thread_id): """Closes the thread corresponding to its thread id by updating its status. """ thread = feedback_models.GeneralFeedbackThreadModel.get_by_id( thread_id) thread.status = feedback_models.STATUS_CHOICES_FIXED thread.put() _close_thread(threads_exp_1[0].id) self.assertEqual(len(feedback_services.get_closed_threads( 'exploration', self.EXP_ID_1, False)), 1) self._run_computation() self.assertEqual(feedback_services.get_total_open_threads( feedback_services.get_thread_analytics_multi( [self.EXP_ID_1, self.EXP_ID_2])), 1)
def test_get_closed_threads_without_suggestions(self): with self.swap(feedback_models.FeedbackThreadModel, 'get_threads', self._get_threads): with self.swap(utils, 'get_time_in_millisecs', self._get_milliseconds): threads = feedback_services.get_closed_threads( self.EXP_ID1, False) self.assertEqual(len(threads), 1) self.assertEqual(threads[0]['thread_id'], self.THREAD_ID4)
def get(self, exploration_id): threads = None list_type = self.request.get('list_type') has_suggestion = self._string_to_bool( self.request.get('has_suggestion')) if has_suggestion is None: raise self.InvalidInputException( 'Invalid value for has_suggestion.') if list_type == self._LIST_TYPE_OPEN: threads = feedback_services.get_open_threads( exploration_id, has_suggestion) elif list_type == self._LIST_TYPE_CLOSED: threads = feedback_services.get_closed_threads( exploration_id, has_suggestion) elif list_type == self._LIST_TYPE_ALL: threads = feedback_services.get_all_threads( exploration_id, has_suggestion) else: raise self.InvalidInputException('Invalid list type.') self.values.update({'threads': [t.to_dict() for t in threads]}) self.render_json(self.values)
def test_get_closed_threads_without_suggestions(self): threads = feedback_services.get_closed_threads(self.EXP_ID1, False) self.assertEqual(len(threads), 1) self.assertEqual(threads[0].id, self.EXP_ID1 + '.' + self.THREAD_ID4)
def test_get_closed_threads_with_suggestions(self): threads = feedback_services.get_closed_threads(self.EXP_ID1, True) self.assertEqual(len(threads), 2) self.assertEqual(threads[0].id, self.EXP_ID1 + '.' + self.THREAD_ID2) self.assertEqual(threads[1].id, self.EXP_ID1 + '.' + self.THREAD_ID3)