test_subscriptions.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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(
  15. "Bob", "bob@test.com", "Pass.123")
  16. self.anon = AnonymousUser()
  17. def post_thread(self, datetime):
  18. return testutils.post_thread(
  19. category=self.category,
  20. started_on=datetime
  21. )
  22. def test_anon_subscription(self):
  23. """make single thread sub aware for anon"""
  24. make_subscription_aware(self.anon, self.thread)
  25. self.assertIsNone(self.thread.subscription)
  26. def test_anon_threads_subscription(self):
  27. """make multiple threads list sub aware for anon"""
  28. threads = []
  29. for _ in range(10):
  30. threads.append(
  31. self.post_thread(timezone.now() - timedelta(days=10)))
  32. make_subscription_aware(self.anon, threads)
  33. for thread in threads:
  34. self.assertIsNone(thread.subscription)
  35. def test_no_subscription(self):
  36. """make thread sub aware for authenticated"""
  37. make_subscription_aware(self.user, self.thread)
  38. self.assertIsNone(self.thread.subscription)
  39. def test_subscribed_thread(self):
  40. """make thread sub aware for authenticated"""
  41. self.user.subscription_set.create(
  42. thread=self.thread,
  43. category=self.category,
  44. last_read_on=timezone.now(),
  45. send_email=True,
  46. )
  47. make_subscription_aware(self.user, self.thread)
  48. self.assertTrue(self.thread.subscription.send_email)
  49. def test_threads_no_subscription(self):
  50. """make mulitple threads sub aware for authenticated"""
  51. threads = []
  52. for i in range(10):
  53. threads.append(
  54. self.post_thread(timezone.now() - timedelta(days=10)))
  55. if i % 3 == 0:
  56. self.user.subscription_set.create(
  57. thread=threads[-1],
  58. category=self.category,
  59. last_read_on=timezone.now(),
  60. send_email=False,
  61. )
  62. elif i % 2 == 0:
  63. self.user.subscription_set.create(
  64. thread=threads[-1],
  65. category=self.category,
  66. last_read_on=timezone.now(),
  67. send_email=True,
  68. )
  69. make_subscription_aware(self.user, threads)
  70. for i in range(10):
  71. if i % 3 == 0:
  72. self.assertFalse(threads[i].subscription.send_email)
  73. elif i % 2 == 0:
  74. self.assertTrue(threads[i].subscription.send_email)
  75. else:
  76. self.assertIsNone(threads[i].subscription)