Просмотр исходного кода

Added some tests and support for verbosity flag on createsuperuser

Rafał Pitoń 11 лет назад
Родитель
Сommit
3d757ba592

+ 7 - 5
misago/users/management/commands/createsuperuser.py

@@ -49,6 +49,7 @@ class Command(BaseCommand):
         email = options.get('email')
         password = options.get('password')
         interactive = options.get('interactive')
+        verbosity = int(options.get('verbosity', 1))
 
         # Validate initial inputs
         if username is not None:
@@ -78,7 +79,7 @@ class Command(BaseCommand):
         if not interactive:
             if username and email and password:
                 # Call User manager's create_superuser using our wrapper
-                self.create_superuser(username, email, password)
+                self.create_superuser(username, email, password, verbosity)
         else:
             try:
                 if hasattr(self.stdin, 'isatty') and not self.stdin.isatty():
@@ -117,7 +118,7 @@ class Command(BaseCommand):
                         self.stderr.write(e.messages[0])
 
                 # Call User manager's create_superuser using our wrapper
-                self.create_superuser(username, email, password)
+                self.create_superuser(username, email, password, verbosity)
 
             except KeyboardInterrupt:
                 self.stderr.write("\nOperation cancelled.")
@@ -129,13 +130,14 @@ class Command(BaseCommand):
                     "to create one manually."
                 )
 
-    def create_superuser(self, username, email, password):
+    def create_superuser(self, username, email, password, verbosity):
         try:
             User = get_user_model()
             user = User.objects.create_superuser(username, email, password)
 
-            message = "Superuser #%(pk)s has been created successfully."
-            self.stdout.write(message % {'pk': user.pk})
+            if verbosity >= 1:
+                message = "Superuser #%(pk)s has been created successfully."
+                self.stdout.write(message % {'pk': user.pk})
         except ValidationError as e:
             self.stderr.write(e.messages[0])
         except IntegrityError as e:

+ 4 - 7
misago/users/models/usermodel.py

@@ -15,12 +15,9 @@ class UserManager(BaseUserManager):
         if not email:
             raise ValueError(_("User must have an email address."))
 
-        try:
-            validate_username(username)
-            validate_email(email)
-            validate_password(password)
-        except ValidationError as e:
-            raise ValueError(unicode(e))
+        validate_username(username)
+        validate_email(email)
+        validate_password(password)
 
         now = timezone.now()
         user = self.model(is_staff=False, is_superuser=False, last_login=now,
@@ -36,7 +33,7 @@ class UserManager(BaseUserManager):
         user = self.create_user(username, email, password=password)
         user.is_staff = True
         user.is_superuser = True
-        user.save(using=self._db)
+        user.save(update_fields=['is_staff', 'is_superuser'], using=self._db)
         return user
 
     def get_by_username(self, username):

+ 22 - 0
misago/users/tests/test_commands.py

@@ -0,0 +1,22 @@
+from django.core.management import call_command
+from django.test import TestCase
+from misago.users.models import User
+
+
+class CreateSuperUserTests(TestCase):
+    def test_createsuperuser(self):
+        """createsuperuser creates user account in perfect conditions"""
+
+        opts = {
+            'username': 'Boberson',
+            'email': 'bob@test.com',
+            'password': 'Pass.123',
+            'verbosity': 0
+        }
+
+        call_command('createsuperuser', **opts)
+
+        user = User.objects.get(username=opts['username'])
+        self.assertEqual(user.username, opts['username'])
+        self.assertEqual(user.email, opts['email'])
+        self.assertTrue(user.check_password(opts['password']))

+ 47 - 0
misago/users/tests/test_user_model.py

@@ -1,7 +1,54 @@
+from django.core.exceptions import ValidationError
 from django.test import TestCase
 from misago.users.models import User
 
 
+class UserManagerTests(TestCase):
+    def test_create_user(self):
+        """create_user created new user account successfully"""
+        user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+
+        db_user = User.objects.get(id=user.pk)
+
+        self.assertEqual(user.username, db_user.username)
+        self.assertEqual(user.username_slug, db_user.username_slug)
+        self.assertEqual(user.email, db_user.email)
+        self.assertEqual(user.email_hash, db_user.email_hash)
+
+    def test_create_user_twice(self):
+        """create_user is raising validation error for duplicate users"""
+        user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+        with self.assertRaises(ValidationError):
+            user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+
+    def test_create_superuser(self):
+        """create_superuser created new user account successfully"""
+        user = User.objects.create_superuser('Bob', 'bob@test.com', 'Pass.123')
+
+        db_user = User.objects.get(id=user.pk)
+
+        self.assertTrue(user.is_staff)
+        self.assertTrue(db_user.is_staff)
+        self.assertTrue(user.is_superuser)
+        self.assertTrue(db_user.is_superuser)
+
+    def test_get_user(self):
+        """get_by_ methods return user correctly"""
+        user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
+
+        db_user = User.objects.get_by_username(user.username)
+        self.assertEqual(user.pk, db_user.pk)
+
+        db_user = User.objects.get_by_email(user.email)
+        self.assertEqual(user.pk, db_user.pk)
+
+        db_user = User.objects.get_by_username_or_email(user.username)
+        self.assertEqual(user.pk, db_user.pk)
+
+        db_user = User.objects.get_by_username_or_email(user.email)
+        self.assertEqual(user.pk, db_user.pk)
+
+
 class UserModelTests(TestCase):
     def test_set_username(self):
         """set_username sets username and slug on model"""