def test_get_thread_summaries_load_test(self): # The speed of fetching the summaries of 100 threads having 5 messages # should be less than 1.7 second. In reality, the time taken to fetch # all the summaries is less than 0.2s. However since it seems to take # longer on Travis, the constant has been set to 1.7s. # Create 100 threads. for _ in range(100): feedback_services.create_thread( feconf.ENTITY_TYPE_EXPLORATION, self.EXP_ID_1, self.EXPECTED_THREAD_DICT['state_name'], self.user_id, self.EXPECTED_THREAD_DICT['subject'], 'not used here') threadlist = feedback_services.get_all_threads( feconf.ENTITY_TYPE_EXPLORATION, self.EXP_ID_1, False) thread_ids = [] for thread in threadlist: thread_ids.append(thread.id) # Create 5 messages in each thread. for _ in range(5): feedback_services.create_message( thread.id, self.user_id, None, None, 'editor message') start = time.time() # Fetch the summaries of all the threads. feedback_services.get_thread_summaries(self.user_id, thread_ids) elapsed_time = time.time() - start print "Time for fetching all the thread summaries -", elapsed_time self.assertLessEqual(elapsed_time, 1.7)
def test_message_count(self): """Test if the job returns the correct message count.""" feedback_services.create_thread( self.EXP_ID_1, self.EXPECTED_THREAD_DICT['state_name'], self.user_id, self.EXPECTED_THREAD_DICT['subject'], 'not used here') feedback_services.create_thread( self.EXP_ID_2, self.EXPECTED_THREAD_DICT['state_name'], self.user_id, self.EXPECTED_THREAD_DICT['subject'], 'not used here') thread_ids = subscription_services.get_all_threads_subscribed_to( self.user_id) self._run_one_off_job() thread_summaries, _ = feedback_services.get_thread_summaries( self.user_id, thread_ids) # Check that the first message has only one message. self.assertEqual(thread_summaries[0]['total_message_count'], 1) # Check that the second message has only one message. self.assertEqual(thread_summaries[1]['total_message_count'], 1) feedback_services.create_message(self.EXP_ID_1, thread_ids[0].split('.')[1], self.user_id, None, None, 'editor message') self._run_one_off_job() thread_summaries, _ = feedback_services.get_thread_summaries( self.user_id, thread_ids) # Check that the first message has two messages. self.assertEqual(thread_summaries[0]['total_message_count'], 2) # Get the first message so that we can delete it and check the error # case. first_message_model = (feedback_models.FeedbackMessageModel.get( self.EXP_ID_1, thread_ids[0].split('.')[1], 0)) first_message_model.delete() output = self._run_one_off_job() # Check if the quantities have the correct values. self.assertEqual(output[0][1]['message_count'], 1) self.assertEqual(output[0][1]['next_message_id'], 2)
def get(self): """Handles GET requests.""" ( learner_progress, number_of_nonexistent_activities, completed_to_incomplete_collections) = ( learner_progress_services.get_activity_progress(self.user_id)) completed_exp_summary_dicts = ( summary_services.get_displayable_exp_summary_dicts( learner_progress.completed_exp_summaries)) incomplete_exp_summary_dicts = ( summary_services.get_displayable_exp_summary_dicts( learner_progress.incomplete_exp_summaries)) completed_collection_summary_dicts = ( learner_progress_services.get_collection_summary_dicts( learner_progress.completed_collection_summaries)) incomplete_collection_summary_dicts = ( learner_progress_services.get_collection_summary_dicts( learner_progress.incomplete_collection_summaries)) exploration_playlist_summary_dicts = ( summary_services.get_displayable_exp_summary_dicts( learner_progress.exploration_playlist_summaries)) collection_playlist_summary_dicts = ( learner_progress_services.get_collection_summary_dicts( learner_progress.collection_playlist_summaries)) full_thread_ids = subscription_services.get_all_threads_subscribed_to( self.user_id) if len(full_thread_ids) > 0: thread_summaries, number_of_unread_threads = ( feedback_services.get_thread_summaries( self.user_id, full_thread_ids)) else: thread_summaries, number_of_unread_threads = [], 0 creators_subscribed_to = ( subscription_services.get_all_creators_subscribed_to(self.user_id)) creators_settings = user_services.get_users_settings( creators_subscribed_to) subscription_list = [] for index, creator_settings in enumerate(creators_settings): subscription_summary = { 'creator_picture_data_url': ( creator_settings.profile_picture_data_url), 'creator_username': creator_settings.username, 'creator_impact': ( user_services.get_user_impact_score( creators_subscribed_to[index])) } subscription_list.append(subscription_summary) self.values.update({ 'completed_explorations_list': completed_exp_summary_dicts, 'completed_collections_list': completed_collection_summary_dicts, 'incomplete_explorations_list': incomplete_exp_summary_dicts, 'incomplete_collections_list': incomplete_collection_summary_dicts, 'exploration_playlist': exploration_playlist_summary_dicts, 'collection_playlist': collection_playlist_summary_dicts, 'number_of_nonexistent_activities': ( number_of_nonexistent_activities), 'completed_to_incomplete_collections': ( completed_to_incomplete_collections), 'thread_summaries': thread_summaries, 'number_of_unread_threads': number_of_unread_threads, 'subscription_list': subscription_list }) self.render_json(self.values)
def test_get_thread_summaries(self): feedback_services.create_thread( 'exploration', self.EXP_ID_1, self.user_id, self.EXPECTED_THREAD_DICT['subject'], 'not used here') feedback_services.create_thread( 'exploration', self.EXP_ID_2, self.user_id, self.EXPECTED_THREAD_DICT['subject'], 'not used here') # The message count parameter is missing for this thread. The thread # summaries function should account for this and function # flawlessly. thread_3 = feedback_models.GeneralFeedbackThreadModel( id='exploration.' + self.EXP_ID_3 + '.' + self.THREAD_ID, entity_type='exploration', entity_id=self.EXP_ID_3, original_author_id=self.user_id, subject='Feedback', status=feedback_models.STATUS_CHOICES_OPEN, has_suggestion=False) thread_3.put() feedback_services.create_message( 'exploration.' + self.EXP_ID_3 + '.' + self.THREAD_ID, self.user_id, None, None, 'not used here') thread_ids = subscription_services.get_all_threads_subscribed_to( self.user_id) thread_ids.append('exploration.' + self.EXP_ID_3 + '.' + self.THREAD_ID) thread_summaries, number_of_unread_threads = ( feedback_services.get_thread_summaries( self.user_id, thread_ids)) exploration_titles = ( ['Bridges in England', 'Sillat Suomi', 'Leaning tower of Pisa']) # Fetch the threads. threads = [] threads.append(feedback_services.get_thread(thread_ids[0])) threads.append(feedback_services.get_thread(thread_ids[1])) threads.append(feedback_services.get_thread( 'exploration.' + self.EXP_ID_3 + '.' + self.THREAD_ID)) # Check if the number of unread messages match. self.assertEqual(number_of_unread_threads, 0) for index, thread in enumerate(threads): thread_summary = { 'status': thread.status, 'original_author_id': thread.original_author_id, 'last_updated': thread_summaries[index]['last_updated'], 'last_message_text': 'not used here', 'total_message_count': 1, 'last_message_read': True, 'second_last_message_read': None, 'author_last_message': user_services.get_username( self.user_id), 'author_second_last_message': None, 'exploration_title': exploration_titles[index] } # Check if the summaries match. self.assertDictContainsSubset( thread_summary, thread_summaries[index]) feedback_services.create_message( threads[0].id, self.owner_id, None, None, 'editor message') _, number_of_unread_threads = ( feedback_services.get_thread_summaries(self.user_id, thread_ids)) # Check if the number of unread messages is equal to 1. self.assertEqual(number_of_unread_threads, 1)