test_utils.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. from django.test import TestCase
  2. from ...users.test import UserTestCase
  3. from ..models import Agreement, UserAgreement
  4. from ..utils import (
  5. get_parsed_agreement_text,
  6. get_required_user_agreement,
  7. save_user_agreement_acceptance,
  8. )
  9. class MockRequest:
  10. def __init__(self, user=None):
  11. self.user = user
  12. self.frontend_context = {}
  13. def get_host(self):
  14. return "testhost.com"
  15. class GetParsedAgreementTextTests(TestCase):
  16. def test_agreement_no_text(self):
  17. agreement = Agreement.objects.create(
  18. type=Agreement.TYPE_PRIVACY, link="https://somewhre.com", 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, text="Lorem ipsum", is_active=True
  34. )
  35. result = get_parsed_agreement_text(MockRequest(), agreement)
  36. self.assertEqual(result, "<p>Lorem ipsum</p>")
  37. class GetRequiredUserAgreementTests(UserTestCase):
  38. def setUp(self):
  39. self.agreement = Agreement.objects.create(
  40. type=Agreement.TYPE_PRIVACY,
  41. link="https://somewhre.com",
  42. text="Lorem ipsum",
  43. is_active=True,
  44. )
  45. self.agreements = Agreement.objects.get_agreements_from_db()
  46. def test_anonymous_user(self):
  47. anonymous_user = self.get_anonymous_user()
  48. result = get_required_user_agreement(anonymous_user, self.agreements)
  49. self.assertIsNone(result)
  50. def test_authenticated_user_no_agreements(self):
  51. authenticated_user = self.get_authenticated_user()
  52. result = get_required_user_agreement(authenticated_user, {})
  53. self.assertIsNone(result)
  54. def test_authenticated_user(self):
  55. authenticated_user = self.get_authenticated_user()
  56. result = get_required_user_agreement(authenticated_user, self.agreements)
  57. self.assertEqual(result, self.agreement)
  58. def test_authenticated_user_with_agreement(self):
  59. authenticated_user = self.get_authenticated_user()
  60. authenticated_user.agreements.append(self.agreement.pk)
  61. result = get_required_user_agreement(authenticated_user, self.agreements)
  62. self.assertIsNone(result)
  63. def test_prioritize_terms_of_service(self):
  64. terms_of_service = Agreement.objects.create(
  65. type=Agreement.TYPE_TOS,
  66. link="https://somewhre.com",
  67. text="Lorem ipsum",
  68. is_active=True,
  69. )
  70. agreements = Agreement.objects.get_agreements_from_db()
  71. agreements_in_wrong_order = {
  72. Agreement.TYPE_PRIVACY: agreements[Agreement.TYPE_PRIVACY],
  73. Agreement.TYPE_TOS: agreements[Agreement.TYPE_TOS],
  74. }
  75. authenticated_user = self.get_authenticated_user()
  76. result = get_required_user_agreement(
  77. authenticated_user, agreements_in_wrong_order
  78. )
  79. self.assertEqual(result, terms_of_service)
  80. class SaveUserAgreementAcceptance(UserTestCase):
  81. def test_no_commit(self):
  82. user = self.get_authenticated_user()
  83. agreement = Agreement.objects.create(
  84. type=Agreement.TYPE_PRIVACY, link="https://somewhre.com", text="Lorem ipsum"
  85. )
  86. save_user_agreement_acceptance(user, agreement)
  87. self.assertEqual(user.agreements, [agreement.id])
  88. user.refresh_from_db()
  89. self.assertEqual(user.agreements, [])
  90. UserAgreement.objects.get(user=user, agreement=agreement)
  91. self.assertEqual(UserAgreement.objects.count(), 1)
  92. def test_commit(self):
  93. user = self.get_authenticated_user()
  94. agreement = Agreement.objects.create(
  95. type=Agreement.TYPE_PRIVACY, link="https://somewhre.com", text="Lorem ipsum"
  96. )
  97. save_user_agreement_acceptance(user, agreement, commit=True)
  98. self.assertEqual(user.agreements, [agreement.id])
  99. user.refresh_from_db()
  100. self.assertEqual(user.agreements, [agreement.id])
  101. UserAgreement.objects.get(user=user, agreement=agreement)
  102. self.assertEqual(UserAgreement.objects.count(), 1)