diff --git a/common/test/acceptance/tests/lms/test_learner_profile.py b/common/test/acceptance/tests/lms/test_learner_profile.py index 0e95f14a9f..069c7d9af1 100644 --- a/common/test/acceptance/tests/lms/test_learner_profile.py +++ b/common/test/acceptance/tests/lms/test_learner_profile.py @@ -6,7 +6,6 @@ End-to-end tests for Student's Profile Page. from contextlib import contextmanager from datetime import datetime -from unittest import skip import six @@ -183,473 +182,6 @@ class LearnerProfileTestMixin(EventsTestMixin): return username, user_id -class OwnLearnerProfilePageTest(LearnerProfileTestMixin, AcceptanceTest): - """ - Tests that verify a student's own profile page. - """ - shard = 4 - - def verify_profile_forced_private_message(self, username, birth_year, message=None): - """ - Verify age limit messages for a user. - """ - if birth_year is None: - birth_year = "" - self.set_birth_year(birth_year=birth_year) - profile_page = self.visit_profile_page(username) - self.assertTrue(profile_page.privacy_field_visible) - if message: - self.assertTrue(profile_page.age_limit_message_present) - else: - self.assertFalse(profile_page.age_limit_message_present) - self.assertIn(message, profile_page.profile_forced_private_message) - - @skip("failing on Jenkins") - def test_profile_defaults_to_public(self): - """ - Scenario: Verify that a new user's profile defaults to public. - - Given that I am a new user. - When I go to my profile page. - Then I see that the profile visibility is set to public. - """ - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username) - self.verify_profile_page_is_public(profile_page) - - def assert_default_image_has_public_access(self, profile_page): - """ - Assert that profile image has public access. - """ - self.assertTrue(profile_page.profile_has_default_image) - self.assertTrue(profile_page.profile_has_image_with_public_access()) - - @skip("failing on Jenkins") - def test_make_profile_public(self): - """ - Scenario: Verify that the user can change their privacy. - - Given that I am a registered user - And I visit my private profile page - And I set the profile visibility to public - Then a user preference changed event should be recorded - When I reload the page - Then the profile visibility should be shown as public - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PRIVATE) - with self.verify_pref_change_event_during( - username, user_id, 'account_privacy', old=self.PRIVACY_PRIVATE, new=self.PRIVACY_PUBLIC - ): - profile_page.privacy = self.PRIVACY_PUBLIC - - # Reload the page and verify that the profile is now public - self.browser.refresh() - profile_page.wait_for_page() - self.verify_profile_page_is_public(profile_page) - - def test_make_profile_private(self): - """ - Scenario: Verify that the user can change their privacy. - - Given that I am a registered user - And I visit my public profile page - And I set the profile visibility to private - Then a user preference changed event should be recorded - When I reload the page - Then the profile visibility should be shown as private - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - with self.verify_pref_change_event_during( - username, user_id, 'account_privacy', old=None, new=self.PRIVACY_PRIVATE - ): - profile_page.privacy = self.PRIVACY_PRIVATE - - # Reload the page and verify that the profile is now private - self.browser.refresh() - profile_page.wait_for_page() - self.verify_profile_page_is_private(profile_page) - - def test_fields_on_my_private_profile(self): - """ - Scenario: Verify that desired fields are shown when looking at her own private profile. - - Given that I am a registered user. - And I visit my Profile page. - And I set the profile visibility to private. - And I reload the page. - Then I should see the profile visibility selector dropdown. - Then I see some of the profile fields are shown. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PRIVATE) - self.verify_profile_page_is_private(profile_page) - self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PRIVATE) - - @skip("failing on Jenkins") - def test_fields_on_my_public_profile(self): - """ - Scenario: Verify that desired fields are shown when looking at her own public profile. - - Given that I am a registered user. - And I visit my Profile page. - And I set the profile visibility to public. - And I reload the page. - Then I should see the profile visibility selector dropdown. - Then I see all the profile fields are shown. - And `location`, `language` and `about me` fields are editable. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - self.verify_profile_page_is_public(profile_page) - self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PUBLIC) - - def _test_dropdown_field(self, profile_page, field_id, new_value, displayed_value, mode): - """ - Test behaviour of a dropdown field. - """ - profile_page.value_for_dropdown_field(field_id, new_value, focus_out=True) - self.assertEqual(profile_page.get_non_editable_mode_value(field_id), displayed_value) - self.assertTrue(profile_page.mode_for_field(field_id), mode) - - self.browser.refresh() - profile_page.wait_for_page() - - self.assertEqual(profile_page.get_non_editable_mode_value(field_id), displayed_value) - self.assertTrue(profile_page.mode_for_field(field_id), mode) - - def _test_textarea_field(self, profile_page, field_id, new_value, displayed_value, mode): - """ - Test behaviour of a textarea field. - """ - profile_page.set_value_for_textarea_field(field_id, new_value) - self.assertEqual(profile_page.get_non_editable_mode_value(field_id), displayed_value) - self.assertTrue(profile_page.mode_for_field(field_id), mode) - - self.browser.refresh() - profile_page.wait_for_page() - - self.assertEqual(profile_page.get_non_editable_mode_value(field_id), displayed_value) - self.assertTrue(profile_page.mode_for_field(field_id), mode) - - def test_user_is_under_age(self): - """ - Verify message if user is under age. - - Given that I am a registered user. - And birth year is set so that age is less than 13. - And I visit my profile page. - Then I should see a message that the profile is private as I am under thirteen. - """ - username, user_id = self.log_in_as_unique_user() - under_age_birth_year = datetime.now().year - 10 - self.verify_profile_forced_private_message( - username, - birth_year=under_age_birth_year, - message='You must be over 13 to share a full profile.' - ) - self.verify_profile_page_view_event(username, user_id, visibility=self.PRIVACY_PRIVATE) - - def test_user_can_only_see_default_image_for_private_profile(self): - """ - Scenario: Default profile image behaves correctly for under age user. - - Given that I am on my profile page with private access - And I can see default image - When I move my cursor to the image - Then i cannot see the upload/remove image text - And i cannot upload/remove the image. - """ - year_of_birth = datetime.now().year - 5 - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PRIVATE) - - self.verify_profile_forced_private_message( - username, - year_of_birth, - message='You must be over 13 to share a full profile.' - ) - self.assertTrue(profile_page.profile_has_default_image) - self.assertFalse(profile_page.profile_has_image_with_private_access()) - - def test_user_can_see_default_image_for_public_profile(self): - """ - Scenario: Default profile image behaves correctly for public profile. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - And i am able to upload new image - """ - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - def test_user_can_upload_the_profile_image_with_success(self): - """ - Scenario: Upload profile image works correctly. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - When i upload new image via file uploader - Then i can see the changed image - And i can also see the latest image after reload. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - with self.verify_pref_change_event_during( - username, user_id, 'profile_image_uploaded_at', table='auth_userprofile' - ): - profile_page.upload_file(filename='image.jpg') - self.assertTrue(profile_page.image_upload_success) - profile_page.visit() - self.assertTrue(profile_page.image_upload_success) - - def test_user_can_see_error_for_exceeding_max_file_size_limit(self): - """ - Scenario: Upload profile image does not work for > 1MB image file. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - When i upload new > 1MB image via file uploader - Then i can see the error message for file size limit - And i can still see the default image after page reload. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - profile_page.upload_file(filename='larger_image.jpg') - self.assertEqual(profile_page.profile_image_message, "The file must be smaller than 1 MB in size.") - profile_page.visit() - self.assertTrue(profile_page.profile_has_default_image) - - self.assert_no_matching_events_were_emitted({ - 'event_type': self.USER_SETTINGS_CHANGED_EVENT_NAME, - 'event': { - 'setting': 'profile_image_uploaded_at', - 'user_id': int(user_id), - } - }) - - def test_user_can_see_error_for_file_size_below_the_min_limit(self): - """ - Scenario: Upload profile image does not work for < 100 Bytes image file. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - When i upload new < 100 Bytes image via file uploader - Then i can see the error message for minimum file size limit - And i can still see the default image after page reload. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - profile_page.upload_file(filename='list-icon-visited.png') - self.assertEqual(profile_page.profile_image_message, "The file must be at least 100 bytes in size.") - profile_page.visit() - self.assertTrue(profile_page.profile_has_default_image) - - self.assert_no_matching_events_were_emitted({ - 'event_type': self.USER_SETTINGS_CHANGED_EVENT_NAME, - 'event': { - 'setting': 'profile_image_uploaded_at', - 'user_id': int(user_id), - } - }) - - def test_user_can_see_error_for_wrong_file_type(self): - """ - Scenario: Upload profile image does not work for wrong file types. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - When i upload new csv file via file uploader - Then i can see the error message for wrong/unsupported file type - And i can still see the default image after page reload. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - profile_page.upload_file(filename='generic_csv.csv') - self.assertIn( - "The file must be one of the following types:", profile_page.profile_image_message, - ) - self.assertIn( - ".png", profile_page.profile_image_message, - ) - self.assertIn( - ".gif", profile_page.profile_image_message, - ) - self.assertIn( - ".jpeg", profile_page.profile_image_message, - ) - self.assertIn( - ".jpg", profile_page.profile_image_message, - ) - - profile_page.visit() - self.assertTrue(profile_page.profile_has_default_image) - - self.assert_no_matching_events_were_emitted({ - 'event_type': self.USER_SETTINGS_CHANGED_EVENT_NAME, - 'event': { - 'setting': 'profile_image_uploaded_at', - 'user_id': int(user_id), - } - }) - - def test_user_can_remove_profile_image(self): - """ - Scenario: Remove profile image works correctly. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see the upload/remove image text - When i click on the remove image link - Then i can see the default image - And i can still see the default image after page reload. - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - - with self.verify_pref_change_event_during( - username, user_id, 'profile_image_uploaded_at', table='auth_userprofile' - ): - profile_page.upload_file(filename='image.jpg') - self.assertTrue(profile_page.image_upload_success) - - with self.verify_pref_change_event_during( - username, user_id, 'profile_image_uploaded_at', table='auth_userprofile' - ): - self.assertTrue(profile_page.remove_profile_image()) - - self.assertTrue(profile_page.profile_has_default_image) - profile_page.visit() - self.assertTrue(profile_page.profile_has_default_image) - - def test_user_cannot_remove_default_image(self): - """ - Scenario: Remove profile image does not works for default images. - - Given that I am on my profile page with public access - And I can see default image - When I move my cursor to the image - Then i can see only the upload image text - And i cannot see the remove image text - """ - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - - self.assert_default_image_has_public_access(profile_page) - self.assertFalse(profile_page.remove_link_present) - - def test_eventing_after_multiple_uploads(self): - """ - Scenario: An event is fired when a user with a profile image uploads another image - - Given that I am on my profile page with public access - And I upload a new image via file uploader - When I upload another image via the file uploader - Then two upload events have been emitted - """ - username, user_id = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(username, privacy=self.PRIVACY_PUBLIC) - self.assert_default_image_has_public_access(profile_page) - - with self.verify_pref_change_event_during( - username, user_id, 'profile_image_uploaded_at', table='auth_userprofile' - ): - profile_page.upload_file(filename='image.jpg') - self.assertTrue(profile_page.image_upload_success) - - with self.verify_pref_change_event_during( - username, user_id, 'profile_image_uploaded_at', table='auth_userprofile' - ): - profile_page.upload_file(filename='image.jpg', wait_for_upload_button=False) - - -class DifferentUserLearnerProfilePageTest(LearnerProfileTestMixin, AcceptanceTest): - """ - Tests that verify viewing the profile page of a different user. - """ - shard = 4 - - def test_different_user_private_profile(self): - """ - Scenario: Verify that desired fields are shown when looking at a different user's private profile. - - Given that I am a registered user. - And I visit a different user's private profile page. - Then I shouldn't see the profile visibility selector dropdown. - Then I see some of the profile fields are shown. - """ - different_username, different_user_id = self.initialize_different_user(privacy=self.PRIVACY_PRIVATE) - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(different_username) - self.verify_profile_page_is_private(profile_page, is_editable=False) - self.verify_profile_page_view_event(username, different_user_id, visibility=self.PRIVACY_PRIVATE) - - def test_different_user_under_age(self): - """ - Scenario: Verify that an under age user's profile is private to others. - - Given that I am a registered user. - And I visit an under age user's profile page. - Then I shouldn't see the profile visibility selector dropdown. - Then I see that only the private fields are shown. - """ - under_age_birth_year = datetime.now().year - 10 - different_username, different_user_id = self.initialize_different_user( - privacy=self.PRIVACY_PUBLIC, - birth_year=under_age_birth_year - ) - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(different_username) - self.verify_profile_page_is_private(profile_page, is_editable=False) - self.verify_profile_page_view_event(username, different_user_id, visibility=self.PRIVACY_PRIVATE) - - def test_different_user_public_profile(self): - """ - Scenario: Verify that desired fields are shown when looking at a different user's public profile. - - Given that I am a registered user. - And I visit a different user's public profile page. - Then I shouldn't see the profile visibility selector dropdown. - Then all the profile fields are shown. - Then I shouldn't see the profile visibility selector dropdown. - Also `location`, `language` and `about me` fields are not editable. - """ - different_username, different_user_id = self.initialize_different_user(privacy=self.PRIVACY_PUBLIC) - username, __ = self.log_in_as_unique_user() - profile_page = self.visit_profile_page(different_username) - profile_page.wait_for_public_fields() - self.verify_profile_page_is_public(profile_page, is_editable=False) - self.verify_profile_page_view_event(username, different_user_id, visibility=self.PRIVACY_PUBLIC) - - class LearnerProfileA11yTest(LearnerProfileTestMixin, AcceptanceTest): """ Class to test learner profile accessibility.