diff --git a/lms/envs/common.py b/lms/envs/common.py index 3eced93993..e947c0870a 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -3288,6 +3288,7 @@ ACCOUNT_VISIBILITY_CONFIGURATION["admin_fields"] = ( "mailing_address", "requires_parental_consent", "secondary_email", + "secondary_email_enabled", "year_of_birth", "phone_number", ] diff --git a/openedx/core/djangoapps/user_api/accounts/serializers.py b/openedx/core/djangoapps/user_api/accounts/serializers.py index 87eb1436cd..f22091416f 100644 --- a/openedx/core/djangoapps/user_api/accounts/serializers.py +++ b/openedx/core/djangoapps/user_api/accounts/serializers.py @@ -172,13 +172,13 @@ class UserReadOnlySerializer(serializers.Serializer): } ) - if account_recovery: - if is_secondary_email_feature_enabled_for_user(user): - data.update( - { - "secondary_email": account_recovery.secondary_email, - } - ) + if is_secondary_email_feature_enabled_for_user(user): + data.update( + { + "secondary_email": account_recovery.secondary_email if account_recovery else None, + "secondary_email_enabled": True, + } + ) if self.custom_fields: fields = self.custom_fields diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_api.py b/openedx/core/djangoapps/user_api/accounts/tests/test_api.py index 2fdc51205c..cc9b1de3f5 100644 --- a/openedx/core/djangoapps/user_api/accounts/tests/test_api.py +++ b/openedx/core/djangoapps/user_api/accounts/tests/test_api.py @@ -534,6 +534,7 @@ class AccountSettingsOnCreationTest(CreateAccountMixin, TestCase): 'accomplishments_shared': False, 'extended_profile': [], 'secondary_email': None, + 'secondary_email_enabled': None, 'time_zone': None, 'course_certificates': None, 'phone_number': None, diff --git a/openedx/core/djangoapps/user_api/accounts/tests/test_views.py b/openedx/core/djangoapps/user_api/accounts/tests/test_views.py index f6eaa96f13..e6ff25201d 100644 --- a/openedx/core/djangoapps/user_api/accounts/tests/test_views.py +++ b/openedx/core/djangoapps/user_api/accounts/tests/test_views.py @@ -266,7 +266,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): Verify that all account fields are returned (even those that are not shareable). """ data = response.data - self.assertEqual(23, len(data)) + self.assertEqual(24, len(data)) # public fields (3) expected_account_privacy = ( @@ -297,6 +297,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): self.assertEqual("Park Ave", data['mailing_address']) self.assertEqual(requires_parental_consent, data["requires_parental_consent"]) self.assertIsNone(data["secondary_email"]) + self.assertIsNone(data["secondary_email_enabled"]) self.assertEqual(year_of_birth, data["year_of_birth"]) def test_anonymous_access(self): @@ -355,7 +356,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): """ self.different_client.login(username=self.different_user.username, password=TEST_PASSWORD) self.create_mock_profile(self.user) - with self.assertNumQueries(22): + with self.assertNumQueries(23): response = self.send_get(self.different_client) self._verify_full_shareable_account_response(response, account_privacy=ALL_USERS_VISIBILITY) @@ -370,7 +371,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): """ self.different_client.login(username=self.different_user.username, password=TEST_PASSWORD) self.create_mock_profile(self.user) - with self.assertNumQueries(22): + with self.assertNumQueries(23): response = self.send_get(self.different_client) self._verify_private_account_response(response) @@ -494,7 +495,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): with self.assertNumQueries(queries): response = self.send_get(self.client) data = response.data - self.assertEqual(23, len(data)) + self.assertEqual(24, len(data)) self.assertEqual(self.user.username, data["username"]) self.assertEqual(self.user.first_name + " " + self.user.last_name, data["name"]) for empty_field in ("year_of_birth", "level_of_education", "mailing_address", "bio"): @@ -514,7 +515,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): self.assertEqual(False, data["accomplishments_shared"]) self.client.login(username=self.user.username, password=TEST_PASSWORD) - verify_get_own_information(20) + verify_get_own_information(21) # Now make sure that the user can get the same information, even if not active self.user.is_active = False @@ -533,7 +534,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): legacy_profile.save() self.client.login(username=self.user.username, password=TEST_PASSWORD) - with self.assertNumQueries(20): + with self.assertNumQueries(21): response = self.send_get(self.client) for empty_field in ("level_of_education", "gender", "country", "bio"): self.assertIsNone(response.data[empty_field]) @@ -905,7 +906,7 @@ class TestAccountsAPI(CacheIsolationTestCase, UserAPITestCase): response = self.send_get(client) if has_full_access: data = response.data - self.assertEqual(23, len(data)) + self.assertEqual(24, len(data)) self.assertEqual(self.user.username, data["username"]) self.assertEqual(self.user.first_name + " " + self.user.last_name, data["name"]) self.assertEqual(self.user.email, data["email"])