| 123456789101112131415161718192021222324252627282930313233343536 |
- from unittest import mock
-
- from django.core import mail
- from django.core.exceptions import ValidationError
- from django.test import TestCase
-
- from oscar.apps.customer.forms import EmailUserCreationForm, PasswordResetForm
- from oscar.test.factories import UserFactory
-
-
- class TestEmailUserCreationForm(TestCase):
-
- @mock.patch('oscar.apps.customer.forms.validate_password')
- def test_validator_passed_populated_user(self, mocked_validate):
- mocked_validate.side_effect = ValidationError('That password is rubbish')
-
- form = EmailUserCreationForm(data={'email': 'terry@boom.com', 'password1': 'terry', 'password2': 'terry'})
- self.assertFalse(form.is_valid())
-
- mocked_validate.assert_called_once_with('terry', form.instance)
- self.assertEqual(mocked_validate.call_args[0][1].email, 'terry@boom.com')
- self.assertEqual(form.errors['password2'], ['That password is rubbish'])
-
-
- class TestPasswordResetForm(TestCase):
-
- def test_user_email_unicode_collision(self):
- # Regression test for CVE-2019-19844, which Oscar's PasswordResetForm
- # was vulnerable to because it had overridden the save() method.
- UserFactory(username='mike123', email='mike@example.org')
- UserFactory(username='mike456', email='mıke@example.org')
- form = PasswordResetForm({'email': 'mıke@example.org'})
- self.assertTrue(form.is_valid())
- form.save()
- self.assertEqual(len(mail.outbox), 1)
- self.assertEqual(mail.outbox[0].to, ['mıke@example.org'])
|