Exemple #1
0
    def put(self):
        """Handles POST requests."""
        update_type = self.payload.get('update_type')
        data = self.payload.get('data')

        if update_type == 'user_bio':
            user_services.update_user_bio(self.user_id, data)
        elif update_type == 'subject_interests':
            user_services.update_subject_interests(self.user_id, data)
        elif update_type == 'preferred_language_codes':
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == 'preferred_site_language_code':
            user_services.update_preferred_site_language_code(
                self.user_id, data)
        elif update_type == 'profile_picture_data_url':
            user_services.update_profile_picture_data_url(self.user_id, data)
        elif update_type == 'email_preferences':
            user_services.update_email_preferences(
                self.user_id, data['can_receive_email_updates'],
                data['can_receive_editor_role_email'],
                data['can_receive_feedback_message_email'])
        else:
            raise self.InvalidInputException('Invalid update type: %s' %
                                             update_type)

        self.render_json({})
Exemple #2
0
    def put(self):
        """Handles POST requests."""
        update_type = self.payload.get('update_type')
        data = self.payload.get('data')

        if update_type == 'user_bio':
            user_services.update_user_bio(self.user_id, data)
        elif update_type == 'subject_interests':
            user_services.update_subject_interests(self.user_id, data)
        elif update_type == 'preferred_language_codes':
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == 'preferred_site_language_code':
            user_services.update_preferred_site_language_code(
                self.user_id, data)
        elif update_type == 'profile_picture_data_url':
            user_services.update_profile_picture_data_url(self.user_id, data)
        elif update_type == 'email_preferences':
            user_services.update_email_preferences(
                self.user_id, data['can_receive_email_updates'],
                data['can_receive_editor_role_email'],
                data['can_receive_feedback_message_email'])
        else:
            raise self.InvalidInputException(
                'Invalid update type: %s' % update_type)

        self.render_json({})
Exemple #3
0
    def put(self):
        """Handles POST requests."""
        update_type = self.payload.get('update_type')
        data = self.payload.get('data')

        if update_type == 'user_bio':
            user_services.update_user_bio(self.user_id, data)
        elif update_type == 'preferred_language_codes':
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == 'profile_picture_data_url':
            user_services.update_profile_picture_data_url(self.user_id, data)
        else:
            raise self.InvalidInputException('Invalid update type: %s' %
                                             update_type)
Exemple #4
0
    def put(self):
        """Handles POST requests."""
        update_type = self.payload.get('update_type')
        data = self.payload.get('data')

        if update_type == 'user_bio':
            user_services.update_user_bio(self.user_id, data)
        elif update_type == 'preferred_language_codes':
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == 'profile_picture_data_url':
            user_services.update_profile_picture_data_url(self.user_id, data)
        else:
            raise self.InvalidInputException(
                'Invalid update type: %s' % update_type)
Exemple #5
0
    def put(self):
        """Handles POST requests."""
        update_type = self.payload.get("update_type")
        data = self.payload.get("data")

        if update_type == "user_bio":
            user_services.update_user_bio(self.user_id, data)
        elif update_type == "preferred_language_codes":
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == "profile_picture_data_url":
            user_services.update_profile_picture_data_url(self.user_id, data)
        elif update_type == "can_receive_email_updates":
            user_services.update_email_preferences(self.user_id, data)
        else:
            raise self.InvalidInputException("Invalid update type: %s" % update_type)
Exemple #6
0
 def test_get_profile_picture_with_updated_value(self):
     self.get_json('/preferenceshandler/profile_picture',
                   expected_status_int=401)
     self.signup(self.OWNER_EMAIL, self.OWNER_USERNAME)
     owner_id = self.get_user_id_from_email(self.OWNER_EMAIL)
     self.login(self.OWNER_EMAIL)
     user_settings = user_services.get_user_settings(owner_id)
     response = self.get_json('/preferenceshandler/profile_picture')
     self.assertEqual(response['profile_picture_data_url'],
                      user_settings.profile_picture_data_url)
     user_services.update_profile_picture_data_url(owner_id,
                                                   'new_profile_picture')
     response = self.get_json('/preferenceshandler/profile_picture')
     self.assertEqual(response['profile_picture_data_url'],
                      'new_profile_picture')
     self.logout()
