test_chores.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from unittest import mock
  2. from django.conf import settings
  3. from django.core import management
  4. from django.test import override_settings, TestCase
  5. from django.utils import timezone
  6. from desecapi.models import Captcha, User
  7. class ChoresCommandTest(TestCase):
  8. @override_settings(CAPTCHA_VALIDITY_PERIOD=timezone.timedelta(hours=1))
  9. def test_captcha_cleanup(self):
  10. faketime = (
  11. timezone.now()
  12. - settings.CAPTCHA_VALIDITY_PERIOD
  13. - timezone.timedelta(seconds=1)
  14. )
  15. with mock.patch("django.db.models.fields.timezone.now", return_value=faketime):
  16. captcha1 = Captcha.objects.create()
  17. captcha2 = Captcha.objects.create()
  18. self.assertGreaterEqual(
  19. (captcha2.created - captcha1.created).total_seconds(), 3601
  20. )
  21. management.call_command("chores")
  22. self.assertEqual(list(Captcha.objects.all()), [captcha2])
  23. @override_settings(
  24. VALIDITY_PERIOD_VERIFICATION_SIGNATURE=timezone.timedelta(hours=1)
  25. )
  26. def test_inactive_user_cleanup(self):
  27. def create_users(kind):
  28. logintime = timezone.now() + timezone.timedelta(seconds=5)
  29. kwargs_list = [
  30. dict(
  31. email=f"user1+{kind}@example.com", is_active=None, last_login=None
  32. ),
  33. dict(
  34. email=f"user2+{kind}@example.com",
  35. is_active=None,
  36. last_login=logintime,
  37. ),
  38. dict(
  39. email=f"user3+{kind}@example.com", is_active=False, last_login=None
  40. ),
  41. dict(
  42. email=f"user4+{kind}@example.com",
  43. is_active=False,
  44. last_login=logintime,
  45. ),
  46. dict(
  47. email=f"user5+{kind}@example.com", is_active=True, last_login=None
  48. ),
  49. dict(
  50. email=f"user6+{kind}@example.com",
  51. is_active=True,
  52. last_login=logintime,
  53. ),
  54. ]
  55. return (User.objects.create(**kwargs) for kwargs in kwargs_list)
  56. # Old users
  57. faketime = (
  58. timezone.now()
  59. - settings.VALIDITY_PERIOD_VERIFICATION_SIGNATURE
  60. - timezone.timedelta(seconds=1)
  61. )
  62. with mock.patch("django.db.models.fields.timezone.now", return_value=faketime):
  63. expired_user, *_ = create_users("old")
  64. # New users
  65. create_users("new")
  66. all_users = set(User.objects.all())
  67. management.call_command("chores")
  68. # Check that only the expired user was deleted
  69. self.assertEqual(all_users - set(User.objects.all()), {expired_user})