Unit test for account recovery
Add a unit test to create and activate a recovery email address ENT-2607
This commit is contained in:
@@ -6,26 +6,31 @@ Most of the functionality is covered in test_views.py.
|
||||
|
||||
|
||||
import itertools
|
||||
import re
|
||||
import unicodedata
|
||||
|
||||
import ddt
|
||||
import pytest
|
||||
from dateutil.parser import parse as parse_datetime
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.hashers import make_password
|
||||
from django.contrib.auth.models import User
|
||||
from django.core import mail
|
||||
from django.http import HttpResponse
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
from django.urls import reverse
|
||||
from mock import Mock, patch
|
||||
from six import iteritems
|
||||
from social_django.models import UserSocialAuth
|
||||
from student.models import (
|
||||
AccountRecovery,
|
||||
PendingEmailChange,
|
||||
PendingSecondaryEmailChange,
|
||||
UserProfile
|
||||
)
|
||||
from student.tests.factories import UserFactory
|
||||
from student.tests.tests import UserSettingsEventTestMixin
|
||||
from student.views.management import activate_secondary_email
|
||||
|
||||
from openedx.core.djangoapps.ace_common.tests.mixins import EmailTemplateTagMixin
|
||||
from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory
|
||||
from openedx.core.djangoapps.user_api.accounts import PRIVATE_VISIBILITY, USERNAME_MAX_LENGTH
|
||||
from openedx.core.djangoapps.user_api.accounts import PRIVATE_VISIBILITY
|
||||
from openedx.core.djangoapps.user_api.accounts.api import (
|
||||
get_account_settings,
|
||||
update_account_settings
|
||||
@@ -35,30 +40,14 @@ from openedx.core.djangoapps.user_api.accounts.tests.retirement_helpers import (
|
||||
fake_requested_retirement,
|
||||
setup_retirement_states
|
||||
)
|
||||
from openedx.core.djangoapps.user_api.accounts.tests.testutils import (
|
||||
INVALID_EMAILS,
|
||||
INVALID_PASSWORDS,
|
||||
INVALID_USERNAMES,
|
||||
VALID_USERNAMES_UNICODE
|
||||
)
|
||||
from openedx.core.djangoapps.user_api.config.waffle import PREVENT_AUTH_USER_WRITES, SYSTEM_MAINTENANCE_MSG, waffle
|
||||
from openedx.core.djangoapps.user_api.errors import (
|
||||
AccountEmailInvalid,
|
||||
AccountPasswordInvalid,
|
||||
AccountRequestError,
|
||||
AccountUpdateError,
|
||||
AccountUserAlreadyExists,
|
||||
AccountUsernameInvalid,
|
||||
AccountValidationError,
|
||||
UserAPIInternalError,
|
||||
UserNotAuthorized,
|
||||
UserNotFound
|
||||
)
|
||||
from openedx.core.djangolib.testing.utils import skip_unless_lms
|
||||
from openedx.features.enterprise_support.tests.factories import EnterpriseCustomerUserFactory
|
||||
from student.models import PendingEmailChange, Registration
|
||||
from student.tests.factories import UserFactory
|
||||
from student.tests.tests import UserSettingsEventTestMixin
|
||||
|
||||
|
||||
def mock_render_to_string(template_name, context):
|
||||
@@ -66,6 +55,15 @@ def mock_render_to_string(template_name, context):
|
||||
return str((template_name, sorted(iteritems(context))))
|
||||
|
||||
|
||||
def mock_render_to_response(template_name):
|
||||
"""
|
||||
Return an HttpResponse with content that encodes template_name and context
|
||||
"""
|
||||
# This simulates any db access in the templates.
|
||||
UserProfile.objects.exists()
|
||||
return HttpResponse(template_name)
|
||||
|
||||
|
||||
class CreateAccountMixin(object):
|
||||
def create_account(self, username, password, email):
|
||||
# pylint: disable=missing-docstring
|
||||
@@ -82,6 +80,7 @@ class CreateAccountMixin(object):
|
||||
|
||||
@skip_unless_lms
|
||||
@ddt.ddt
|
||||
@patch('student.views.management.render_to_response', Mock(side_effect=mock_render_to_response, autospec=True))
|
||||
class TestAccountApi(UserSettingsEventTestMixin, EmailTemplateTagMixin, CreateAccountMixin, RetirementTestCase):
|
||||
"""
|
||||
These tests specifically cover the parts of the API methods that are not covered by test_views.py.
|
||||
@@ -457,6 +456,31 @@ class TestAccountApi(UserSettingsEventTestMixin, EmailTemplateTagMixin, CreateAc
|
||||
verify_event_emitted([{"code": "en"}, {"code": "fr"}], [{"code": "en"}, {"code": "fr"}])
|
||||
verify_event_emitted([], [{"code": "en"}, {"code": "fr"}])
|
||||
|
||||
def test_add_account_recovery(self):
|
||||
test_email = "test@example.com"
|
||||
pending_secondary_email_changes = PendingSecondaryEmailChange.objects.filter(user=self.user)
|
||||
self.assertEqual(0, len(pending_secondary_email_changes))
|
||||
|
||||
account_recovery_objects = AccountRecovery.objects.filter(user=self.user)
|
||||
self.assertEqual(0, len(account_recovery_objects))
|
||||
|
||||
with patch('crum.get_current_request', return_value=self.fake_request):
|
||||
update = {"secondary_email": test_email}
|
||||
update_account_settings(self.user, update)
|
||||
|
||||
pending_secondary_email_change = PendingSecondaryEmailChange.objects.get(user=self.user)
|
||||
self.assertIsNot(pending_secondary_email_change, None)
|
||||
self.assertEqual(pending_secondary_email_change.new_secondary_email, test_email)
|
||||
|
||||
activate_secondary_email(self.fake_request, pending_secondary_email_change.activation_key)
|
||||
|
||||
pending_secondary_email_changes = PendingSecondaryEmailChange.objects.filter(user=self.user)
|
||||
self.assertEqual(0, len(pending_secondary_email_changes))
|
||||
|
||||
account_recovery = AccountRecovery.objects.get(user=self.user)
|
||||
self.assertIsNot(account_recovery, None)
|
||||
self.assertEqual(account_recovery.secondary_email, test_email)
|
||||
|
||||
|
||||
@patch('openedx.core.djangoapps.user_api.accounts.image_helpers._PROFILE_IMAGE_SIZES', [50, 10])
|
||||
@patch.dict(
|
||||
|
||||
Reference in New Issue
Block a user