+++ /dev/null
-# Patchwork - automated patch tracking system
-# Copyright (C) 2010 Jeremy Kerr <jk@ozlabs.org>
-#
-# This file is part of the Patchwork package.
-#
-# Patchwork is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# Patchwork is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Patchwork; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-import unittest
-from django.test import TestCase
-from django.test.client import Client
-from django.core import mail
-from django.core.urlresolvers import reverse
-from django.contrib.auth.models import User
-from patchwork.models import EmailConfirmation, Person
-from patchwork.tests.utils import create_user
-
-def _confirmation_url(conf):
- return reverse('patchwork.views.confirm', kwargs = {'key': conf.key})
-
-class TestUser(object):
- firstname = 'Test'
- lastname = 'User'
- username = 'testuser'
- email = 'test@example.com'
- password = 'foobar'
-
-class RegistrationTest(TestCase):
- def setUp(self):
- self.user = TestUser()
- self.client = Client()
- self.default_data = {'username': self.user.username,
- 'first_name': self.user.firstname,
- 'last_name': self.user.lastname,
- 'email': self.user.email,
- 'password': self.user.password}
- self.required_error = 'This field is required.'
- self.invalid_error = 'Enter a valid value.'
-
- def testRegistrationForm(self):
- response = self.client.get('/register/')
- self.assertEquals(response.status_code, 200)
- self.assertTemplateUsed(response, 'patchwork/registration_form.html')
-
- def testBlankFields(self):
- for field in ['username', 'email', 'password']:
- data = self.default_data.copy()
- del data[field]
- response = self.client.post('/register/', data)
- self.assertEquals(response.status_code, 200)
- self.assertFormError(response, 'form', field, self.required_error)
-
- def testInvalidUsername(self):
- data = self.default_data.copy()
- data['username'] = 'invalid user'
- response = self.client.post('/register/', data)
- self.assertEquals(response.status_code, 200)
- self.assertFormError(response, 'form', 'username', self.invalid_error)
-
- def testExistingUsername(self):
- user = create_user()
- data = self.default_data.copy()
- data['username'] = user.username
- response = self.client.post('/register/', data)
- self.assertEquals(response.status_code, 200)
- self.assertFormError(response, 'form', 'username',
- 'This username is already taken. Please choose another.')
-
- def testExistingEmail(self):
- user = create_user()
- data = self.default_data.copy()
- data['email'] = user.email
- response = self.client.post('/register/', data)
- self.assertEquals(response.status_code, 200)
- self.assertFormError(response, 'form', 'email',
- 'This email address is already in use ' + \
- 'for the account "%s".\n' % user.username)
-
- def testValidRegistration(self):
- response = self.client.post('/register/', self.default_data)
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, 'confirmation email has been sent')
-
- # check for presence of an inactive user object
- users = User.objects.filter(username = self.user.username)
- self.assertEquals(users.count(), 1)
- user = users[0]
- self.assertEquals(user.username, self.user.username)
- self.assertEquals(user.email, self.user.email)
- self.assertEquals(user.is_active, False)
-
- # check for confirmation object
- confs = EmailConfirmation.objects.filter(user = user,
- type = 'registration')
- self.assertEquals(len(confs), 1)
- conf = confs[0]
- self.assertEquals(conf.email, self.user.email)
-
- # check for a sent mail
- self.assertEquals(len(mail.outbox), 1)
- msg = mail.outbox[0]
- self.assertEquals(msg.subject, 'Patchwork account confirmation')
- self.assertTrue(self.user.email in msg.to)
- self.assertTrue(_confirmation_url(conf) in msg.body)
-
- # ...and that the URL is valid
- response = self.client.get(_confirmation_url(conf))
- self.assertEquals(response.status_code, 200)
-
-class RegistrationConfirmationTest(TestCase):
-
- def setUp(self):
- self.user = TestUser()
- self.default_data = {'username': self.user.username,
- 'first_name': self.user.firstname,
- 'last_name': self.user.lastname,
- 'email': self.user.email,
- 'password': self.user.password}
-
- def testRegistrationConfirmation(self):
- self.assertEqual(EmailConfirmation.objects.count(), 0)
- response = self.client.post('/register/', self.default_data)
- self.assertEquals(response.status_code, 200)
- self.assertContains(response, 'confirmation email has been sent')
-
- self.assertEqual(EmailConfirmation.objects.count(), 1)
- conf = EmailConfirmation.objects.filter()[0]
- self.assertFalse(conf.user.is_active)
- self.assertTrue(conf.active)
-
- response = self.client.get(_confirmation_url(conf))
- self.assertEquals(response.status_code, 200)
- self.assertTemplateUsed(response, 'patchwork/registration-confirm.html')
-
- conf = EmailConfirmation.objects.get(pk = conf.pk)
- self.assertTrue(conf.user.is_active)
- self.assertFalse(conf.active)
-
- def testRegistrationNewPersonSetup(self):
- """ Check that the person object created after registration has the
- correct details """
-
- # register
- self.assertEqual(EmailConfirmation.objects.count(), 0)
- response = self.client.post('/register/', self.default_data)
- self.assertEquals(response.status_code, 200)
- self.assertFalse(Person.objects.exists())
-
- # confirm
- conf = EmailConfirmation.objects.filter()[0]
- response = self.client.get(_confirmation_url(conf))
- self.assertEquals(response.status_code, 200)
-
- qs = Person.objects.filter(email = self.user.email)
- self.assertTrue(qs.exists())
- person = Person.objects.get(email = self.user.email)
-
- self.assertEquals(person.name,
- self.user.firstname + ' ' + self.user.lastname)
-
- def testRegistrationExistingPersonSetup(self):
- """ Check that the person object created after registration has the
- correct details """
-
- fullname = self.user.firstname + ' ' + self.user.lastname
- person = Person(name = fullname, email = self.user.email)
- person.save()
-
- # register
- self.assertEqual(EmailConfirmation.objects.count(), 0)
- response = self.client.post('/register/', self.default_data)
- self.assertEquals(response.status_code, 200)
-
- # confirm
- conf = EmailConfirmation.objects.filter()[0]
- response = self.client.get(_confirmation_url(conf))
- self.assertEquals(response.status_code, 200)
-
- person = Person.objects.get(email = self.user.email)
-
- self.assertEquals(person.name, fullname)
-
- def testRegistrationExistingPersonUnmodified(self):
- """ Check that an unconfirmed registration can't modify an existing
- Person object"""
-
- fullname = self.user.firstname + ' ' + self.user.lastname
- person = Person(name = fullname, email = self.user.email)
- person.save()
-
- # register
- data = self.default_data.copy()
- data['first_name'] = 'invalid'
- data['last_name'] = 'invalid'
- self.assertEquals(data['email'], person.email)
- response = self.client.post('/register/', data)
- self.assertEquals(response.status_code, 200)
-
- self.assertEquals(Person.objects.get(pk = person.pk).name, fullname)