Exemple #7
0
    def put(self):
        """Handles PUT requests."""
        update_type = self.payload.get('update_type')
        data = self.payload.get('data')
        bulk_email_signup_message_should_be_shown = False
        if update_type == 'user_bio':
            if len(data) > feconf.MAX_BIO_LENGTH_IN_CHARS:
                raise self.InvalidInputException(
                    'User bio exceeds maximum character limit: %s'
                    % feconf.MAX_BIO_LENGTH_IN_CHARS)

            user_services.update_user_bio(self.user_id, data)
        elif update_type == 'subject_interests':
            user_services.update_subject_interests(self.user_id, data)
        elif update_type == 'preferred_language_codes':
            user_services.update_preferred_language_codes(self.user_id, data)
        elif update_type == 'preferred_site_language_code':
            user_services.update_preferred_site_language_code(
                self.user_id, data)
        elif update_type == 'preferred_audio_language_code':
            user_services.update_preferred_audio_language_code(
                self.user_id, data)
        elif update_type == 'preferred_translation_language_code':
            user_services.update_preferred_translation_language_code(
                self.user_id, data)
        elif update_type == 'profile_picture_data_url':
            user_services.update_profile_picture_data_url(self.user_id, data)
        elif update_type == 'default_dashboard':
            user_services.update_user_default_dashboard(self.user_id, data)
        elif update_type == 'email_preferences':
            bulk_email_signup_message_should_be_shown = (
                user_services.update_email_preferences(
                    self.user_id, data['can_receive_email_updates'],
                    data['can_receive_editor_role_email'],
                    data['can_receive_feedback_message_email'],
                    data['can_receive_subscription_email']))
        else:
            raise self.InvalidInputException(
                'Invalid update type: %s' % update_type)

        self.render_json({
            'bulk_email_signup_message_should_be_shown': (
                bulk_email_signup_message_should_be_shown)
        })
    def test_new_profile_picture_is_generated_if_it_does_not_exist(self):
        user_services.update_profile_picture_data_url(self.owner_id, None)

        # Before the job runs, the data URL is None.
        user_settings = user_services.get_user_settings(self.owner_id)
        self.assertIsNone(user_settings.profile_picture_data_url)

        job_id = (user_jobs_one_off.UserProfilePictureOneOffJob.create_new())
        user_jobs_one_off.UserProfilePictureOneOffJob.enqueue(job_id)

        def _mock_fetch_gravatar(unused_email):
            return self.FETCHED_GRAVATAR

        with self.swap(user_services, 'fetch_gravatar', _mock_fetch_gravatar):
            self.process_and_flush_pending_tasks()

        # After the job runs, the data URL has been updated.
        new_user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(new_user_settings.profile_picture_data_url,
                         self.FETCHED_GRAVATAR)
    def test_new_profile_picture_is_generated_if_it_does_not_exist(self):
        user_services.update_profile_picture_data_url(self.owner_id, None)

        # Before the job runs, the data URL is None.
        user_settings = user_services.get_user_settings(self.owner_id)
        self.assertIsNone(user_settings.profile_picture_data_url)

        job_id = (
            user_jobs_one_off.UserProfilePictureOneOffJob.create_new())
        user_jobs_one_off.UserProfilePictureOneOffJob.enqueue(job_id)

        def _mock_fetch_gravatar(unused_email):
            return self.FETCHED_GRAVATAR

        with self.swap(user_services, 'fetch_gravatar', _mock_fetch_gravatar):
            self.process_and_flush_pending_tasks()

        # After the job runs, the data URL has been updated.
        new_user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(
            new_user_settings.profile_picture_data_url, self.FETCHED_GRAVATAR)
    def test_profile_picture_is_not_regenerated_if_it_already_exists(self):
        user_services.update_profile_picture_data_url(
            self.owner_id, 'manually_added_data_url')

        # Before the job runs, the data URL is the manually-added one.
        user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(user_settings.profile_picture_data_url,
                         'manually_added_data_url')

        job_id = (user_jobs_one_off.UserProfilePictureOneOffJob.create_new())
        user_jobs_one_off.UserProfilePictureOneOffJob.enqueue(job_id)

        def _mock_fetch_gravatar(unused_email):
            return self.FETCHED_GRAVATAR

        with self.swap(user_services, 'fetch_gravatar', _mock_fetch_gravatar):
            self.process_and_flush_pending_tasks()

        # After the job runs, the data URL is still the manually-added one.
        new_user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(new_user_settings.profile_picture_data_url,
                         'manually_added_data_url')
    def test_profile_picture_is_not_regenerated_if_it_already_exists(self):
        user_services.update_profile_picture_data_url(
            self.owner_id, 'manually_added_data_url')

        # Before the job runs, the data URL is the manually-added one.
        user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(
            user_settings.profile_picture_data_url, 'manually_added_data_url')

        job_id = (
            user_jobs_one_off.UserProfilePictureOneOffJob.create_new())
        user_jobs_one_off.UserProfilePictureOneOffJob.enqueue(job_id)

        def _mock_fetch_gravatar(unused_email):
            return self.FETCHED_GRAVATAR

        with self.swap(user_services, 'fetch_gravatar', _mock_fetch_gravatar):
            self.process_and_flush_pending_tasks()

        # After the job runs, the data URL is still the manually-added one.
        new_user_settings = user_services.get_user_settings(self.owner_id)
        self.assertEqual(
            new_user_settings.profile_picture_data_url,
            'manually_added_data_url')
    def setUp(self):
        """Populate the database of explorations and their summaries.

        The sequence of events is:
        - (1) Albert creates EXP_ID_1.
        - (2) Bob edits the title of EXP_ID_1.
        - (3) Albert creates EXP_ID_2.
        - (4) Albert edits the title of EXP_ID_1.
        - (5) Albert edits the title of EXP_ID_2.
        - (6) Bob reverts Albert's last edit to EXP_ID_1.
        - Bob tries to publish EXP_ID_2, and is denied access.
        - (7) Albert publishes EXP_ID_2.
        - (8) Albert creates EXP_ID_3
        - (9) Albert publishes EXP_ID_3
        - (10) Albert deletes EXP_ID_3

        - (1) User_3 (has a profile_picture) creates EXP_ID_4.
        - (2) User_4 edits the title of EXP_ID_4.
        - (3) User_4 edits the title of EXP_ID_4.
        """

        super(ExplorationDisplayableSummariesTest, self).setUp()

        self.signup(self.ALBERT_EMAIL, self.ALBERT_NAME)
        self.signup(self.BOB_EMAIL, self.BOB_NAME)

        self.albert_id = self.get_user_id_from_email(self.ALBERT_EMAIL)
        self.bob_id = self.get_user_id_from_email(self.BOB_EMAIL)

        self.albert = user_services.get_user_actions_info(self.albert_id)
        self.bob = user_services.get_user_actions_info(self.bob_id)

        self.save_new_valid_exploration(self.EXP_ID_1, self.albert_id)

        exp_services.update_exploration(
            self.bob_id, self.EXP_ID_1, [exp_domain.ExplorationChange({
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 1 title'
            })], 'Changed title.')

        self.save_new_valid_exploration(self.EXP_ID_2, self.albert_id)

        exp_services.update_exploration(
            self.albert_id, self.EXP_ID_1, [exp_domain.ExplorationChange({
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 1 Albert title'
            })], 'Changed title to Albert1 title.')

        exp_services.update_exploration(
            self.albert_id, self.EXP_ID_2, [exp_domain.ExplorationChange({
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 2 Albert title'
            })], 'Changed title to Albert2 title.')

        exp_services.revert_exploration(self.bob_id, self.EXP_ID_1, 3, 2)

        with self.assertRaisesRegex(
            Exception, 'This exploration cannot be published'
            ):
            rights_manager.publish_exploration(self.bob, self.EXP_ID_2)

        rights_manager.publish_exploration(self.albert, self.EXP_ID_2)

        self.save_new_valid_exploration(self.EXP_ID_3, self.albert_id)
        rights_manager.publish_exploration(self.albert, self.EXP_ID_3)
        exp_services.delete_exploration(self.albert_id, self.EXP_ID_3)
        self.signup(self.USER_C_EMAIL, self.USER_C_NAME)
        self.signup(self.USER_D_EMAIL, self.USER_D_NAME)
        self.user_c_id = self.get_user_id_from_email(self.USER_C_EMAIL)
        self.user_d_id = self.get_user_id_from_email(self.USER_D_EMAIL)
        user_services.update_profile_picture_data_url(
            self.user_c_id, self.USER_C_PROFILE_PICTURE)

        self.save_new_valid_exploration(self.EXP_ID_4, self.user_c_id)
        exp_services.update_exploration(
            self.user_d_id, self.EXP_ID_4, [exp_domain.ExplorationChange({
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration updated title'
            })], 'Changed title once.')

        exp_services.update_exploration(
            self.user_d_id, self.EXP_ID_4, [exp_domain.ExplorationChange({
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration updated title again'
            })], 'Changed title twice.')

        self.save_new_valid_exploration(self.EXP_ID_5, self.bob_id)
    def setUp(self):
        """Populate the database of explorations and their summaries.

        The sequence of events is:
        - (1) Albert creates EXP_ID_1.
        - (2) Bob edits the title of EXP_ID_1.
        - (3) Albert creates EXP_ID_2.
        - (4) Albert edits the title of EXP_ID_1.
        - (5) Albert edits the title of EXP_ID_2.
        - (6) Bob reverts Albert's last edit to EXP_ID_1.
        - Bob tries to publish EXP_ID_2, and is denied access.
        - (7) Albert publishes EXP_ID_2.
        - (8) Albert creates EXP_ID_3
        - (9) Albert publishes EXP_ID_3
        - (10) Albert deletes EXP_ID_3

        - (1) User_3 (has a profile_picture) creates EXP_ID_4.
        - (2) User_4 edits the title of EXP_ID_4.
        - (3) User_4 edits the title of EXP_ID_4.
        """

        super(ExplorationDisplayableSummariesTest, self).setUp()

        self.albert_id = self.get_user_id_from_email(self.ALBERT_EMAIL)
        self.bob_id = self.get_user_id_from_email(self.BOB_EMAIL)
        self.signup(self.ALBERT_EMAIL, self.ALBERT_NAME)
        self.signup(self.BOB_EMAIL, self.BOB_NAME)

        self.save_new_valid_exploration(self.EXP_ID_1, self.albert_id)

        exp_services.update_exploration(
            self.bob_id, self.EXP_ID_1, [{
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 1 title'
            }], 'Changed title.')

        self.save_new_valid_exploration(self.EXP_ID_2, self.albert_id)

        exp_services.update_exploration(
            self.albert_id, self.EXP_ID_1, [{
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 1 Albert title'
            }], 'Changed title to Albert1 title.')

        exp_services.update_exploration(
            self.albert_id, self.EXP_ID_2, [{
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration 2 Albert title'
            }], 'Changed title to Albert2 title.')

        exp_services.revert_exploration(self.bob_id, self.EXP_ID_1, 3, 2)

        with self.assertRaisesRegexp(
            Exception, 'This exploration cannot be published'
            ):
            rights_manager.publish_exploration(self.bob_id, self.EXP_ID_2)

        rights_manager.publish_exploration(self.albert_id, self.EXP_ID_2)

        self.save_new_valid_exploration(self.EXP_ID_3, self.albert_id)
        rights_manager.publish_exploration(self.albert_id, self.EXP_ID_3)
        exp_services.delete_exploration(self.albert_id, self.EXP_ID_3)

        self.user_c_id = self.get_user_id_from_email(self.USER_C_EMAIL)
        self.user_d_id = self.get_user_id_from_email(self.USER_D_EMAIL)
        self.signup(self.USER_C_EMAIL, self.USER_C_NAME)
        self.signup(self.USER_D_EMAIL, self.USER_D_NAME)
        user_services.update_profile_picture_data_url(
            self.user_c_id, self.USER_C_PROFILE_PICTURE)

        self.save_new_valid_exploration(self.EXP_ID_4, self.user_c_id)
        exp_services.update_exploration(
            self.user_d_id, self.EXP_ID_4, [{
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration updated title'
            }], 'Changed title once.')

        exp_services.update_exploration(
            self.user_d_id, self.EXP_ID_4, [{
                'cmd': 'edit_exploration_property',
                'property_name': 'title',
                'new_value': 'Exploration updated title again'
            }], 'Changed title twice.')

        self.save_new_valid_exploration(self.EXP_ID_5, self.bob_id)