test_subscriptions.py 3.0 KB

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