You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.7 KiB

  1. from unittest.mock import MagicMock
  2. from django.contrib.auth import get_user_model
  3. from django.core.management import CommandError
  4. from django.test import TestCase
  5. from api.management.commands.create_admin import Command
  6. class TestCreateAdminCommand(TestCase):
  7. def test_can_create_user(self):
  8. mock_out = MagicMock()
  9. command = Command(stdout=mock_out)
  10. command.handle(
  11. username="user",
  12. password="whoami",
  13. email="example@doccano.com",
  14. database="default",
  15. interactive=False,
  16. verbosity=0,
  17. )
  18. self.assertEqual(get_user_model().objects.count(), 1)
  19. mock_out.write.assert_called_once_with("Setting password for User user.\n")
  20. def test_raise_error_if_username_is_not_given(self):
  21. mock_err = MagicMock()
  22. command = Command(stderr=mock_err)
  23. with self.assertRaises(CommandError):
  24. command.handle(
  25. password="whoami", email="example@doccano.com", database="default", interactive=False, verbosity=0
  26. )
  27. mock_err.write.assert_called_once_with("Error: Blank username isn't allowed.\n")
  28. def test_raise_error_if_password_is_not_given(self):
  29. mock_err = MagicMock()
  30. command = Command(stderr=mock_err)
  31. with self.assertRaises(CommandError):
  32. command.handle(
  33. username="user", email="example@doccano.com", database="default", interactive=False, verbosity=0
  34. )
  35. mock_err.write.assert_called_once_with("Error: Blank password isn't allowed.\n")
  36. def test_warn_default_password(self):
  37. mock_out = MagicMock()
  38. command = Command(stdout=mock_out)
  39. command.handle(
  40. username="user",
  41. password="password",
  42. email="example@doccano.com",
  43. database="default",
  44. interactive=False,
  45. verbosity=0,
  46. )
  47. self.assertEqual(get_user_model().objects.count(), 1)
  48. self.assertEqual(mock_out.write.call_count, 2)
  49. mock_out.write.assert_any_call("Warning: You should change the default password.\n")
  50. mock_out.write.assert_any_call("Setting password for User user.\n")
  51. def test_warn_duplicate_username(self):
  52. get_user_model().objects.create(username="admin", password="pass")
  53. mock_err = MagicMock()
  54. command = Command(stderr=mock_err)
  55. command.handle(
  56. username="admin",
  57. password="whoami",
  58. email="example@doccano.com",
  59. database="default",
  60. interactive=False,
  61. verbosity=0,
  62. )
  63. self.assertEqual(get_user_model().objects.count(), 1)
  64. mock_err.write.assert_called_once_with("User admin already exists.\n")