testutils.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from .models import AnonymousUser, Online
  4. from .setupnewuser import setup_new_user
  5. User = get_user_model()
  6. class UserTestCase(TestCase):
  7. USER_PASSWORD = "Pass.123"
  8. USER_IP = "127.0.0.1"
  9. def setUp(self):
  10. super().setUp()
  11. self.get_initial_user()
  12. def get_initial_user(self):
  13. self.user = self.get_anonymous_user()
  14. def get_anonymous_user(self):
  15. return AnonymousUser()
  16. def get_authenticated_user(self):
  17. return create_test_user(
  18. "TestUser", "test@user.com", self.USER_PASSWORD, joined_from_ip=self.USER_IP
  19. )
  20. def get_superuser(self):
  21. return create_test_superuser(
  22. "TestSuperUser",
  23. "test@superuser.com",
  24. self.USER_PASSWORD,
  25. joined_from_ip=self.USER_IP,
  26. )
  27. def login_user(self, user, password=None):
  28. self.client.force_login(user)
  29. def logout_user(self):
  30. if self.user.is_authenticated:
  31. Online.objects.filter(user=self.user).delete()
  32. self.client.logout()
  33. class AuthenticatedUserTestCase(UserTestCase):
  34. def get_initial_user(self):
  35. self.user = self.get_authenticated_user()
  36. self.login_user(self.user)
  37. def reload_user(self):
  38. self.user.refresh_from_db()
  39. class SuperUserTestCase(AuthenticatedUserTestCase):
  40. def get_initial_user(self):
  41. self.user = self.get_superuser()
  42. self.login_user(self.user)
  43. def create_test_user(username, email, password=None, **extra_fields):
  44. """Faster counterpart of regular `create_user` followed by `setup_new_user`"""
  45. if "avatars" not in extra_fields:
  46. extra_fields["avatars"] = user_placeholder_avatars
  47. return User.objects.create_user(username, email, password, **extra_fields)
  48. def create_test_superuser(username, email, password=None, **extra_fields):
  49. """Faster counterpart of regular `create_superuser` followed by `setup_new_user`"""
  50. if "avatars" not in extra_fields:
  51. extra_fields["avatars"] = user_placeholder_avatars
  52. return User.objects.create_superuser(username, email, password, **extra_fields)
  53. user_placeholder_avatars = [
  54. {"size": 400, "url": "http://placekitten.com/400/400"},
  55. {"size": 200, "url": "http://placekitten.com/200/200"},
  56. {"size": 100, "url": "http://placekitten.com/100/100"},
  57. ]