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_exp_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': [s.to_dict() for s in thread_summaries], 'number_of_unread_threads': number_of_unread_threads, 'subscription_list': subscription_list }) self.render_json(self.values)
def test_get_activity_progress(self): # Add activities to the completed section. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_0) learner_progress_services.mark_collection_as_completed( self.user_id, self.COL_ID_0) # Add activities to the incomplete section. state_name = 'state name' version = 1 learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_1, state_name, version) learner_progress_services.mark_collection_as_incomplete( self.user_id, self.COL_ID_1) # Add activities to the playlist section. learner_progress_services.add_exp_to_learner_playlist( self.user_id, self.EXP_ID_3) learner_progress_services.add_collection_to_learner_playlist( self.user_id, self.COL_ID_3) # Get the progress of the user. activity_progress = learner_progress_services.get_activity_progress( self.user_id) incomplete_exp_summaries = ( activity_progress[0].incomplete_exp_summaries) incomplete_collection_summaries = ( activity_progress[0].incomplete_collection_summaries) completed_exp_summaries = ( activity_progress[0].completed_exp_summaries) completed_collection_summaries = ( activity_progress[0].completed_collection_summaries) exploration_playlist_summaries = ( activity_progress[0].exploration_playlist_summaries) collection_playlist_summaries = ( activity_progress[0].collection_playlist_summaries) self.assertEqual(len(incomplete_exp_summaries), 1) self.assertEqual(len(incomplete_collection_summaries), 1) self.assertEqual(len(completed_exp_summaries), 1) self.assertEqual(len(completed_collection_summaries), 1) self.assertEqual(len(exploration_playlist_summaries), 1) self.assertEqual(len(collection_playlist_summaries), 1) self.assertEqual(incomplete_exp_summaries[0].title, 'Sillat Suomi') self.assertEqual(incomplete_collection_summaries[0].title, 'Introduce Oppia') self.assertEqual(completed_exp_summaries[0].title, 'Bridges in England') self.assertEqual(completed_collection_summaries[0].title, 'Bridges') self.assertEqual(exploration_playlist_summaries[0].title, 'Welcome Oppia') self.assertEqual(collection_playlist_summaries[0].title, 'Welcome Oppia Collection') # Delete an exploration in the completed section. exp_services.delete_exploration(self.owner_id, self.EXP_ID_0) # Delete an exploration in the incomplete section. exp_services.delete_exploration(self.owner_id, self.EXP_ID_1) # Delete an exploration in the playlist section. exp_services.delete_exploration(self.owner_id, self.EXP_ID_3) # Add an exploration to a collection that has already been completed. collection_services.update_collection( self.owner_id, self.COL_ID_0, [{ 'cmd': collection_domain.CMD_ADD_COLLECTION_NODE, 'exploration_id': self.EXP_ID_2 }], 'Add new exploration') # Get the progress of the user. activity_progress = learner_progress_services.get_activity_progress( self.user_id) # Check that the exploration is no longer present in the incomplete # section. self.assertEqual(len(activity_progress[0].incomplete_exp_summaries), 0) # Check that the dashboard records the exploration deleted in the # completed section. self.assertEqual(activity_progress[1]['completed_explorations'], 1) # Check that the dashboard records the exploration deleted in the # incomplete section. self.assertEqual(activity_progress[1]['incomplete_explorations'], 1) # Check that the dashboard records the exploration deleted in the # playlist section. self.assertEqual(activity_progress[1]['exploration_playlist'], 1) incomplete_collection_summaries = ( activity_progress[0].incomplete_collection_summaries) # Check that the collection to which a new exploration has been added # has been moved to the incomplete section. self.assertEqual(len(incomplete_collection_summaries), 2) self.assertEqual(incomplete_collection_summaries[1].title, 'Bridges') # Check that the dashboard has recorded the change in the collection. self.assertEqual(activity_progress[2], ['Bridges']) # Now suppose the user has completed the collection. It should be added # back to the completed section. learner_progress_services.mark_collection_as_completed( self.user_id, self.COL_ID_0) # Delete a collection in the completed section. collection_services.delete_collection(self.owner_id, self.COL_ID_0) # Delete a collection in the incomplete section. collection_services.delete_collection(self.owner_id, self.COL_ID_1) # Delete a collection in the playlist section. collection_services.delete_collection(self.owner_id, self.COL_ID_3) # Get the progress of the user. activity_progress = learner_progress_services.get_activity_progress( self.user_id) # Check that the dashboard records the collection deleted in the # completed section. self.assertEqual(activity_progress[1]['completed_collections'], 1) # Check that the dashboard records the collection deleted in the # incomplete section. self.assertEqual(activity_progress[1]['incomplete_collections'], 1) # Check that the dashboard records the collection deleted in the # playlist section. self.assertEqual(activity_progress[1]['collection_playlist'], 1)