Browse Source

fix #743: showstopper in get_user_status for hidden users and regression test

Rafał Pitoń 8 years ago
parent
commit
30767bb3ec
2 changed files with 38 additions and 2 deletions
  1. 2 2
      misago/users/online/utils.py
  2. 36 0
      misago/users/tests/test_online_utils.py

+ 2 - 2
misago/users/online/utils.py

@@ -28,7 +28,7 @@ def get_user_status(viewer, user):
 
 
     try:
     try:
         online_tracker = user.online_tracker
         online_tracker = user.online_tracker
-        is_hidden = user.is_hiding_presence and not viewer.acl['can_see_hidden_users']
+        is_hidden = user.is_hiding_presence and not viewer.acl_cache['can_see_hidden_users']
 
 
         if online_tracker and not is_hidden:
         if online_tracker and not is_hidden:
             if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
             if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
@@ -38,7 +38,7 @@ def get_user_status(viewer, user):
         pass
         pass
 
 
     if user_status['is_hidden']:
     if user_status['is_hidden']:
-        if viewer.acl['can_see_hidden_users']:
+        if viewer.acl_cache['can_see_hidden_users']:
             user_status['is_hidden'] = False
             user_status['is_hidden'] = False
             if user_status['is_online']:
             if user_status['is_online']:
                 user_status['is_online_hidden'] = True
                 user_status['is_online_hidden'] = True

+ 36 - 0
misago/users/tests/test_online_utils.py

@@ -0,0 +1,36 @@
+from django.contrib.auth import get_user_model
+
+from misago.acl.testutils import override_acl
+from misago.users.testutils import AuthenticatedUserTestCase
+from misago.users.online.utils import get_user_status
+
+
+UserModel = get_user_model()
+
+
+class GetUserStatusTests(AuthenticatedUserTestCase):
+    def setUp(self):
+        super(GetUserStatusTests, self).setUp()
+        self.other_user = UserModel.objects.create_user('Tyrael', 't123@test.com', 'pass123')
+
+    def test_user_hiding_presence(self):
+        """get_user_status has no showstopper for hidden user"""
+        self.other_user.is_hiding_presence = True
+        self.other_user.save()
+
+        get_user_status(self.user, self.other_user)
+
+    def test_user_visible_hidden_presence(self):
+        """get_user_status has no showstopper forvisible  hidden user"""
+        self.other_user.is_hiding_presence = True
+        self.other_user.save()
+
+        override_acl(self.user, {
+            'can_see_hidden_users': True
+        })
+
+        get_user_status(self.user, self.other_user)
+
+    def test_user_not_hiding_presence(self):
+        """get_user_status has no showstoppers for non-hidden user"""
+        get_user_status(self.user, self.other_user)