Просмотр исходного кода

Ask user to accept TOS before Privacy Policy, if both need to be accepted

rafalp 6 лет назад
Родитель
Сommit
51738f151f
2 измененных файлов с 22 добавлено и 8 удалено
  1. 19 6
      misago/legal/tests/test_utils.py
  2. 3 2
      misago/legal/utils.py

+ 19 - 6
misago/legal/tests/test_utils.py

@@ -52,8 +52,6 @@ class GetParsedAgreementTextTests(TestCase):
 
 class GetRequiredUserAgreementTests(UserTestCase):
     def setUp(self):
-        Agreement.objects.invalidate_cache()
-
         self.agreement = Agreement.objects.create(
             type=Agreement.TYPE_PRIVACY,
             link='https://somewhre.com',
@@ -61,10 +59,7 @@ class GetRequiredUserAgreementTests(UserTestCase):
             is_active=True,
         )
 
-        self.agreements = Agreement.objects.get_agreements()
-
-    def tearDown(self):
-        Agreement.objects.invalidate_cache()
+        self.agreements = Agreement.objects.get_agreements_from_db()
 
     def test_anonymous_user(self):
         anonymous_user = self.get_anonymous_user()
@@ -88,6 +83,24 @@ class GetRequiredUserAgreementTests(UserTestCase):
         result = get_required_user_agreement(authenticated_user, self.agreements)
         self.assertIsNone(result)
 
+    def test_prioritize_terms_of_service(self):
+        terms_of_service = Agreement.objects.create(
+            type=Agreement.TYPE_TOS,
+            link='https://somewhre.com',
+            text='Lorem ipsum',
+            is_active=True,
+        )
+
+        agreements = Agreement.objects.get_agreements_from_db()
+        agreements_in_wrong_order = {
+            Agreement.TYPE_PRIVACY: agreements[Agreement.TYPE_PRIVACY],
+            Agreement.TYPE_TOS: agreements[Agreement.TYPE_TOS],
+        }
+
+        authenticated_user = self.get_authenticated_user()
+        result = get_required_user_agreement(authenticated_user, agreements_in_wrong_order)
+        self.assertEqual(result, terms_of_service)
+
 
 class SaveUserAgreementAcceptance(UserTestCase):
     def test_no_commit(self):

+ 3 - 2
misago/legal/utils.py

@@ -23,8 +23,9 @@ def get_required_user_agreement(user, agreements):
     if user.is_anonymous:
         return None
 
-    for agreement in agreements.values():
-        if agreement['id'] not in user.agreements:
+    for agreement_type, _ in Agreement.TYPE_CHOICES:
+        agreement = agreements.get(agreement_type)
+        if agreement and agreement['id'] not in user.agreements:
             try:
                 return Agreement.objects.get(id=agreement['id'])
             except Agreement.DoesNotExist: