[PATCH 19/25] tests: Clean up 'test_user'
Stephen Finucane
stephen.finucane at intel.com
Fri Jun 24 07:53:40 AEST 2016
* Don't use hardcode routes: use the reverse function instead
* Make use of 'create_' helper functions
* Minimize duplication of code
* Remove unneeded 'XXX.objects.delete()' calls (all objects are deleted
on teardown of each test)
* Include every import on its own line
* Use underscore_case, rather than camelCase
This includes one trivial, albeit necessary, removal of an import from
'test_user_browser'.
Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
---
patchwork/tests/test_user.py | 260 ++++++++++++++--------------------
patchwork/tests/test_user_browser.py | 4 +-
patchwork/tests/utils.py | 11 +-
3 files changed, 118 insertions(+), 157 deletions(-)
diff --git a/patchwork/tests/test_user.py b/patchwork/tests/test_user.py
index 953decb..a93d479 100644
--- a/patchwork/tests/test_user.py
+++ b/patchwork/tests/test_user.py
@@ -22,8 +22,12 @@ from django.core import mail
from django.core.urlresolvers import reverse
from django.test import TestCase
-from patchwork.models import EmailConfirmation, Person, Bundle, UserProfile
-from patchwork.tests.utils import defaults, error_strings
+from patchwork.models import EmailConfirmation
+from patchwork.models import Person
+from patchwork.models import UserProfile
+from patchwork.tests.utils import create_bundle
+from patchwork.tests.utils import create_user
+from patchwork.tests.utils import error_strings
from patchwork.tests import utils
@@ -31,63 +35,65 @@ def _confirmation_url(conf):
return reverse('confirm', kwargs={'key': conf.key})
-class TestUser(object):
+def _generate_secondary_email(user):
+ return 'secondary_%d at example.com' % user.id
- def __init__(self, username='testuser', email='test at example.com',
- secondary_email='test2 at example.com'):
- self.username = username
- self.email = email
- self.secondary_email = secondary_email
+
+class _UserTestCase(TestCase):
+
+ def setUp(self):
+ self.user = create_user()
self.password = User.objects.make_random_password()
- self.user = User.objects.create_user(
- self.username, self.email, self.password)
+ self.user.set_password(self.password)
+ self.user.save()
+
+ self.client.login(username=self.user.username,
+ password=self.password)
-class UserPersonRequestTest(TestCase):
+class UserPersonRequestTest(_UserTestCase):
def setUp(self):
- self.user = TestUser()
- self.client.login(username=self.user.username,
- password=self.user.password)
- EmailConfirmation.objects.all().delete()
+ super(UserPersonRequestTest, self).setUp()
+ self.secondary_email = _generate_secondary_email(self.user)
- def testUserPersonRequestForm(self):
- response = self.client.get('/user/link/')
+ def test_user_person_request_form(self):
+ response = self.client.get(reverse('user-link'))
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context['linkform'])
- def testUserPersonRequestEmpty(self):
- response = self.client.post('/user/link/', {'email': ''})
+ def test_user_person_request_empty(self):
+ response = self.client.post(reverse('user-link'), {'email': ''})
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context['linkform'])
self.assertFormError(response, 'linkform', 'email',
'This field is required.')
- def testUserPersonRequestInvalid(self):
- response = self.client.post('/user/link/', {'email': 'foo'})
+ def test_user_person_request_invalid(self):
+ response = self.client.post(reverse('user-link'), {'email': 'foo'})
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context['linkform'])
self.assertFormError(response, 'linkform', 'email',
error_strings['email'])
- def testUserPersonRequestValid(self):
- response = self.client.post('/user/link/',
- {'email': self.user.secondary_email})
+ def test_user_person_request_valid(self):
+ response = self.client.post(reverse('user-link'),
+ {'email': self.secondary_email})
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context['confirmation'])
# check that we have a confirmation saved
self.assertEqual(EmailConfirmation.objects.count(), 1)
conf = EmailConfirmation.objects.all()[0]
- self.assertEqual(conf.user, self.user.user)
- self.assertEqual(conf.email, self.user.secondary_email)
+ self.assertEqual(conf.user, self.user)
+ self.assertEqual(conf.email, self.secondary_email)
self.assertEqual(conf.type, 'userperson')
# check that an email has gone out...
self.assertEqual(len(mail.outbox), 1)
msg = mail.outbox[0]
self.assertEqual(msg.subject, 'Patchwork email address confirmation')
- self.assertIn(self.user.secondary_email, msg.to)
+ self.assertIn(self.secondary_email, msg.to)
self.assertIn(_confirmation_url(conf), msg.body)
# ...and that the URL is valid
@@ -99,26 +105,30 @@ class UserPersonRequestTest(TestCase):
class UserPersonConfirmTest(TestCase):
def setUp(self):
- EmailConfirmation.objects.all().delete()
- Person.objects.all().delete()
- self.user = TestUser()
+ self.user = create_user(link_person=False)
+ self.password = User.objects.make_random_password()
+ self.user.set_password(self.password)
+ self.user.save()
+
self.client.login(username=self.user.username,
- password=self.user.password)
+ password=self.password)
+
+ self.secondary_email = _generate_secondary_email(self.user)
self.conf = EmailConfirmation(type='userperson',
- email=self.user.secondary_email,
- user=self.user.user)
+ email=self.secondary_email,
+ user=self.user)
self.conf.save()
- def testUserPersonConfirm(self):
+ def test_user_person_confirm(self):
self.assertEqual(Person.objects.count(), 0)
response = self.client.get(_confirmation_url(self.conf))
self.assertEqual(response.status_code, 200)
# check that the Person object has been created and linked
self.assertEqual(Person.objects.count(), 1)
- person = Person.objects.get(email=self.user.secondary_email)
- self.assertEqual(person.email, self.user.secondary_email)
- self.assertEqual(person.user, self.user.user)
+ person = Person.objects.get(email=self.secondary_email)
+ self.assertEqual(person.email, self.secondary_email)
+ self.assertEqual(person.user, self.user)
# check that the confirmation has been marked as inactive. We
# need to reload the confirmation to check this.
@@ -128,95 +138,70 @@ class UserPersonConfirmTest(TestCase):
class UserLoginRedirectTest(TestCase):
- def testUserLoginRedirect(self):
- url = '/user/'
+ def test_user_login_redirect(self):
+ url = reverse('user-profile')
response = self.client.get(url)
self.assertRedirects(response, reverse('auth_login') + '?next=' + url)
-class UserProfileTest(TestCase):
+class UserProfileTest(_UserTestCase):
fixtures = ['default_states']
- def setUp(self):
- self.user = TestUser()
- self.client.login(username=self.user.username,
- password=self.user.password)
-
- def testUserProfile(self):
- response = self.client.get('/user/')
+ def test_user_profile(self):
+ response = self.client.get(reverse('user-profile'))
self.assertContains(response, 'Your Profile')
-
- def testUserProfileNoBundles(self):
- response = self.client.get('/user/')
self.assertContains(response, 'You have no bundles')
- def testUserProfileBundles(self):
- project = defaults.project
- project.save()
+ def test_user_profile_bundles(self):
+ bundle = create_bundle(owner=self.user)
- bundle = Bundle(project=project, name='test-1',
- owner=self.user.user)
- bundle.save()
-
- response = self.client.get('/user/')
+ response = self.client.get(reverse('user-profile'))
+ self.assertContains(response, 'Your Profile')
self.assertContains(response, 'You have the following bundle')
self.assertContains(response, bundle.get_absolute_url())
- def testUserProfileTodos(self):
+ def test_user_profile_todos(self):
patches = utils.create_patches(5)
for patch in patches:
- patch.delegate = self.user.user
+ patch.delegate = self.user
patch.save()
- response = self.client.get('/user/')
+ response = self.client.get(reverse('user-profile'))
self.assertContains(response, 'contains 5')
self.assertContains(response, reverse('user-todos'))
- def testUserProfileValidPost(self):
- user_profile = UserProfile.objects.get(user=self.user.user.id)
+ def test_user_profile_valid_post(self):
+ user_profile = UserProfile.objects.get(user=self.user.id)
old_ppp = user_profile.items_per_page
new_ppp = old_ppp + 1
- self.client.post('/user/', {'items_per_page': new_ppp})
+ self.client.post(reverse('user-profile'), {'items_per_page': new_ppp})
- user_profile = UserProfile.objects.get(user=self.user.user.id)
+ user_profile = UserProfile.objects.get(user=self.user.id)
self.assertEqual(user_profile.items_per_page, new_ppp)
- def testUserProfileInvalidPost(self):
- user_profile = UserProfile.objects.get(user=self.user.user.id)
+ def test_user_profile_invalid_post(self):
+ user_profile = UserProfile.objects.get(user=self.user.id)
old_ppp = user_profile.items_per_page
new_ppp = -1
- self.client.post('/user/', {'items_per_page': new_ppp})
+ self.client.post(reverse('user-profile'), {'items_per_page': new_ppp})
- user_profile = UserProfile.objects.get(user=self.user.user.id)
+ user_profile = UserProfile.objects.get(user=self.user.id)
self.assertEqual(user_profile.items_per_page, old_ppp)
-class UserPasswordChangeTest(TestCase):
- user = None
-
- def setUp(self):
- self.form_url = reverse('password_change')
- self.done_url = reverse('password_change_done')
-
- def testPasswordChangeForm(self):
- self.user = TestUser()
- self.client.login(username=self.user.username,
- password=self.user.password)
+class UserPasswordChangeTest(_UserTestCase):
- response = self.client.get(self.form_url)
+ def test_password_change_form(self):
+ response = self.client.get(reverse('password_change'))
self.assertContains(response, 'Change my password')
- def testPasswordChange(self):
- self.user = TestUser()
- self.client.login(username=self.user.username,
- password=self.user.password)
-
- old_password = self.user.password
+ def test_password_change(self):
+ old_password = self.password
new_password = User.objects.make_random_password()
data = {
@@ -225,94 +210,65 @@ class UserPasswordChangeTest(TestCase):
'new_password2': new_password,
}
- response = self.client.post(self.form_url, data)
- self.assertRedirects(response, self.done_url)
+ response = self.client.post(reverse('password_change'), data)
+ self.assertRedirects(response, reverse('password_change_done'))
- user = User.objects.get(id=self.user.user.id)
+ user = User.objects.get(id=self.user.id)
self.assertFalse(user.check_password(old_password))
self.assertTrue(user.check_password(new_password))
- response = self.client.get(self.done_url)
+ response = self.client.get(reverse('password_change_done'))
self.assertContains(response,
"Your password has been changed successfully")
-class UserUnlinkTest(TestCase):
+class UserUnlinkTest(_UserTestCase):
- def setUp(self):
- self.form_url = '/user/unlink/{pid}/'
- self.done_url = '/user/'
- EmailConfirmation.objects.all().delete()
- Person.objects.all().delete()
-
- def testUnlinkPrimaryEmail(self):
- user = TestUser()
- self.client.login(username=user.username,
- password=user.password)
+ def _create_confirmation(self, email):
conf = EmailConfirmation(type='userperson',
- email=user.email,
- user=user.user)
+ email=email,
+ user=self.user)
conf.save()
self.client.get(_confirmation_url(conf))
- person = Person.objects.get(email=user.email)
- response = self.client.post(self.form_url.format(pid=str(person.id)))
- self.assertRedirects(response, self.done_url)
+ def _test_unlink_post(self, email, expect_none=False):
+ self._create_confirmation(email)
- person = Person.objects.get(email=user.email)
- self.assertEqual(person.user, user.user)
+ person = Person.objects.get(email=email)
+ response = self.client.post(reverse('user-unlink', args=[person.id]))
+ self.assertRedirects(response, reverse('user-profile'))
- def testUnlinkSecondaryEmail(self):
- user = TestUser()
- self.client.login(username=user.username,
- password=user.password)
- conf = EmailConfirmation(type='userperson',
- email=user.secondary_email,
- user=user.user)
- conf.save()
- self.client.get(_confirmation_url(conf))
+ def test_unlink_primary_email(self):
+ self._test_unlink_post(self.user.email)
- person = Person.objects.get(email=user.secondary_email)
- response = self.client.post(self.form_url.format(pid=str(person.id)))
- self.assertRedirects(response, self.done_url)
+ person = Person.objects.get(email=self.user.email)
+ self.assertEqual(person.user, self.user)
- person = Person.objects.get(email=user.secondary_email)
- self.assertEqual(person.user, None)
+ def test_unlink_secondary_email(self):
+ secondary_email = _generate_secondary_email(self.user)
- def testUnlinkAnotherUser(self):
- user = TestUser()
- self.client.login(username=user.username,
- password=user.password)
+ self._test_unlink_post(secondary_email)
- other_user = TestUser('testuser_other', 'test_other at example.com',
- 'test_other2 at example.com')
- conf = EmailConfirmation(type='userperson',
- email=other_user.email,
- user=other_user.user)
- conf.save()
- self.client.get(_confirmation_url(conf))
+ person = Person.objects.get(email=secondary_email)
+ self.assertIsNone(person.user)
- person = Person.objects.get(email=other_user.email)
- response = self.client.post(self.form_url.format(pid=str(person.id)))
- self.assertRedirects(response, self.done_url)
+ def test_unlink_another_user(self):
+ other_user = create_user()
+
+ self._test_unlink_post(other_user.email)
person = Person.objects.get(email=other_user.email)
- self.assertEqual(person.user, None)
+ self.assertIsNone(person.user)
- def testUnlinkNonPost(self):
- user = TestUser()
- self.client.login(username=user.username,
- password=user.password)
- conf = EmailConfirmation(type='userperson',
- email=user.secondary_email,
- user=user.user)
- conf.save()
- self.client.get(_confirmation_url(conf))
+ def test_unlink_non_post(self):
+ secondary_email = _generate_secondary_email(self.user)
+
+ self._create_confirmation(secondary_email)
- person = Person.objects.get(email=user.secondary_email)
- response = self.client.get(self.form_url.format(pid=str(person.id)))
- self.assertRedirects(response, self.done_url)
+ person = Person.objects.get(email=secondary_email)
+ response = self.client.get(reverse('user-unlink', args=[person.id]))
+ self.assertRedirects(response, reverse('user-profile'))
- person = Person.objects.get(email=user.secondary_email)
- self.assertEqual(person.user, user.user)
+ person = Person.objects.get(email=secondary_email)
+ self.assertEqual(person.user, self.user)
diff --git a/patchwork/tests/test_user_browser.py b/patchwork/tests/test_user_browser.py
index 69f456d..dccb2f4 100644
--- a/patchwork/tests/test_user_browser.py
+++ b/patchwork/tests/test_user_browser.py
@@ -18,14 +18,14 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
from patchwork.tests.browser import SeleniumTestCase
-from patchwork.tests.test_user import TestUser
+from patchwork.tests.utils import create_user
class LoginTestCase(SeleniumTestCase):
def setUp(self):
super(LoginTestCase, self).setUp()
- self.user = TestUser()
+ self.user = create_user()
def test_default_focus(self):
self.get('/user/login/')
diff --git a/patchwork/tests/utils.py b/patchwork/tests/utils.py
index e3ae39d..5f13e7b 100644
--- a/patchwork/tests/utils.py
+++ b/patchwork/tests/utils.py
@@ -108,8 +108,12 @@ def create_person(**kwargs):
return person
-def create_user(**kwargs):
- """Create a 'User' object."""
+def create_user(link_person=True, **kwargs):
+ """Create a 'User' object.
+
+ Args:
+ link_person (bool): If true, create a linked Person object.
+ """
num = User.objects.count()
values = {
@@ -122,7 +126,8 @@ def create_user(**kwargs):
values['name'])
user.save()
- create_person(user=user, **values)
+ if link_person:
+ create_person(user=user, **values)
return user
--
1.7.4.1
More information about the Patchwork
mailing list