def test_mark_exploration_as_completed(self): self.assertEqual(self._get_all_completed_exp_ids(self.user_id), []) # Add an exploration to the completed list of a learner. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_0) self.assertEqual(self._get_all_completed_exp_ids(self.user_id), [self.EXP_ID_0]) # Completing an exploration again has no effect. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_0) self.assertEqual(self._get_all_completed_exp_ids(self.user_id), [self.EXP_ID_0]) state_name = 'state_name' version = 1 # Add an exploration to the in progress list of the learner. learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_1, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_1]) # Add an exploration to the learner playlist of the learner. learner_playlist_services.mark_exploration_to_be_played_later( self.user_id, self.EXP_ID_3) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), [self.EXP_ID_3]) # Test that on adding an incomplete exploration to the completed list # it gets removed from the incomplete list. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_1) self.assertEqual(self._get_all_completed_exp_ids(self.user_id), [self.EXP_ID_0, self.EXP_ID_1]) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), []) # Test that on adding an exploration to the completed list, it gets # removed from the learner playlist. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_3) self.assertEqual(self._get_all_completed_exp_ids(self.user_id), [self.EXP_ID_0, self.EXP_ID_1, self.EXP_ID_3]) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), []) # Test that an exploration created by the user is not added to the # completed list. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_2) self.assertEqual(self._get_all_completed_exp_ids(self.user_id), [self.EXP_ID_0, self.EXP_ID_1, self.EXP_ID_3])
def test_get_all_exp_ids_in_learner_playlist(self): self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), []) # Add an exploration to the learner playlist. learner_playlist_services.mark_exploration_to_be_played_later( self.user_id, self.EXP_ID_0) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), [self.EXP_ID_0]) # Add another exploration. learner_playlist_services.mark_exploration_to_be_played_later( self.user_id, self.EXP_ID_1) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), [self.EXP_ID_0, self.EXP_ID_1])
def test_remove_exploration_from_learner_playlist(self): self.login(self.VIEWER_EMAIL) # Add explorations to the learner playlist. learner_progress_services.add_exp_to_learner_playlist( self.viewer_id, self.EXP_ID_1) learner_progress_services.add_exp_to_learner_playlist( self.viewer_id, self.EXP_ID_2) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_1, self.EXP_ID_2]) # Remove an exploration. self.delete_json( python_utils.STR( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_1))) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_2]) # Removing the same exploration again has no effect. self.delete_json( python_utils.STR( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_1))) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_2]) # Remove the second exploration. self.delete_json( python_utils.STR( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2))) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), []) self.logout()
def test_add_exploration_to_learner_playlist(self): self.login(self.VIEWER_EMAIL) response = self.testapp.get(feconf.LEARNER_DASHBOARD_URL) csrf_token = self.get_csrf_token_from_response(response) # Add one exploration to the playlist. self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_1), {}, csrf_token) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_1]) # Add another exploration. self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2), {}, csrf_token) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_1, self.EXP_ID_2]) # User rearranges the explorations. 'exp title 2' is shifted to the # first position. payload = {'index': 0} self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_2), payload, csrf_token) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_2, self.EXP_ID_1]) # If an exploration belongs to the incomplete list or completed list, it # should not be added. Here we test for the completed case. learner_progress_services.mark_exploration_as_completed( self.viewer_id, self.EXP_ID_3) response = self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_3), {}, csrf_token) self.assertEqual(response['belongs_to_completed_or_incomplete_list'], True) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_2, self.EXP_ID_1]) # If an exploration belongs to one of the subscribed explorations, # it should not be added to the learner playlist. response = self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, self.EXP_ID_4), {}, csrf_token) self.assertEqual(response['belongs_to_subscribed_activities'], True) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.viewer_id), [self.EXP_ID_2, self.EXP_ID_1]) # Now we begin testing of not exceeding the limit of activities in the # learner playlist. # Add feconf.MAX_LEARNER_PLAYLIST_ACTIVITY_COUNT - 2 activities to reach # the maximum limit. for exp_id in range(5, feconf.MAX_LEARNER_PLAYLIST_ACTIVITY_COUNT + 3): self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, 'exp_id_%s' % exp_id), {}, csrf_token) # Now if we try and add an activity we should get a message saying we # are exceeding the limit. response = self.post_json( '%s/%s/%s' % (feconf.LEARNER_PLAYLIST_DATA_URL, constants.ACTIVITY_TYPE_EXPLORATION, 'exp_id_%s' % str(feconf.MAX_LEARNER_PLAYLIST_ACTIVITY_COUNT + 3)), {}, csrf_token) self.assertEqual(response['playlist_limit_exceeded'], True) self.logout()
def test_mark_exploration_as_incomplete(self): self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), []) state_name = u'state name' version = 1 exp_details = { 'timestamp': datetime.datetime.utcnow(), 'state_name': state_name, 'version': version } # Add an exploration to the incomplete list of a learner. learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_0, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_0]) self._check_if_exp_details_match( self._get_incomplete_exp_details(self.user_id, self.EXP_ID_0), exp_details) state_name = u'new_state_name' version = 2 modified_exp_details = { 'timestamp': datetime.datetime.utcnow(), 'state_name': state_name, 'version': version } # On adding an exploration again, its details are updated to the latest # version. learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_0, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_0]) self._check_if_exp_details_match( self._get_incomplete_exp_details(self.user_id, self.EXP_ID_0), modified_exp_details) # If an exploration has already been completed, it is not added. learner_progress_services.mark_exploration_as_completed( self.user_id, self.EXP_ID_1) learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_1, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_0]) # Add an exploration to the learner playlist. learner_playlist_services.mark_exploration_to_be_played_later( self.user_id, self.EXP_ID_3) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), [self.EXP_ID_3]) # Test that on adding an exploration to the incomplete list, it gets # removed from the learner playlist. learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_3, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_0, self.EXP_ID_3]) self.assertEqual( learner_playlist_services.get_all_exp_ids_in_learner_playlist( self.user_id), []) # Test that an exploration created by the user is not added to the # incomplete list. learner_progress_services.mark_exploration_as_incomplete( self.user_id, self.EXP_ID_2, state_name, version) self.assertEqual(self._get_all_incomplete_exp_ids(self.user_id), [self.EXP_ID_0, self.EXP_ID_3])