Browse Source

test pinned threads display order

Rafał Pitoń 9 years ago
parent
commit
94e1dd7034
1 changed files with 122 additions and 1 deletions
  1. 122 1
      misago/threads/tests/test_threadslists.py

+ 122 - 1
misago/threads/tests/test_threadslists.py

@@ -119,7 +119,7 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
         return categories_acl
         return categories_acl
 
 
 
 
-class ListsTests(ThreadsListTestCase):
+class AllThreadsListTests(ThreadsListTestCase):
     def test_list_renders_empty(self):
     def test_list_renders_empty(self):
         """empty threads list renders"""
         """empty threads list renders"""
         for url in LISTS_URLS:
         for url in LISTS_URLS:
@@ -286,6 +286,66 @@ class ListsTests(ThreadsListTestCase):
         self.assertEqual(
         self.assertEqual(
             response_json['subcategories'][0], self.category_b.pk)
             response_json['subcategories'][0], self.category_b.pk)
 
 
+    def test_display_pinned_threads(self):
+        """
+        threads list displays globally pinned threads first
+        and locally ones inbetween other
+        """
+        globally = testutils.post_thread(
+            category=self.first_category,
+            is_global=True,
+        )
+
+        locally = testutils.post_thread(
+            category=self.first_category,
+            is_pinned=True,
+        )
+
+        standard = testutils.post_thread(category=self.first_category)
+
+        response = self.client.get('/')
+        self.assertEqual(response.status_code, 200)
+
+        positions = {
+            'g': response.content.find(globally.get_absolute_url()),
+            'l': response.content.find(locally.get_absolute_url()),
+            's': response.content.find(standard.get_absolute_url()),
+        }
+
+        # global announcement before others
+        self.assertTrue(positions['g'] < positions['l'])
+        self.assertTrue(positions['g'] < positions['s'])
+
+        # standard in the middle
+        self.assertTrue(positions['s'] < positions['l'])
+        self.assertTrue(positions['s'] > positions['g'])
+
+        # pinned last
+        self.assertTrue(positions['l'] > positions['g'])
+        self.assertTrue(positions['l'] > positions['s'])
+
+        # API behaviour is identic
+        response = self.client.get('/api/threads/')
+        self.assertEqual(response.status_code, 200)
+
+        positions = {
+            'g': response.content.find(globally.get_absolute_url()),
+            'l': response.content.find(locally.get_absolute_url()),
+            's': response.content.find(standard.get_absolute_url()),
+        }
+
+        # global announcement before others
+        self.assertTrue(positions['g'] < positions['l'])
+        self.assertTrue(positions['g'] < positions['s'])
+
+        # standard in the middle
+        self.assertTrue(positions['s'] < positions['l'])
+        self.assertTrue(positions['s'] > positions['g'])
+
+        # pinned last
+        self.assertTrue(positions['l'] > positions['g'])
+        self.assertTrue(positions['l'] > positions['s'])
+
 
 
 class CategoryThreadsListTests(ThreadsListTestCase):
 class CategoryThreadsListTests(ThreadsListTestCase):
     def test_access_hidden_category(self):
     def test_access_hidden_category(self):
@@ -343,6 +403,67 @@ class CategoryThreadsListTests(ThreadsListTestCase):
             ))
             ))
             self.assertEqual(response.status_code, 403)
             self.assertEqual(response.status_code, 403)
 
 
+    def test_display_pinned_threads(self):
+        """
+        category threads list displays globally pinned threads first
+        then locally ones and unpinned last
+        """
+        globally = testutils.post_thread(
+            category=self.first_category,
+            is_global=True,
+        )
+
+        locally = testutils.post_thread(
+            category=self.first_category,
+            is_pinned=True,
+        )
+
+        standard = testutils.post_thread(category=self.first_category)
+
+        response = self.client.get(self.first_category.get_absolute_url())
+        self.assertEqual(response.status_code, 200)
+
+        positions = {
+            'g': response.content.find(globally.get_absolute_url()),
+            'l': response.content.find(locally.get_absolute_url()),
+            's': response.content.find(standard.get_absolute_url()),
+        }
+
+        # global announcement before others
+        self.assertTrue(positions['g'] < positions['l'])
+        self.assertTrue(positions['g'] < positions['s'])
+
+        # pinned in the middle
+        self.assertTrue(positions['l'] < positions['s'])
+        self.assertTrue(positions['l'] > positions['g'])
+
+        # standard last
+        self.assertTrue(positions['s'] > positions['g'])
+        self.assertTrue(positions['s'] > positions['g'])
+
+        # API behaviour is identic
+        response = self.client.get(
+            '/api/threads/?category=%s' % self.first_category.pk)
+        self.assertEqual(response.status_code, 200)
+
+        positions = {
+            'g': response.content.find(globally.get_absolute_url()),
+            'l': response.content.find(locally.get_absolute_url()),
+            's': response.content.find(standard.get_absolute_url()),
+        }
+
+        # global announcement before others
+        self.assertTrue(positions['g'] < positions['l'])
+        self.assertTrue(positions['g'] < positions['s'])
+
+        # pinned in the middle
+        self.assertTrue(positions['l'] < positions['s'])
+        self.assertTrue(positions['l'] > positions['g'])
+
+        # standard last
+        self.assertTrue(positions['s'] > positions['g'])
+        self.assertTrue(positions['s'] > positions['g'])
+
 
 
 class ThreadsVisibilityTests(ThreadsListTestCase):
 class ThreadsVisibilityTests(ThreadsListTestCase):
     def test_list_renders_test_thread(self):
     def test_list_renders_test_thread(self):