| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import re
-
- from django.core import mail
- from django.urls import reverse
- from django_webtest import WebTest
-
- from oscar.core.compat import get_user_model
- from oscar.test import factories
- from oscar.test.testcases import WebTestCase
-
- User = get_user_model()
-
-
- class TestAUserWhoseForgottenHerPassword(WebTest):
- def test_can_reset_her_password(self):
- username, email, password = "lucy", "lucy@example.com", "password"
- User.objects.create_user(username, email, password)
-
- # Fill in password reset form
- page = self.app.get(reverse("password-reset"))
- form = page.forms["password_reset_form"]
- form["email"] = email
- response = form.submit()
-
- # Response should be a redirect and an email should have been sent
- self.assertEqual(302, response.status_code)
- self.assertEqual(1, len(mail.outbox))
-
- # Extract URL from email
- email_body = mail.outbox[0].body
- urlfinder = re.compile(r"http://example.com(?P<path>[-A-Za-z0-9\/\._]+)")
- matches = urlfinder.search(email_body, re.MULTILINE)
- self.assertTrue("path" in matches.groupdict())
- path = matches.groupdict()["path"]
-
- # Reset password and check we get redirected
- reset_page_redirect = self.app.get(path)
- # The link in the email will redirect us to the password reset view
- reset_page = self.app.get(reset_page_redirect.location)
- form = reset_page.forms["password_reset_form"]
- form["new_password1"] = "crazymonkey"
- form["new_password2"] = "crazymonkey"
- response = form.submit()
- self.assertEqual(302, response.status_code)
-
- # Now attempt to login with new password
- url = reverse("customer:login")
- form = self.app.get(url).forms["login_form"]
- form["login-username"] = email
- form["login-password"] = "crazymonkey"
- response = form.submit("login_submit")
- self.assertEqual(302, response.status_code)
-
-
- class TestAnAuthenticatedUser(WebTestCase):
- is_anonymous = False
-
- def test_receives_an_email_when_their_password_is_changed(self):
- page = self.get(reverse("customer:change-password"))
- form = page.forms["change_password_form"]
- form["old_password"] = self.password
- form["new_password1"] = "anotherfancypassword"
- form["new_password2"] = "anotherfancypassword"
- page = form.submit()
-
- self.assertEqual(len(mail.outbox), 1)
- self.assertIn("your password has been changed", mail.outbox[0].body)
-
- def test_cannot_access_reset_password_page(self):
- response = self.get(reverse("password-reset"), status=403)
- self.assertEqual(403, response.status_code)
-
- def test_does_not_receive_an_email_when_their_profile_is_updated_but_email_address_not_changed(
- self,
- ):
- page = self.get(reverse("customer:profile-update"))
- form = page.forms["profile_form"]
- form["first_name"] = "Terry"
- form.submit()
- self.assertEqual(len(mail.outbox), 0)
-
- def test_receives_an_email_when_their_email_address_is_changed(self):
- page = self.get(reverse("customer:profile-update"))
- form = page.forms["profile_form"]
-
- new_email = "a.new.email@user.com"
- form["email"] = new_email
- page = form.submit()
-
- self.assertEqual(len(mail.outbox), 1)
- self.assertEqual(mail.outbox[0].to[0], self.email)
- self.assertEqual(User.objects.get(id=self.user.id).email, new_email)
- self.assertIn("your email address has been changed", mail.outbox[0].body)
-
-
- class TestAnAnonymousUser(WebTestCase):
- is_anonymous = True
-
- def assertCanLogin(self, email, password):
- url = reverse("customer:login")
- form = self.app.get(url).forms["login_form"]
- form["login-username"] = email
- form["login-password"] = password
- response = form.submit("login_submit")
- self.assertRedirectsTo(response, "customer:summary")
-
- def test_can_login(self):
- email, password = "d@d.com", "mypassword"
- User.objects.create_user("_", email, password)
- self.assertCanLogin(email, password)
-
- def test_can_login_with_email_containing_capitals_in_local_part(self):
- email, password = "Andrew.Smith@test.com", "mypassword"
- User.objects.create_user("_", email, password)
- self.assertCanLogin(email, password)
-
- def test_can_login_with_email_containing_capitals_in_host(self):
- email, password = "Andrew.Smith@teSt.com", "mypassword"
- User.objects.create_user("_", email, password)
- self.assertCanLogin(email, password)
-
- def test_can_register(self):
- url = reverse("customer:register")
- form = self.app.get(url).forms["register_form"]
- form["email"] = "terry@boom.com"
- form["password1"] = form["password2"] = "hedgehog"
- response = form.submit()
- self.assertRedirectsTo(response, "customer:summary")
-
- def test_casing_of_local_part_of_email_is_preserved(self):
- url = reverse("customer:register")
- form = self.app.get(url).forms["register_form"]
- form["email"] = "Terry@Boom.com"
- form["password1"] = form["password2"] = "hedgehog"
- form.submit()
- user = User.objects.all()[0]
- self.assertEqual(user.email, "Terry@boom.com")
-
-
- class TestAStaffUser(WebTestCase):
- is_anonymous = True
- password = "testing"
-
- def setUp(self):
- self.staff = factories.UserFactory.create(password=self.password, is_staff=True)
- super().setUp()
-
- def test_gets_redirected_to_the_dashboard_when_they_login(self):
- page = self.get(reverse("customer:login"))
- form = page.forms["login_form"]
- form["login-username"] = self.staff.email
- form["login-password"] = self.password
- response = form.submit("login_submit")
-
- self.assertRedirectsTo(response, "dashboard:index")
|