test_utils.py 6.2 KB

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