test_subscriptions.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from datetime import timedelta
  2. from django.contrib.auth import get_user_model
  3. from django.test import TestCase
  4. from django.utils import timezone
  5. from misago.categories.models import Category
  6. from misago.threads import testutils
  7. from misago.threads.subscriptions import make_subscription_aware
  8. from misago.users.models import AnonymousUser
  9. UserModel = get_user_model()
  10. class SubscriptionsTests(TestCase):
  11. def setUp(self):
  12. self.category = list(Category.objects.all_categories()[:1])[0]
  13. self.thread = self.post_thread(timezone.now() - timedelta(days=10))
  14. self.user = UserModel.objects.create_user("Bob", "bob@test.com", "Pass.123")
  15. self.anon = AnonymousUser()
  16. def post_thread(self, datetime):
  17. return testutils.post_thread(
  18. category=self.category,
  19. started_on=datetime,
  20. )
  21. def test_anon_subscription(self):
  22. """make single thread sub aware for anon"""
  23. make_subscription_aware(self.anon, self.thread)
  24. self.assertIsNone(self.thread.subscription)
  25. def test_anon_threads_subscription(self):
  26. """make multiple threads list sub aware for anon"""
  27. threads = []
  28. for _ in range(10):
  29. threads.append(self.post_thread(timezone.now() - timedelta(days=10)))
  30. make_subscription_aware(self.anon, threads)
  31. for thread in threads:
  32. self.assertIsNone(thread.subscription)
  33. def test_no_subscription(self):
  34. """make thread sub aware for authenticated"""
  35. make_subscription_aware(self.user, self.thread)
  36. self.assertIsNone(self.thread.subscription)
  37. def test_subscribed_thread(self):
  38. """make thread sub aware for authenticated"""
  39. self.user.subscription_set.create(
  40. thread=self.thread,
  41. category=self.category,
  42. last_read_on=timezone.now(),
  43. send_email=True,
  44. )
  45. make_subscription_aware(self.user, self.thread)
  46. self.assertTrue(self.thread.subscription.send_email)
  47. def test_threads_no_subscription(self):
  48. """make mulitple threads sub aware for authenticated"""
  49. threads = []
  50. for i in range(10):
  51. threads.append(self.post_thread(timezone.now() - timedelta(days=10)))
  52. if i % 3 == 0:
  53. self.user.subscription_set.create(
  54. thread=threads[-1],
  55. category=self.category,
  56. last_read_on=timezone.now(),
  57. send_email=False,
  58. )
  59. elif i % 2 == 0:
  60. self.user.subscription_set.create(
  61. thread=threads[-1],
  62. category=self.category,
  63. last_read_on=timezone.now(),
  64. send_email=True,
  65. )
  66. make_subscription_aware(self.user, threads)
  67. for i in range(10):
  68. if i % 3 == 0:
  69. self.assertFalse(threads[i].subscription.send_email)
  70. elif i % 2 == 0:
  71. self.assertTrue(threads[i].subscription.send_email)
  72. else:
  73. self.assertIsNone(threads[i].subscription)