test_utils.py 5.8 KB

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