]> git.ozlabs.org Git - patchwork/commitdiff
models: Update Person & UserProfile object whenever User is saved
authorJeremy Kerr <jk@ozlabs.org>
Mon, 19 Sep 2011 02:33:51 +0000 (10:33 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Mon, 19 Sep 2011 02:33:51 +0000 (10:33 +0800)
Currently, UserProfiles are only saved on creation of the User object,
before the first_name and last_name attributes are set. This means that
we fallback to using the User.username value as the new Person.name.

This change modifies User's post-save signal to always update the Person
object, both on creation and updates. This means we get the proper name
appearing on Person instances.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
apps/patchwork/models.py
apps/patchwork/tests/registration.py

index 22062c2189f468eb20e4b8ad2ff1f9e1a16b3632..bb8d8e77c0529a955190abf03d3dd4ac4c21736a 100644 (file)
@@ -136,13 +136,14 @@ class UserProfile(models.Model):
     def __unicode__(self):
         return self.name()
 
-def _user_created_callback(sender, created, instance, **kwargs):
-    if not created:
-        return
-    profile = UserProfile(user = instance)
+def _user_saved_callback(sender, created, instance, **kwargs):
+    try:
+        profile = instance.get_profile()
+    except UserProfile.DoesNotExist:
+        profile = UserProfile(user = instance)
     profile.save()
 
-models.signals.post_save.connect(_user_created_callback, sender = User)
+models.signals.post_save.connect(_user_saved_callback, sender = User)
 
 class State(models.Model):
     name = models.CharField(max_length = 100)
index 18b781f0c66729e99a29578558296e3e48dfcbe8..08ed66acc1620f5b6760b8546bb228f9c3d869cd 100644 (file)
@@ -147,4 +147,44 @@ class RegistrationConfirmationTest(TestCase):
         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)
+
+        # 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,
+                    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)