Commit daeddf3e by Will Daly

Merge pull request #5387 from edx/will/account-and-profile-more-tests

Added test for email activation and confirmation
parents 77178e9f 84463ef1
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" Tests for student account views. """ """ Tests for student account views. """
import re
from urllib import urlencode from urllib import urlencode
from mock import patch from mock import patch
import ddt import ddt
from django.test import TestCase from django.test import TestCase
from django.conf import settings from django.conf import settings
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core import mail
from util.testing import UrlResetMixin from util.testing import UrlResetMixin
from user_api.api import account as account_api from user_api.api import account as account_api
...@@ -76,7 +78,7 @@ class StudentAccountViewTest(UrlResetMixin, TestCase): ...@@ -76,7 +78,7 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
response = self.client.get(reverse('account_index')) response = self.client.get(reverse('account_index'))
self.assertContains(response, "Student Account") self.assertContains(response, "Student Account")
def test_email_change_request_handler(self): def test_change_email(self):
response = self._change_email(self.NEW_EMAIL, self.PASSWORD) response = self._change_email(self.NEW_EMAIL, self.PASSWORD)
self.assertEquals(response.status_code, 204) self.assertEquals(response.status_code, 204)
...@@ -84,6 +86,38 @@ class StudentAccountViewTest(UrlResetMixin, TestCase): ...@@ -84,6 +86,38 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
profile_info = profile_api.profile_info(self.USERNAME) profile_info = profile_api.profile_info(self.USERNAME)
self.assertEquals(profile_info['email'], self.OLD_EMAIL) self.assertEquals(profile_info['email'], self.OLD_EMAIL)
# Check that an email was sent with the activation key
self.assertEqual(len(mail.outbox), 1)
self._assert_email(
mail.outbox[0],
[self.NEW_EMAIL],
u'Email Change Request',
u'There was recently a request to change the email address'
)
# Retrieve the activation key from the email
email_body = mail.outbox[0].body
result = re.search('/email_change_confirm/([^ \n]+)', email_body)
self.assertIsNot(result, None)
activation_key = result.group(1)
# Attempt to activate the email
response = self.client.get(reverse('email_change_confirm', kwargs={'key': activation_key}))
self.assertEqual(response.status_code, 200)
# Verify that the email was changed
profile_info = profile_api.profile_info(self.USERNAME)
self.assertEquals(profile_info['email'], self.NEW_EMAIL)
# Verify that notification emails were sent
self.assertEqual(len(mail.outbox), 2)
self._assert_email(
mail.outbox[1],
[self.OLD_EMAIL, self.NEW_EMAIL],
u'Email Change Successful',
u'You successfully changed the email address'
)
def test_email_change_wrong_password(self): def test_email_change_wrong_password(self):
response = self._change_email(self.NEW_EMAIL, "wrong password") response = self._change_email(self.NEW_EMAIL, "wrong password")
self.assertEqual(response.status_code, 401) self.assertEqual(response.status_code, 401)
...@@ -202,3 +236,9 @@ class StudentAccountViewTest(UrlResetMixin, TestCase): ...@@ -202,3 +236,9 @@ class StudentAccountViewTest(UrlResetMixin, TestCase):
for method in wrong_methods: for method in wrong_methods:
response = getattr(self.client, method)(url) response = getattr(self.client, method)(url)
self.assertEqual(response.status_code, 405) self.assertEqual(response.status_code, 405)
def _assert_email(self, email, expected_to, expected_subject, expected_body):
"""Check whether an email has the correct properties. """
self.assertEqual(email.to, expected_to)
self.assertIn(expected_subject, email.subject)
self.assertIn(expected_body, email.body)
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
${_("Hi there,")} ${_("Hi there,")}
## Preamble ## Preamble
${_("You successfully changed the email address associated with your" ${_("You successfully changed the email address associated with your "
"{platform_name} account from {old_email} to {new_email}.").format( "{platform_name} account from {old_email} to {new_email}.").format(
platform_name=settings.PLATFORM_NAME, platform_name=settings.PLATFORM_NAME,
old_email=old_email, old_email=old_email,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment