test_utils.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. from django.test import TestCase
  2. from misago.legal.models import Agreement
  3. from misago.legal.utils import (
  4. get_parsed_agreement_text, get_required_user_agreement, set_agreement_as_active
  5. )
  6. from misago.users.testutils import UserTestCase
  7. class MockRequest(object):
  8. def __init__(self, user=None):
  9. self.user = user
  10. self.frontend_context = {}
  11. def get_host(self):
  12. return 'testhost.com'
  13. class GetParsedAgreementTextTests(TestCase):
  14. def test_agreement_no_text(self):
  15. agreement = Agreement.objects.create(
  16. type=Agreement.TYPE_PRIVACY,
  17. link='https://somewhre.com',
  18. is_active=True,
  19. )
  20. result = get_parsed_agreement_text(MockRequest(), agreement)
  21. self.assertIsNone(result)
  22. def test_agreement_link_and_text(self):
  23. agreement = Agreement.objects.create(
  24. type=Agreement.TYPE_PRIVACY,
  25. link='https://somewhre.com',
  26. text='Lorem ipsum',
  27. is_active=True,
  28. )
  29. result = get_parsed_agreement_text(MockRequest(), agreement)
  30. self.assertEqual(result, '<p>Lorem ipsum</p>')
  31. def test_agreement_text(self):
  32. agreement = Agreement.objects.create(
  33. type=Agreement.TYPE_PRIVACY,
  34. text='Lorem ipsum',
  35. is_active=True,
  36. )
  37. result = get_parsed_agreement_text(MockRequest(), agreement)
  38. self.assertEqual(result, '<p>Lorem ipsum</p>')
  39. class GetRequiredUserAgreementTests(UserTestCase):
  40. def setUp(self):
  41. Agreement.objects.invalidate_cache()
  42. self.agreement = Agreement.objects.create(
  43. type=Agreement.TYPE_PRIVACY,
  44. link='https://somewhre.com',
  45. text='Lorem ipsum',
  46. is_active=True,
  47. )
  48. self.agreements = Agreement.objects.get_agreements()
  49. def tearDown(self):
  50. Agreement.objects.invalidate_cache()
  51. def test_anonymous_user(self):
  52. anonymous_user = self.get_anonymous_user()
  53. result = get_required_user_agreement(anonymous_user, self.agreements)
  54. self.assertIsNone(result)
  55. def test_authenticated_user_no_agreements(self):
  56. authenticated_user = self.get_authenticated_user()
  57. result = get_required_user_agreement(authenticated_user, {})
  58. self.assertIsNone(result)
  59. def test_authenticated_user(self):
  60. authenticated_user = self.get_authenticated_user()
  61. result = get_required_user_agreement(authenticated_user, self.agreements)
  62. self.assertEqual(result, self.agreement)
  63. def test_authenticated_user_with_agreement(self):
  64. authenticated_user = self.get_authenticated_user()
  65. authenticated_user.agreements.append(self.agreement.pk)
  66. result = get_required_user_agreement(authenticated_user, self.agreements)
  67. self.assertIsNone(result)
  68. class SetAgreementAsActiveTests(TestCase):
  69. def test_inactive_agreement(self):
  70. agreement = Agreement.objects.create(
  71. type=Agreement.TYPE_PRIVACY,
  72. link='https://somewhre.com',
  73. text='Lorem ipsum',
  74. )
  75. set_agreement_as_active(agreement)
  76. self.assertTrue(agreement.is_active)
  77. agreement.refresh_from_db()
  78. self.assertFalse(agreement.is_active)
  79. def test_inactive_agreement_commit(self):
  80. agreement = Agreement.objects.create(
  81. type=Agreement.TYPE_PRIVACY,
  82. link='https://somewhre.com',
  83. text='Lorem ipsum',
  84. )
  85. set_agreement_as_active(agreement, commit=True)
  86. self.assertTrue(agreement.is_active)
  87. agreement.refresh_from_db()
  88. self.assertTrue(agreement.is_active)
  89. def test_change_active_agreement(self):
  90. old_agreement = Agreement.objects.create(
  91. type=Agreement.TYPE_PRIVACY,
  92. link='https://somewhre.com',
  93. text='Lorem ipsum',
  94. is_active=True,
  95. )
  96. new_agreement = Agreement.objects.create(
  97. type=Agreement.TYPE_PRIVACY,
  98. link='https://somewhre.com',
  99. text='Lorem ipsum',
  100. )
  101. other_type_agreement = Agreement.objects.create(
  102. type=Agreement.TYPE_TOS,
  103. link='https://somewhre.com',
  104. text='Lorem ipsum',
  105. is_active=True,
  106. )
  107. set_agreement_as_active(new_agreement, commit=True)
  108. old_agreement.refresh_from_db()
  109. new_agreement.refresh_from_db()
  110. other_type_agreement.refresh_from_db()
  111. self.assertFalse(old_agreement.is_active)
  112. self.assertTrue(new_agreement.is_active)
  113. self.assertTrue(other_type_agreement.is_active)