diff options
| author | django-bot <ops@djangoproject.com> | 2022-02-03 20:24:19 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-07 20:37:05 +0100 |
| commit | 9c19aff7c7561e3a82978a272ecdaad40dda5c00 (patch) | |
| tree | f0506b668a013d0063e5fba3dbf4863b466713ba /tests/auth_tests/test_management.py | |
| parent | f68fa8b45dfac545cfc4111d4e52804c86db68d3 (diff) | |
Refs #33476 -- Reformatted code with Black.
Diffstat (limited to 'tests/auth_tests/test_management.py')
| -rw-r--r-- | tests/auth_tests/test_management.py | 882 |
1 files changed, 499 insertions, 383 deletions
diff --git a/tests/auth_tests/test_management.py b/tests/auth_tests/test_management.py index 16da9eb4ad..41596a2210 100644 --- a/tests/auth_tests/test_management.py +++ b/tests/auth_tests/test_management.py @@ -8,12 +8,8 @@ from unittest import mock from django.apps import apps from django.contrib.auth import get_permission_codename, management -from django.contrib.auth.management import ( - create_permissions, get_default_username, -) -from django.contrib.auth.management.commands import ( - changepassword, createsuperuser, -) +from django.contrib.auth.management import create_permissions, get_default_username +from django.contrib.auth.management.commands import changepassword, createsuperuser from django.contrib.auth.models import Group, Permission, User from django.contrib.contenttypes.models import ContentType from django.core.management import call_command @@ -23,17 +19,25 @@ from django.test import TestCase, override_settings from django.utils.translation import gettext_lazy as _ from .models import ( - CustomUser, CustomUserNonUniqueUsername, CustomUserWithFK, - CustomUserWithM2M, Email, Organization, UserProxy, + CustomUser, + CustomUserNonUniqueUsername, + CustomUserWithFK, + CustomUserWithM2M, + Email, + Organization, + UserProxy, ) MOCK_INPUT_KEY_TO_PROMPTS = { # @mock_inputs dict key: [expected prompt messages], - 'bypass': ['Bypass password validation and create user anyway? [y/N]: '], - 'email': ['Email address: '], - 'date_of_birth': ['Date of birth: '], - 'first_name': ['First name: '], - 'username': ['Username: ', lambda: "Username (leave blank to use '%s'): " % get_default_username()], + "bypass": ["Bypass password validation and create user anyway? [y/N]: "], + "email": ["Email address: "], + "date_of_birth": ["Date of birth: "], + "first_name": ["First name: "], + "username": [ + "Username: ", + lambda: "Username (leave blank to use '%s'): " % get_default_username(), + ], } @@ -42,26 +46,29 @@ def mock_inputs(inputs): Decorator to temporarily replace input/getpass to allow interactive createsuperuser. """ + def inner(test_func): def wrapped(*args): class mock_getpass: @staticmethod - def getpass(prompt=b'Password: ', stream=None): - if callable(inputs['password']): - return inputs['password']() - return inputs['password'] + def getpass(prompt=b"Password: ", stream=None): + if callable(inputs["password"]): + return inputs["password"]() + return inputs["password"] def mock_input(prompt): - assert '__proxy__' not in prompt + assert "__proxy__" not in prompt response = None for key, val in inputs.items(): - if val == 'KeyboardInterrupt': + if val == "KeyboardInterrupt": raise KeyboardInterrupt # get() fallback because sometimes 'key' is the actual # prompt rather than a shortcut name. prompt_msgs = MOCK_INPUT_KEY_TO_PROMPTS.get(key, key) if isinstance(prompt_msgs, list): - prompt_msgs = [msg() if callable(msg) else msg for msg in prompt_msgs] + prompt_msgs = [ + msg() if callable(msg) else msg for msg in prompt_msgs + ] if prompt in prompt_msgs: if callable(val): response = val() @@ -69,7 +76,7 @@ def mock_inputs(inputs): response = val break if response is None: - raise ValueError('Mock input for %r not found.' % prompt) + raise ValueError("Mock input for %r not found." % prompt) return response old_getpass = createsuperuser.getpass @@ -81,7 +88,9 @@ def mock_inputs(inputs): finally: createsuperuser.getpass = old_getpass builtins.input = old_input + return wrapped + return inner @@ -90,19 +99,22 @@ class MockTTY: A fake stdin object that pretends to be a TTY to be used in conjunction with mock_inputs. """ + def isatty(self): return True class MockInputTests(TestCase): - @mock_inputs({'username': 'alice'}) + @mock_inputs({"username": "alice"}) def test_input_not_found(self): - with self.assertRaisesMessage(ValueError, "Mock input for 'Email address: ' not found."): - call_command('createsuperuser', stdin=MockTTY()) + with self.assertRaisesMessage( + ValueError, "Mock input for 'Email address: ' not found." + ): + call_command("createsuperuser", stdin=MockTTY()) class GetDefaultUsernameTestCase(TestCase): - databases = {'default', 'other'} + databases = {"default", "other"} def setUp(self): self.old_get_system_username = management.get_system_username @@ -114,39 +126,39 @@ class GetDefaultUsernameTestCase(TestCase): self.assertIsInstance(management.get_system_username(), str) def test_simple(self): - management.get_system_username = lambda: 'joe' - self.assertEqual(management.get_default_username(), 'joe') + management.get_system_username = lambda: "joe" + self.assertEqual(management.get_default_username(), "joe") def test_existing(self): - User.objects.create(username='joe') - management.get_system_username = lambda: 'joe' - self.assertEqual(management.get_default_username(), '') - self.assertEqual( - management.get_default_username(check_db=False), 'joe') + User.objects.create(username="joe") + management.get_system_username = lambda: "joe" + self.assertEqual(management.get_default_username(), "") + self.assertEqual(management.get_default_username(check_db=False), "joe") def test_i18n(self): # 'Julia' with accented 'u': - management.get_system_username = lambda: 'J\xfalia' - self.assertEqual(management.get_default_username(), 'julia') + management.get_system_username = lambda: "J\xfalia" + self.assertEqual(management.get_default_username(), "julia") def test_with_database(self): - User.objects.create(username='joe') - management.get_system_username = lambda: 'joe' - self.assertEqual(management.get_default_username(), '') - self.assertEqual(management.get_default_username(database='other'), 'joe') + User.objects.create(username="joe") + management.get_system_username = lambda: "joe" + self.assertEqual(management.get_default_username(), "") + self.assertEqual(management.get_default_username(database="other"), "joe") - User.objects.using('other').create(username='joe') - self.assertEqual(management.get_default_username(database='other'), '') + User.objects.using("other").create(username="joe") + self.assertEqual(management.get_default_username(database="other"), "") -@override_settings(AUTH_PASSWORD_VALIDATORS=[ - {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, -]) +@override_settings( + AUTH_PASSWORD_VALIDATORS=[ + {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"}, + ] +) class ChangepasswordManagementCommandTestCase(TestCase): - @classmethod def setUpTestData(cls): - cls.user = User.objects.create_user(username='joe', password='qwerty') + cls.user = User.objects.create_user(username="joe", password="qwerty") def setUp(self): self.stdout = StringIO() @@ -156,43 +168,47 @@ class ChangepasswordManagementCommandTestCase(TestCase): self.stdout.close() self.stderr.close() - @mock.patch.object(getpass, 'getpass', return_value='password') + @mock.patch.object(getpass, "getpass", return_value="password") def test_get_pass(self, mock_get_pass): - call_command('changepassword', username='joe', stdout=self.stdout) - self.assertIs(User.objects.get(username='joe').check_password('password'), True) + call_command("changepassword", username="joe", stdout=self.stdout) + self.assertIs(User.objects.get(username="joe").check_password("password"), True) - @mock.patch.object(getpass, 'getpass', return_value='') + @mock.patch.object(getpass, "getpass", return_value="") def test_get_pass_no_input(self, mock_get_pass): - with self.assertRaisesMessage(CommandError, 'aborted'): - call_command('changepassword', username='joe', stdout=self.stdout) + with self.assertRaisesMessage(CommandError, "aborted"): + call_command("changepassword", username="joe", stdout=self.stdout) - @mock.patch.object(changepassword.Command, '_get_pass', return_value='new_password') + @mock.patch.object(changepassword.Command, "_get_pass", return_value="new_password") def test_system_username(self, mock_get_pass): """The system username is used if --username isn't provided.""" username = getpass.getuser() - User.objects.create_user(username=username, password='qwerty') - call_command('changepassword', stdout=self.stdout) - self.assertIs(User.objects.get(username=username).check_password('new_password'), True) + User.objects.create_user(username=username, password="qwerty") + call_command("changepassword", stdout=self.stdout) + self.assertIs( + User.objects.get(username=username).check_password("new_password"), True + ) def test_nonexistent_username(self): with self.assertRaisesMessage(CommandError, "user 'test' does not exist"): - call_command('changepassword', username='test', stdout=self.stdout) + call_command("changepassword", username="test", stdout=self.stdout) - @mock.patch.object(changepassword.Command, '_get_pass', return_value='not qwerty') + @mock.patch.object(changepassword.Command, "_get_pass", return_value="not qwerty") def test_that_changepassword_command_changes_joes_password(self, mock_get_pass): "Executing the changepassword management command should change joe's password" - self.assertTrue(self.user.check_password('qwerty')) + self.assertTrue(self.user.check_password("qwerty")) - call_command('changepassword', username='joe', stdout=self.stdout) + call_command("changepassword", username="joe", stdout=self.stdout) command_output = self.stdout.getvalue().strip() self.assertEqual( command_output, - "Changing password for user 'joe'\nPassword changed successfully for user 'joe'" + "Changing password for user 'joe'\nPassword changed successfully for user 'joe'", ) self.assertTrue(User.objects.get(username="joe").check_password("not qwerty")) - @mock.patch.object(changepassword.Command, '_get_pass', side_effect=lambda *args: str(args)) + @mock.patch.object( + changepassword.Command, "_get_pass", side_effect=lambda *args: str(args) + ) def test_that_max_tries_exits_1(self, mock_get_pass): """ A CommandError should be thrown by handle() if the user enters in @@ -200,9 +216,11 @@ class ChangepasswordManagementCommandTestCase(TestCase): """ msg = "Aborting password change for user 'joe' after 3 attempts" with self.assertRaisesMessage(CommandError, msg): - call_command('changepassword', username='joe', stdout=self.stdout, stderr=self.stderr) + call_command( + "changepassword", username="joe", stdout=self.stdout, stderr=self.stderr + ) - @mock.patch.object(changepassword.Command, '_get_pass', return_value='1234567890') + @mock.patch.object(changepassword.Command, "_get_pass", return_value="1234567890") def test_password_validation(self, mock_get_pass): """ A CommandError should be raised if the user enters in passwords which @@ -210,52 +228,67 @@ class ChangepasswordManagementCommandTestCase(TestCase): """ abort_msg = "Aborting password change for user 'joe' after 3 attempts" with self.assertRaisesMessage(CommandError, abort_msg): - call_command('changepassword', username='joe', stdout=self.stdout, stderr=self.stderr) - self.assertIn('This password is entirely numeric.', self.stderr.getvalue()) + call_command( + "changepassword", username="joe", stdout=self.stdout, stderr=self.stderr + ) + self.assertIn("This password is entirely numeric.", self.stderr.getvalue()) - @mock.patch.object(changepassword.Command, '_get_pass', return_value='not qwerty') - def test_that_changepassword_command_works_with_nonascii_output(self, mock_get_pass): + @mock.patch.object(changepassword.Command, "_get_pass", return_value="not qwerty") + def test_that_changepassword_command_works_with_nonascii_output( + self, mock_get_pass + ): """ #21627 -- Executing the changepassword management command should allow non-ASCII characters from the User object representation. """ # 'Julia' with accented 'u': - User.objects.create_user(username='J\xfalia', password='qwerty') - call_command('changepassword', username='J\xfalia', stdout=self.stdout) + User.objects.create_user(username="J\xfalia", password="qwerty") + call_command("changepassword", username="J\xfalia", stdout=self.stdout) class MultiDBChangepasswordManagementCommandTestCase(TestCase): - databases = {'default', 'other'} + databases = {"default", "other"} - @mock.patch.object(changepassword.Command, '_get_pass', return_value='not qwerty') - def test_that_changepassword_command_with_database_option_uses_given_db(self, mock_get_pass): + @mock.patch.object(changepassword.Command, "_get_pass", return_value="not qwerty") + def test_that_changepassword_command_with_database_option_uses_given_db( + self, mock_get_pass + ): """ changepassword --database should operate on the specified DB. """ - user = User.objects.db_manager('other').create_user(username='joe', password='qwerty') - self.assertTrue(user.check_password('qwerty')) + user = User.objects.db_manager("other").create_user( + username="joe", password="qwerty" + ) + self.assertTrue(user.check_password("qwerty")) out = StringIO() - call_command('changepassword', username='joe', database='other', stdout=out) + call_command("changepassword", username="joe", database="other", stdout=out) command_output = out.getvalue().strip() self.assertEqual( command_output, - "Changing password for user 'joe'\nPassword changed successfully for user 'joe'" + "Changing password for user 'joe'\nPassword changed successfully for user 'joe'", + ) + self.assertTrue( + User.objects.using("other").get(username="joe").check_password("not qwerty") ) - self.assertTrue(User.objects.using('other').get(username="joe").check_password('not qwerty')) @override_settings( - SILENCED_SYSTEM_CHECKS=['fields.W342'], # ForeignKey(unique=True) - AUTH_PASSWORD_VALIDATORS=[{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}], + SILENCED_SYSTEM_CHECKS=["fields.W342"], # ForeignKey(unique=True) + AUTH_PASSWORD_VALIDATORS=[ + {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"} + ], ) class CreatesuperuserManagementCommandTestCase(TestCase): - def test_no_email_argument(self): new_io = StringIO() - with self.assertRaisesMessage(CommandError, 'You must use --email with --noinput.'): - call_command('createsuperuser', interactive=False, username='joe', stdout=new_io) + with self.assertRaisesMessage( + CommandError, "You must use --email with --noinput." + ): + call_command( + "createsuperuser", interactive=False, username="joe", stdout=new_io + ) def test_basic_usage(self): "Check the operation of the createsuperuser management command" @@ -266,26 +299,29 @@ class CreatesuperuserManagementCommandTestCase(TestCase): interactive=False, username="joe", email="joe@somewhere.org", - stdout=new_io + stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") u = User.objects.get(username="joe") - self.assertEqual(u.email, 'joe@somewhere.org') + self.assertEqual(u.email, "joe@somewhere.org") # created password should be unusable self.assertFalse(u.has_usable_password()) def test_non_ascii_verbose_name(self): - @mock_inputs({ - 'password': "nopasswd", - "Uživatel (leave blank to use '%s'): " % get_default_username(): 'foo', # username (cz) - 'email': 'nolocale@somewhere.org', - }) + @mock_inputs( + { + "password": "nopasswd", + "Uživatel (leave blank to use '%s'): " + % get_default_username(): "foo", # username (cz) + "email": "nolocale@somewhere.org", + } + ) def test(self): - username_field = User._meta.get_field('username') + username_field = User._meta.get_field("username") old_verbose_name = username_field.verbose_name - username_field.verbose_name = _('u\u017eivatel') + username_field.verbose_name = _("u\u017eivatel") new_io = StringIO() try: call_command( @@ -298,7 +334,7 @@ class CreatesuperuserManagementCommandTestCase(TestCase): username_field.verbose_name = old_verbose_name command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") test(self) @@ -311,12 +347,12 @@ class CreatesuperuserManagementCommandTestCase(TestCase): username="joe2", email="joe2@somewhere.org", verbosity=0, - stdout=new_io + stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, '') + self.assertEqual(command_output, "") u = User.objects.get(username="joe2") - self.assertEqual(u.email, 'joe2@somewhere.org') + self.assertEqual(u.email, "joe2@somewhere.org") self.assertFalse(u.has_usable_password()) def test_email_in_username(self): @@ -328,10 +364,10 @@ class CreatesuperuserManagementCommandTestCase(TestCase): verbosity=0, ) u = User._default_manager.get(username="joe+admin@somewhere.org") - self.assertEqual(u.email, 'joe@somewhere.org') + self.assertEqual(u.email, "joe@somewhere.org") self.assertFalse(u.has_usable_password()) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUser') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUser") def test_swappable_user(self): "A superuser can be created when a custom user model is in use" # We can use the management command to create a superuser @@ -343,25 +379,27 @@ class CreatesuperuserManagementCommandTestCase(TestCase): interactive=False, email="joe@somewhere.org", date_of_birth="1976-04-01", - first_name='Joe', + first_name="Joe", stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") u = CustomUser._default_manager.get(email="joe@somewhere.org") self.assertEqual(u.date_of_birth, date(1976, 4, 1)) # created password should be unusable self.assertFalse(u.has_usable_password()) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUser') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUser") def test_swappable_user_missing_required_field(self): "A Custom superuser won't be created when a required field isn't provided" # We can use the management command to create a superuser # We skip validation because the temporary substitution of the # swappable User model messes with validation. new_io = StringIO() - with self.assertRaisesMessage(CommandError, 'You must use --email with --noinput.'): + with self.assertRaisesMessage( + CommandError, "You must use --email with --noinput." + ): call_command( "createsuperuser", interactive=False, @@ -372,14 +410,16 @@ class CreatesuperuserManagementCommandTestCase(TestCase): self.assertEqual(CustomUser._default_manager.count(), 0) @override_settings( - AUTH_USER_MODEL='auth_tests.CustomUserNonUniqueUsername', - AUTHENTICATION_BACKENDS=['my.custom.backend'], + AUTH_USER_MODEL="auth_tests.CustomUserNonUniqueUsername", + AUTHENTICATION_BACKENDS=["my.custom.backend"], ) def test_swappable_user_username_non_unique(self): - @mock_inputs({ - 'username': 'joe', - 'password': 'nopasswd', - }) + @mock_inputs( + { + "username": "joe", + "password": "nopasswd", + } + ) def createsuperuser(): new_io = StringIO() call_command( @@ -390,7 +430,7 @@ class CreatesuperuserManagementCommandTestCase(TestCase): stdin=MockTTY(), ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") for i in range(2): createsuperuser() @@ -403,8 +443,10 @@ class CreatesuperuserManagementCommandTestCase(TestCase): If the command is not called from a TTY, it should be skipped and a message should be displayed (#7423). """ + class FakeStdin: """A fake stdin object that has isatty() return False.""" + def isatty(self): return False @@ -432,8 +474,8 @@ class CreatesuperuserManagementCommandTestCase(TestCase): stdin=sentinel, interactive=False, verbosity=0, - username='janet', - email='janet@example.com', + username="janet", + email="janet@example.com", ) self.assertIs(command.stdin, sentinel) @@ -442,18 +484,18 @@ class CreatesuperuserManagementCommandTestCase(TestCase): command, interactive=False, verbosity=0, - username='joe', - email='joe@example.com', + username="joe", + email="joe@example.com", ) self.assertIs(command.stdin, sys.stdin) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_fields_with_fk(self): new_io = StringIO() - group = Group.objects.create(name='mygroup') - email = Email.objects.create(email='mymail@gmail.com') + group = Group.objects.create(name="mygroup") + email = Email.objects.create(email="mymail@gmail.com") call_command( - 'createsuperuser', + "createsuperuser", interactive=False, username=email.pk, email=email.email, @@ -461,60 +503,62 @@ class CreatesuperuserManagementCommandTestCase(TestCase): stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") u = CustomUserWithFK._default_manager.get(email=email) self.assertEqual(u.username, email) self.assertEqual(u.group, group) - non_existent_email = 'mymail2@gmail.com' - msg = 'email instance with email %r does not exist.' % non_existent_email + non_existent_email = "mymail2@gmail.com" + msg = "email instance with email %r does not exist." % non_existent_email with self.assertRaisesMessage(CommandError, msg): call_command( - 'createsuperuser', + "createsuperuser", interactive=False, username=email.pk, email=non_existent_email, stdout=new_io, ) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_fields_with_fk_interactive(self): new_io = StringIO() - group = Group.objects.create(name='mygroup') - email = Email.objects.create(email='mymail@gmail.com') + group = Group.objects.create(name="mygroup") + email = Email.objects.create(email="mymail@gmail.com") - @mock_inputs({ - 'password': 'nopasswd', - 'Username (Email.id): ': email.pk, - 'Email (Email.email): ': email.email, - 'Group (Group.id): ': group.pk, - }) + @mock_inputs( + { + "password": "nopasswd", + "Username (Email.id): ": email.pk, + "Email (Email.email): ": email.email, + "Group (Group.id): ": group.pk, + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdout=new_io, stdin=MockTTY(), ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") u = CustomUserWithFK._default_manager.get(email=email) self.assertEqual(u.username, email) self.assertEqual(u.group, group) test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_fields_with_fk_via_option_interactive(self): new_io = StringIO() - group = Group.objects.create(name='mygroup') - email = Email.objects.create(email='mymail@gmail.com') + group = Group.objects.create(name="mygroup") + email = Email.objects.create(email="mymail@gmail.com") - @mock_inputs({'password': 'nopasswd'}) + @mock_inputs({"password": "nopasswd"}) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, username=email.pk, email=email.email, @@ -524,23 +568,23 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') + self.assertEqual(command_output, "Superuser created successfully.") u = CustomUserWithFK._default_manager.get(email=email) self.assertEqual(u.username, email) self.assertEqual(u.group, group) test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_validate_fk(self): - email = Email.objects.create(email='mymail@gmail.com') + email = Email.objects.create(email="mymail@gmail.com") Group.objects.all().delete() nonexistent_group_id = 1 - msg = f'group instance with id {nonexistent_group_id} does not exist.' + msg = f"group instance with id {nonexistent_group_id} does not exist." with self.assertRaisesMessage(CommandError, msg): call_command( - 'createsuperuser', + "createsuperuser", interactive=False, username=email.pk, email=email.email, @@ -548,42 +592,44 @@ class CreatesuperuserManagementCommandTestCase(TestCase): verbosity=0, ) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_validate_fk_environment_variable(self): - email = Email.objects.create(email='mymail@gmail.com') + email = Email.objects.create(email="mymail@gmail.com") Group.objects.all().delete() nonexistent_group_id = 1 - msg = f'group instance with id {nonexistent_group_id} does not exist.' + msg = f"group instance with id {nonexistent_group_id} does not exist." with mock.patch.dict( os.environ, - {'DJANGO_SUPERUSER_GROUP': str(nonexistent_group_id)}, + {"DJANGO_SUPERUSER_GROUP": str(nonexistent_group_id)}, ): with self.assertRaisesMessage(CommandError, msg): call_command( - 'createsuperuser', + "createsuperuser", interactive=False, username=email.pk, email=email.email, verbosity=0, ) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithFK') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithFK") def test_validate_fk_via_option_interactive(self): - email = Email.objects.create(email='mymail@gmail.com') + email = Email.objects.create(email="mymail@gmail.com") Group.objects.all().delete() nonexistent_group_id = 1 - msg = f'group instance with id {nonexistent_group_id} does not exist.' + msg = f"group instance with id {nonexistent_group_id} does not exist." - @mock_inputs({ - 'password': 'nopasswd', - 'Username (Email.id): ': email.pk, - 'Email (Email.email): ': email.email, - }) + @mock_inputs( + { + "password": "nopasswd", + "Username (Email.id): ": email.pk, + "Email (Email.email): ": email.email, + } + ) def test(self): with self.assertRaisesMessage(CommandError, msg): call_command( - 'createsuperuser', + "createsuperuser", group=nonexistent_group_id, stdin=MockTTY(), verbosity=0, @@ -591,65 +637,69 @@ class CreatesuperuserManagementCommandTestCase(TestCase): test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2m') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithM2m") def test_fields_with_m2m(self): new_io = StringIO() - org_id_1 = Organization.objects.create(name='Organization 1').pk - org_id_2 = Organization.objects.create(name='Organization 2').pk + org_id_1 = Organization.objects.create(name="Organization 1").pk + org_id_2 = Organization.objects.create(name="Organization 2").pk call_command( - 'createsuperuser', + "createsuperuser", interactive=False, - username='joe', + username="joe", orgs=[org_id_1, org_id_2], stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') - user = CustomUserWithM2M._default_manager.get(username='joe') + self.assertEqual(command_output, "Superuser created successfully.") + user = CustomUserWithM2M._default_manager.get(username="joe") self.assertEqual(user.orgs.count(), 2) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2M') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithM2M") def test_fields_with_m2m_interactive(self): new_io = StringIO() - org_id_1 = Organization.objects.create(name='Organization 1').pk - org_id_2 = Organization.objects.create(name='Organization 2').pk + org_id_1 = Organization.objects.create(name="Organization 1").pk + org_id_2 = Organization.objects.create(name="Organization 2").pk - @mock_inputs({ - 'password': 'nopasswd', - 'Username: ': 'joe', - 'Orgs (Organization.id): ': '%s, %s' % (org_id_1, org_id_2), - }) + @mock_inputs( + { + "password": "nopasswd", + "Username: ": "joe", + "Orgs (Organization.id): ": "%s, %s" % (org_id_1, org_id_2), + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdout=new_io, stdin=MockTTY(), ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') - user = CustomUserWithM2M._default_manager.get(username='joe') + self.assertEqual(command_output, "Superuser created successfully.") + user = CustomUserWithM2M._default_manager.get(username="joe") self.assertEqual(user.orgs.count(), 2) test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2M') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithM2M") def test_fields_with_m2m_interactive_blank(self): new_io = StringIO() - org_id = Organization.objects.create(name='Organization').pk - entered_orgs = [str(org_id), ' '] + org_id = Organization.objects.create(name="Organization").pk + entered_orgs = [str(org_id), " "] def return_orgs(): return entered_orgs.pop() - @mock_inputs({ - 'password': 'nopasswd', - 'Username: ': 'joe', - 'Orgs (Organization.id): ': return_orgs, - }) + @mock_inputs( + { + "password": "nopasswd", + "Username: ": "joe", + "Orgs (Organization.id): ": return_orgs, + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdout=new_io, stderr=new_io, @@ -657,41 +707,43 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) self.assertEqual( new_io.getvalue().strip(), - 'Error: This field cannot be blank.\n' - 'Superuser created successfully.', + "Error: This field cannot be blank.\n" + "Superuser created successfully.", ) test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2MThrough') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithM2MThrough") def test_fields_with_m2m_and_through(self): msg = ( "Required field 'orgs' specifies a many-to-many relation through " "model, which is not supported." ) with self.assertRaisesMessage(CommandError, msg): - call_command('createsuperuser') + call_command("createsuperuser") def test_default_username(self): """createsuperuser uses a default username when one isn't provided.""" # Get the default username before creating a user. default_username = get_default_username() new_io = StringIO() - entered_passwords = ['password', 'password'] + entered_passwords = ["password", "password"] def return_passwords(): return entered_passwords.pop(0) - @mock_inputs({'password': return_passwords, 'username': '', 'email': ''}) + @mock_inputs({"password": return_passwords, "username": "", "email": ""}) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, stderr=new_io, ) - self.assertEqual(new_io.getvalue().strip(), 'Superuser created successfully.') + self.assertEqual( + new_io.getvalue().strip(), "Superuser created successfully." + ) self.assertTrue(User.objects.filter(username=default_username).exists()) test(self) @@ -701,17 +753,19 @@ class CreatesuperuserManagementCommandTestCase(TestCase): Creation should fail if the password fails validation. """ new_io = StringIO() - entered_passwords = ['1234567890', '1234567890', 'password', 'password'] + entered_passwords = ["1234567890", "1234567890", "password", "password"] def bad_then_good_password(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': bad_then_good_password, - 'username': 'joe1234567890', - 'email': '', - 'bypass': 'n', - }) + @mock_inputs( + { + "password": bad_then_good_password, + "username": "joe1234567890", + "email": "", + "bypass": "n", + } + ) def test(self): call_command( "createsuperuser", @@ -723,31 +777,42 @@ class CreatesuperuserManagementCommandTestCase(TestCase): self.assertEqual( new_io.getvalue().strip(), "This password is entirely numeric.\n" - "Superuser created successfully." + "Superuser created successfully.", ) test(self) - @override_settings(AUTH_PASSWORD_VALIDATORS=[ - {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, - ]) + @override_settings( + AUTH_PASSWORD_VALIDATORS=[ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" + }, + ] + ) def test_validate_password_against_username(self): new_io = StringIO() - username = 'supremelycomplex' - entered_passwords = [username, username, 'superduperunguessablepassword', 'superduperunguessablepassword'] + username = "supremelycomplex" + entered_passwords = [ + username, + username, + "superduperunguessablepassword", + "superduperunguessablepassword", + ] def bad_then_good_password(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': bad_then_good_password, - 'username': username, - 'email': '', - 'bypass': 'n', - }) + @mock_inputs( + { + "password": bad_then_good_password, + "username": username, + "email": "", + "bypass": "n", + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, @@ -755,37 +820,46 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) self.assertEqual( new_io.getvalue().strip(), - 'The password is too similar to the username.\n' - 'Superuser created successfully.' + "The password is too similar to the username.\n" + "Superuser created successfully.", ) test(self) @override_settings( - AUTH_USER_MODEL='auth_tests.CustomUser', + AUTH_USER_MODEL="auth_tests.CustomUser", AUTH_PASSWORD_VALIDATORS=[ - {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, - ] + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" + }, + ], ) def test_validate_password_against_required_fields(self): new_io = StringIO() - first_name = 'josephine' - entered_passwords = [first_name, first_name, 'superduperunguessablepassword', 'superduperunguessablepassword'] + first_name = "josephine" + entered_passwords = [ + first_name, + first_name, + "superduperunguessablepassword", + "superduperunguessablepassword", + ] def bad_then_good_password(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': bad_then_good_password, - 'username': 'whatever', - 'first_name': first_name, - 'date_of_birth': '1970-01-01', - 'email': 'joey@example.com', - 'bypass': 'n', - }) + @mock_inputs( + { + "password": bad_then_good_password, + "username": "whatever", + "first_name": first_name, + "date_of_birth": "1970-01-01", + "email": "joey@example.com", + "bypass": "n", + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, @@ -794,47 +868,53 @@ class CreatesuperuserManagementCommandTestCase(TestCase): self.assertEqual( new_io.getvalue().strip(), "The password is too similar to the first name.\n" - "Superuser created successfully." + "Superuser created successfully.", ) test(self) @override_settings( - AUTH_USER_MODEL='auth_tests.CustomUser', + AUTH_USER_MODEL="auth_tests.CustomUser", AUTH_PASSWORD_VALIDATORS=[ - {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, - ] + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator" + }, + ], ) def test_validate_password_against_required_fields_via_option(self): new_io = StringIO() - first_name = 'josephine' + first_name = "josephine" entered_passwords = [ - first_name, first_name, - 'superduperunguessablepassword', 'superduperunguessablepassword', + first_name, + first_name, + "superduperunguessablepassword", + "superduperunguessablepassword", ] def bad_then_good_password(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': bad_then_good_password, - 'bypass': 'n', - }) + @mock_inputs( + { + "password": bad_then_good_password, + "bypass": "n", + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, first_name=first_name, - date_of_birth='1970-01-01', - email='joey@example.com', + date_of_birth="1970-01-01", + email="joey@example.com", stdin=MockTTY(), stdout=new_io, stderr=new_io, ) self.assertEqual( new_io.getvalue().strip(), - 'The password is too similar to the first name.\n' - 'Superuser created successfully.' + "The password is too similar to the first name.\n" + "Superuser created successfully.", ) test(self) @@ -842,10 +922,10 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def test_blank_username(self): """Creation fails if --username is blank.""" new_io = StringIO() - with self.assertRaisesMessage(CommandError, 'Username cannot be blank.'): + with self.assertRaisesMessage(CommandError, "Username cannot be blank."): call_command( - 'createsuperuser', - username='', + "createsuperuser", + username="", stdin=MockTTY(), stdout=new_io, stderr=new_io, @@ -853,10 +933,10 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def test_blank_username_non_interactive(self): new_io = StringIO() - with self.assertRaisesMessage(CommandError, 'Username cannot be blank.'): + with self.assertRaisesMessage(CommandError, "Username cannot be blank."): call_command( - 'createsuperuser', - username='', + "createsuperuser", + username="", interactive=False, stdin=MockTTY(), stdout=new_io, @@ -869,15 +949,17 @@ class CreatesuperuserManagementCommandTestCase(TestCase): """ new_io = StringIO() - @mock_inputs({ - 'password': '1234567890', - 'username': 'joe1234567890', - 'email': '', - 'bypass': 'y', - }) + @mock_inputs( + { + "password": "1234567890", + "username": "joe1234567890", + "email": "", + "bypass": "y", + } + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, @@ -885,8 +967,8 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) self.assertEqual( new_io.getvalue().strip(), - 'This password is entirely numeric.\n' - 'Superuser created successfully.' + "This password is entirely numeric.\n" + "Superuser created successfully.", ) test(self) @@ -895,10 +977,10 @@ class CreatesuperuserManagementCommandTestCase(TestCase): """Creation fails if the username fails validation.""" user_field = User._meta.get_field(User.USERNAME_FIELD) new_io = StringIO() - entered_passwords = ['password', 'password'] + entered_passwords = ["password", "password"] # Enter an invalid (too long) username first and then a valid one. - invalid_username = ('x' * user_field.max_length) + 'y' - entered_usernames = [invalid_username, 'janet'] + invalid_username = ("x" * user_field.max_length) + "y" + entered_usernames = [invalid_username, "janet"] def return_passwords(): return entered_passwords.pop(0) @@ -906,10 +988,12 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def return_usernames(): return entered_usernames.pop(0) - @mock_inputs({'password': return_passwords, 'username': return_usernames, 'email': ''}) + @mock_inputs( + {"password": return_passwords, "username": return_usernames, "email": ""} + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, @@ -917,32 +1001,33 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) self.assertEqual( new_io.getvalue().strip(), - 'Error: Ensure this value has at most %s characters (it has %s).\n' - 'Superuser created successfully.' % (user_field.max_length, len(invalid_username)) + "Error: Ensure this value has at most %s characters (it has %s).\n" + "Superuser created successfully." + % (user_field.max_length, len(invalid_username)), ) test(self) - @mock_inputs({'username': 'KeyboardInterrupt'}) + @mock_inputs({"username": "KeyboardInterrupt"}) def test_keyboard_interrupt(self): new_io = StringIO() with self.assertRaises(SystemExit): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, stderr=new_io, ) - self.assertEqual(new_io.getvalue(), '\nOperation cancelled.\n') + self.assertEqual(new_io.getvalue(), "\nOperation cancelled.\n") def test_existing_username(self): """Creation fails if the username already exists.""" - user = User.objects.create(username='janet') + user = User.objects.create(username="janet") new_io = StringIO() - entered_passwords = ['password', 'password'] + entered_passwords = ["password", "password"] # Enter the existing username first and then a new one. - entered_usernames = [user.username, 'joe'] + entered_usernames = [user.username, "joe"] def return_passwords(): return entered_passwords.pop(0) @@ -950,10 +1035,12 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def return_usernames(): return entered_usernames.pop(0) - @mock_inputs({'password': return_passwords, 'username': return_usernames, 'email': ''}) + @mock_inputs( + {"password": return_passwords, "username": return_usernames, "email": ""} + ) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, @@ -961,21 +1048,23 @@ class CreatesuperuserManagementCommandTestCase(TestCase): ) self.assertEqual( new_io.getvalue().strip(), - 'Error: That username is already taken.\n' - 'Superuser created successfully.' + "Error: That username is already taken.\n" + "Superuser created successfully.", ) test(self) def test_existing_username_non_interactive(self): """Creation fails if the username already exists.""" - User.objects.create(username='janet') + User.objects.create(username="janet") new_io = StringIO() - with self.assertRaisesMessage(CommandError, "Error: That username is already taken."): + with self.assertRaisesMessage( + CommandError, "Error: That username is already taken." + ): call_command( - 'createsuperuser', - username='janet', - email='', + "createsuperuser", + username="janet", + email="", interactive=False, stdout=new_io, ) @@ -983,27 +1072,29 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def test_existing_username_provided_via_option_and_interactive(self): """call_command() gets username='janet' and interactive=True.""" new_io = StringIO() - entered_passwords = ['password', 'password'] - User.objects.create(username='janet') + entered_passwords = ["password", "password"] + User.objects.create(username="janet") def return_passwords(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': return_passwords, - 'username': 'janet1', - 'email': 'test@test.com' - }) + @mock_inputs( + { + "password": return_passwords, + "username": "janet1", + "email": "test@test.com", + } + ) def test(self): call_command( - 'createsuperuser', - username='janet', + "createsuperuser", + username="janet", interactive=True, stdin=MockTTY(), stdout=new_io, stderr=new_io, ) - msg = 'Error: That username is already taken.\nSuperuser created successfully.' + msg = "Error: That username is already taken.\nSuperuser created successfully." self.assertEqual(new_io.getvalue().strip(), msg) test(self) @@ -1021,11 +1112,13 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def mismatched_passwords_then_matched(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': mismatched_passwords_then_matched, - 'username': 'joe1234567890', - 'email': '', - }) + @mock_inputs( + { + "password": mismatched_passwords_then_matched, + "username": "joe1234567890", + "email": "", + } + ) def test(self): call_command( "createsuperuser", @@ -1037,7 +1130,7 @@ class CreatesuperuserManagementCommandTestCase(TestCase): self.assertEqual( new_io.getvalue().strip(), "Error: Your passwords didn't match.\n" - "Superuser created successfully." + "Superuser created successfully.", ) test(self) @@ -1055,11 +1148,13 @@ class CreatesuperuserManagementCommandTestCase(TestCase): def blank_passwords_then_valid(): return entered_passwords.pop(0) - @mock_inputs({ - 'password': blank_passwords_then_valid, - 'username': 'joe1234567890', - 'email': '', - }) + @mock_inputs( + { + "password": blank_passwords_then_valid, + "username": "joe1234567890", + "email": "", + } + ) def test(self): call_command( "createsuperuser", @@ -1071,118 +1166,132 @@ class CreatesuperuserManagementCommandTestCase(TestCase): self.assertEqual( new_io.getvalue().strip(), "Error: Blank passwords aren't allowed.\n" - "Superuser created successfully." + "Superuser created successfully.", ) test(self) - @override_settings(AUTH_USER_MODEL='auth_tests.NoPasswordUser') + @override_settings(AUTH_USER_MODEL="auth_tests.NoPasswordUser") def test_usermodel_without_password(self): new_io = StringIO() call_command( - 'createsuperuser', + "createsuperuser", interactive=False, stdin=MockTTY(), stdout=new_io, stderr=new_io, - username='username', + username="username", ) - self.assertEqual(new_io.getvalue().strip(), 'Superuser created successfully.') + self.assertEqual(new_io.getvalue().strip(), "Superuser created successfully.") - @override_settings(AUTH_USER_MODEL='auth_tests.NoPasswordUser') + @override_settings(AUTH_USER_MODEL="auth_tests.NoPasswordUser") def test_usermodel_without_password_interactive(self): new_io = StringIO() - @mock_inputs({'username': 'username'}) + @mock_inputs({"username": "username"}) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), stdout=new_io, stderr=new_io, ) - self.assertEqual(new_io.getvalue().strip(), 'Superuser created successfully.') + self.assertEqual( + new_io.getvalue().strip(), "Superuser created successfully." + ) test(self) - @mock.patch.dict(os.environ, { - 'DJANGO_SUPERUSER_PASSWORD': 'test_password', - 'DJANGO_SUPERUSER_USERNAME': 'test_superuser', - 'DJANGO_SUPERUSER_EMAIL': 'joe@somewhere.org', - 'DJANGO_SUPERUSER_FIRST_NAME': 'ignored_first_name', - }) + @mock.patch.dict( + os.environ, + { + "DJANGO_SUPERUSER_PASSWORD": "test_password", + "DJANGO_SUPERUSER_USERNAME": "test_superuser", + "DJANGO_SUPERUSER_EMAIL": "joe@somewhere.org", + "DJANGO_SUPERUSER_FIRST_NAME": "ignored_first_name", + }, + ) def test_environment_variable_non_interactive(self): - call_command('createsuperuser', interactive=False, verbosity=0) - user = User.objects.get(username='test_superuser') - self.assertEqual(user.email, 'joe@somewhere.org') - self.assertTrue(user.check_password('test_password')) + call_command("createsuperuser", interactive=False, verbosity=0) + user = User.objects.get(username="test_superuser") + self.assertEqual(user.email, "joe@somewhere.org") + self.assertTrue(user.check_password("test_password")) # Environment variables are ignored for non-required fields. - self.assertEqual(user.first_name, '') + self.assertEqual(user.first_name, "") - @override_settings(AUTH_USER_MODEL='auth_tests.CustomUserWithM2m') + @override_settings(AUTH_USER_MODEL="auth_tests.CustomUserWithM2m") def test_environment_variable_m2m_non_interactive(self): new_io = StringIO() - org_id_1 = Organization.objects.create(name='Organization 1').pk - org_id_2 = Organization.objects.create(name='Organization 2').pk - with mock.patch.dict(os.environ, { - 'DJANGO_SUPERUSER_ORGS': f'{org_id_1},{org_id_2}', - }): + org_id_1 = Organization.objects.create(name="Organization 1").pk + org_id_2 = Organization.objects.create(name="Organization 2").pk + with mock.patch.dict( + os.environ, + { + "DJANGO_SUPERUSER_ORGS": f"{org_id_1},{org_id_2}", + }, + ): call_command( - 'createsuperuser', + "createsuperuser", interactive=False, - username='joe', + username="joe", stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') - user = CustomUserWithM2M._default_manager.get(username='joe') + self.assertEqual(command_output, "Superuser created successfully.") + user = CustomUserWithM2M._default_manager.get(username="joe") self.assertEqual(user.orgs.count(), 2) - @mock.patch.dict(os.environ, { - 'DJANGO_SUPERUSER_USERNAME': 'test_superuser', - 'DJANGO_SUPERUSER_EMAIL': 'joe@somewhere.org', - }) + @mock.patch.dict( + os.environ, + { + "DJANGO_SUPERUSER_USERNAME": "test_superuser", + "DJANGO_SUPERUSER_EMAIL": "joe@somewhere.org", + }, + ) def test_ignore_environment_variable_non_interactive(self): # Environment variables are ignored in non-interactive mode, if # provided by a command line arguments. call_command( - 'createsuperuser', + "createsuperuser", interactive=False, - username='cmd_superuser', - email='cmd@somewhere.org', + username="cmd_superuser", + email="cmd@somewhere.org", verbosity=0, ) - user = User.objects.get(username='cmd_superuser') - self.assertEqual(user.email, 'cmd@somewhere.org') + user = User.objects.get(username="cmd_superuser") + self.assertEqual(user.email, "cmd@somewhere.org") self.assertFalse(user.has_usable_password()) - @mock.patch.dict(os.environ, { - 'DJANGO_SUPERUSER_PASSWORD': 'test_password', - 'DJANGO_SUPERUSER_USERNAME': 'test_superuser', - 'DJANGO_SUPERUSER_EMAIL': 'joe@somewhere.org', - }) + @mock.patch.dict( + os.environ, + { + "DJANGO_SUPERUSER_PASSWORD": "test_password", + "DJANGO_SUPERUSER_USERNAME": "test_superuser", + "DJANGO_SUPERUSER_EMAIL": "joe@somewhere.org", + }, + ) def test_ignore_environment_variable_interactive(self): # Environment variables are ignored in interactive mode. - @mock_inputs({'password': 'cmd_password'}) + @mock_inputs({"password": "cmd_password"}) def test(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, - username='cmd_superuser', - email='cmd@somewhere.org', + username="cmd_superuser", + email="cmd@somewhere.org", stdin=MockTTY(), verbosity=0, ) - user = User.objects.get(username='cmd_superuser') - self.assertEqual(user.email, 'cmd@somewhere.org') - self.assertTrue(user.check_password('cmd_password')) + user = User.objects.get(username="cmd_superuser") + self.assertEqual(user.email, "cmd@somewhere.org") + self.assertTrue(user.check_password("cmd_password")) test(self) class MultiDBCreatesuperuserTestCase(TestCase): - databases = {'default', 'other'} + databases = {"default", "other"} def test_createsuperuser_command_with_database_option(self): """ @@ -1190,55 +1299,54 @@ class MultiDBCreatesuperuserTestCase(TestCase): """ new_io = StringIO() call_command( - 'createsuperuser', + "createsuperuser", interactive=False, - username='joe', - email='joe@somewhere.org', - database='other', + username="joe", + email="joe@somewhere.org", + database="other", stdout=new_io, ) command_output = new_io.getvalue().strip() - self.assertEqual(command_output, 'Superuser created successfully.') - user = User.objects.using('other').get(username='joe') - self.assertEqual(user.email, 'joe@somewhere.org') + self.assertEqual(command_output, "Superuser created successfully.") + user = User.objects.using("other").get(username="joe") + self.assertEqual(user.email, "joe@somewhere.org") def test_createsuperuser_command_suggested_username_with_database_option(self): - default_username = get_default_username(database='other') - qs = User.objects.using('other') + default_username = get_default_username(database="other") + qs = User.objects.using("other") - @mock_inputs({'password': 'nopasswd', 'username': '', 'email': ''}) + @mock_inputs({"password": "nopasswd", "username": "", "email": ""}) def test_other_create_with_suggested_username(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), verbosity=0, - database='other', + database="other", ) self.assertIs(qs.filter(username=default_username).exists(), True) test_other_create_with_suggested_username(self) - @mock_inputs({'password': 'nopasswd', 'Username: ': 'other', 'email': ''}) + @mock_inputs({"password": "nopasswd", "Username: ": "other", "email": ""}) def test_other_no_suggestion(self): call_command( - 'createsuperuser', + "createsuperuser", interactive=True, stdin=MockTTY(), verbosity=0, - database='other', + database="other", ) - self.assertIs(qs.filter(username='other').exists(), True) + self.assertIs(qs.filter(username="other").exists(), True) test_other_no_suggestion(self) class CreatePermissionsTests(TestCase): - def setUp(self): self._original_permissions = Permission._meta.permissions[:] self._original_default_permissions = Permission._meta.default_permissions - self.app_config = apps.get_app_config('auth') + self.app_config = apps.get_app_config("auth") def tearDown(self): Permission._meta.permissions = self._original_permissions @@ -1246,25 +1354,33 @@ class CreatePermissionsTests(TestCase): ContentType.objects.clear_cache() def test_default_permissions(self): - permission_content_type = ContentType.objects.get_by_natural_key('auth', 'permission') + permission_content_type = ContentType.objects.get_by_natural_key( + "auth", "permission" + ) Permission._meta.permissions = [ - ('my_custom_permission', 'Some permission'), + ("my_custom_permission", "Some permission"), ] create_permissions(self.app_config, verbosity=0) # view/add/change/delete permission by default + custom permission - self.assertEqual(Permission.objects.filter( - content_type=permission_content_type, - ).count(), 5) + self.assertEqual( + Permission.objects.filter( + content_type=permission_content_type, + ).count(), + 5, + ) Permission.objects.filter(content_type=permission_content_type).delete() Permission._meta.default_permissions = [] create_permissions(self.app_config, verbosity=0) # custom permission only since default permissions is empty - self.assertEqual(Permission.objects.filter( - content_type=permission_content_type, - ).count(), 1) + self.assertEqual( + Permission.objects.filter( + content_type=permission_content_type, + ).count(), + 1, + ) def test_unavailable_models(self): """ @@ -1276,7 +1392,7 @@ class CreatePermissionsTests(TestCase): with self.assertNumQueries(0): create_permissions(self.app_config, verbosity=0, apps=state.apps) # Unavailable auth.Permission - state = migrations.state.ProjectState(real_apps={'contenttypes'}) + state = migrations.state.ProjectState(real_apps={"contenttypes"}) with self.assertNumQueries(0): create_permissions(self.app_config, verbosity=0, apps=state.apps) @@ -1288,9 +1404,9 @@ class CreatePermissionsTests(TestCase): # Warm the manager cache. ContentType.objects.get_for_model(Group) # Apply a deletion as if e.g. a database 'flush' had been executed. - ContentType.objects.filter(app_label='auth', model='group').delete() + ContentType.objects.filter(app_label="auth", model="group").delete() # This fails with a foreign key constraint without the fix. - create_permissions(apps.get_app_config('auth'), interactive=False, verbosity=0) + create_permissions(apps.get_app_config("auth"), interactive=False, verbosity=0) def test_permission_with_proxy_content_type_created(self): """ @@ -1298,7 +1414,7 @@ class CreatePermissionsTests(TestCase): content type of the concrete model. """ opts = UserProxy._meta - codename = get_permission_codename('add', opts) + codename = get_permission_codename("add", opts) self.assertTrue( Permission.objects.filter( content_type__model=opts.model_name, |
