test.py 2.3 KB

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