|
@@ -1,4 +1,5 @@
|
|
from datetime import timedelta
|
|
from datetime import timedelta
|
|
|
|
+from json import loads as json_loads
|
|
|
|
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
from django.utils import timezone
|
|
from django.utils import timezone
|
|
@@ -26,6 +27,8 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
def setUp(self):
|
|
def setUp(self):
|
|
super(ThreadsListTestCase, self).setUp()
|
|
super(ThreadsListTestCase, self).setUp()
|
|
|
|
|
|
|
|
+ self.api_link = '/api/threads/'
|
|
|
|
+
|
|
cache.clear()
|
|
cache.clear()
|
|
threadstore.clear()
|
|
threadstore.clear()
|
|
|
|
|
|
@@ -133,6 +136,15 @@ class ListsTests(ThreadsListTestCase):
|
|
self.assertIn(self.category_b.name, response.content)
|
|
self.assertIn(self.category_b.name, response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=%s' % (self.api_link, url.strip('/')))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_authenticated_only_views(self):
|
|
def test_list_authenticated_only_views(self):
|
|
"""authenticated only views return 403 for guests"""
|
|
"""authenticated only views return 403 for guests"""
|
|
for url in LISTS_URLS:
|
|
for url in LISTS_URLS:
|
|
@@ -147,6 +159,16 @@ class ListsTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(self.category_b.name, response.content)
|
|
self.assertIn(self.category_b.name, response.content)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?category=%s&list=%s' % (
|
|
|
|
+ self.api_link,
|
|
|
|
+ self.category_b.pk,
|
|
|
|
+ url.strip('/'),
|
|
|
|
+ ))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
self.logout_user()
|
|
self.logout_user()
|
|
self.user = self.get_anonymous_user()
|
|
self.user = self.get_anonymous_user()
|
|
for url in LISTS_URLS[1:]:
|
|
for url in LISTS_URLS[1:]:
|
|
@@ -159,6 +181,14 @@ class ListsTests(ThreadsListTestCase):
|
|
response = self.client.get(self.category_b.get_absolute_url() + url)
|
|
response = self.client.get(self.category_b.get_absolute_url() + url)
|
|
self.assertEqual(response.status_code, 403)
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?category=%s&list=%s' % (
|
|
|
|
+ self.api_link,
|
|
|
|
+ self.category_b.pk,
|
|
|
|
+ url.strip('/'),
|
|
|
|
+ ))
|
|
|
|
+ self.assertEqual(response.status_code, 403)
|
|
|
|
+
|
|
def test_empty_list_hides_categories_picker(self):
|
|
def test_empty_list_hides_categories_picker(self):
|
|
"""categories picker is hidden on empty list"""
|
|
"""categories picker is hidden on empty list"""
|
|
Category(
|
|
Category(
|
|
@@ -183,6 +213,13 @@ class ListsTests(ThreadsListTestCase):
|
|
self.assertNotIn(
|
|
self.assertNotIn(
|
|
'subcategory-%s' % self.category_b.css_class, response.content)
|
|
'subcategory-%s' % self.category_b.css_class, response.content)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['subcategories']), 0)
|
|
|
|
+
|
|
def test_list_renders_categories_picker(self):
|
|
def test_list_renders_categories_picker(self):
|
|
"""categories picker renders valid categories"""
|
|
"""categories picker renders valid categories"""
|
|
Category(
|
|
Category(
|
|
@@ -215,6 +252,14 @@ class ListsTests(ThreadsListTestCase):
|
|
self.assertNotIn(
|
|
self.assertNotIn(
|
|
'subcategory-%s' % test_category.css_class, response.content)
|
|
'subcategory-%s' % test_category.css_class, response.content)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(
|
|
|
|
+ response_json['subcategories'][0]['id'], self.category_a.pk)
|
|
|
|
+
|
|
# test category view
|
|
# test category view
|
|
self.access_all_categories()
|
|
self.access_all_categories()
|
|
|
|
|
|
@@ -232,6 +277,15 @@ class ListsTests(ThreadsListTestCase):
|
|
self.assertNotIn(
|
|
self.assertNotIn(
|
|
'subcategory-%s' % self.category_f.css_class, response.content)
|
|
'subcategory-%s' % self.category_f.css_class, response.content)
|
|
|
|
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(
|
|
|
|
+ response_json['subcategories'][0]['id'], self.category_b.pk)
|
|
|
|
+
|
|
|
|
|
|
class CategoryThreadsListTests(ThreadsListTestCase):
|
|
class CategoryThreadsListTests(ThreadsListTestCase):
|
|
def test_access_hidden_category(self):
|
|
def test_access_hidden_category(self):
|
|
@@ -246,6 +300,10 @@ class CategoryThreadsListTests(ThreadsListTestCase):
|
|
response = self.client.get(test_category.get_absolute_url() + url)
|
|
response = self.client.get(test_category.get_absolute_url() + url)
|
|
self.assertEqual(response.status_code, 404)
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?category=%s' % (self.api_link, test_category.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 404)
|
|
|
|
+
|
|
def test_access_protected_category(self):
|
|
def test_access_protected_category(self):
|
|
"""protected category returns 403"""
|
|
"""protected category returns 403"""
|
|
Category(
|
|
Category(
|
|
@@ -268,6 +326,23 @@ class CategoryThreadsListTests(ThreadsListTestCase):
|
|
response = self.client.get(test_category.get_absolute_url() + url)
|
|
response = self.client.get(test_category.get_absolute_url() + url)
|
|
self.assertEqual(response.status_code, 403)
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
|
|
|
|
+ override_acl(self.user, {
|
|
|
|
+ 'visible_categories': [test_category.pk],
|
|
|
|
+ 'categories': {
|
|
|
|
+ test_category.pk: {
|
|
|
|
+ 'can_see': 1,
|
|
|
|
+ 'can_browse': 0,
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ response = self.client.get('%s?category=%s&list=%s' % (
|
|
|
|
+ self.api_link,
|
|
|
|
+ test_category.pk,
|
|
|
|
+ url.strip('/'),
|
|
|
|
+ ))
|
|
|
|
+ self.assertEqual(response.status_code, 403)
|
|
|
|
+
|
|
|
|
|
|
class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
def test_list_renders_test_thread(self):
|
|
def test_list_renders_test_thread(self):
|
|
@@ -292,6 +367,17 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertNotIn(
|
|
self.assertNotIn(
|
|
'subcategory-%s' % self.category_e.css_class, response.content)
|
|
'subcategory-%s' % self.category_e.css_class, response.content)
|
|
|
|
|
|
|
|
+ # api displays same data
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+ self.assertEqual(len(response_json['subcategories']), 1)
|
|
|
|
+ self.assertEqual(
|
|
|
|
+ response_json['subcategories'][0]['id'], self.category_a.pk)
|
|
|
|
+
|
|
# test category view
|
|
# test category view
|
|
self.access_all_categories()
|
|
self.access_all_categories()
|
|
response = self.client.get(self.category_b.get_absolute_url())
|
|
response = self.client.get(self.category_b.get_absolute_url())
|
|
@@ -305,13 +391,25 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertIn(
|
|
self.assertIn(
|
|
'thread-category-%s' % self.category_c.css_class, response.content)
|
|
'thread-category-%s' % self.category_c.css_class, response.content)
|
|
|
|
|
|
- # category picker was update
|
|
|
|
|
|
+ # category picker was changed
|
|
self.assertIn(
|
|
self.assertIn(
|
|
'subcategory-%s' % self.category_c.css_class, response.content)
|
|
'subcategory-%s' % self.category_c.css_class, response.content)
|
|
self.assertNotIn(
|
|
self.assertNotIn(
|
|
'subcategory-%s' % self.category_d.css_class, response.content)
|
|
'subcategory-%s' % self.category_d.css_class, response.content)
|
|
|
|
|
|
- def test_list_renders_hidden_thread(self):
|
|
|
|
|
|
+ # api displays same data
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?category=%s' % (self.api_link, self.category_b.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+ self.assertEqual(len(response_json['subcategories']), 1)
|
|
|
|
+ self.assertEqual(
|
|
|
|
+ response_json['subcategories'][0]['id'], self.category_c.pk)
|
|
|
|
+
|
|
|
|
+ def test_list_hides_hidden_thread(self):
|
|
"""list renders empty due to no permission to see thread"""
|
|
"""list renders empty due to no permission to see thread"""
|
|
Category(
|
|
Category(
|
|
name='Hidden Category',
|
|
name='Hidden Category',
|
|
@@ -327,6 +425,24 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("empty-message", response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
|
|
|
|
|
|
+ def test_api_hides_hidden_thread(self):
|
|
|
|
+ """api returns empty due to no permission to see thread"""
|
|
|
|
+ Category(
|
|
|
|
+ name='Hidden Category',
|
|
|
|
+ slug='hidden-category',
|
|
|
|
+ ).insert_at(self.root, position='last-child', save=True)
|
|
|
|
+ test_category = Category.objects.get(slug='hidden-category')
|
|
|
|
+
|
|
|
|
+ test_thread = testutils.post_thread(
|
|
|
|
+ category=test_category,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_user_see_own_moderated_thread(self):
|
|
def test_list_user_see_own_moderated_thread(self):
|
|
"""list renders moderated thread that belongs to viewer"""
|
|
"""list renders moderated thread that belongs to viewer"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -339,6 +455,14 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_user_cant_see_moderated_thread(self):
|
|
def test_list_user_cant_see_moderated_thread(self):
|
|
"""list hides moderated thread that belongs to other user"""
|
|
"""list hides moderated thread that belongs to other user"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -350,6 +474,14 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_user_cant_see_hidden_thread(self):
|
|
def test_list_user_cant_see_hidden_thread(self):
|
|
"""list hides hidden thread that belongs to other user"""
|
|
"""list hides hidden thread that belongs to other user"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -361,6 +493,14 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_user_cant_see_own_hidden_thread(self):
|
|
def test_list_user_cant_see_own_hidden_thread(self):
|
|
"""list hides hidden thread that belongs to viewer"""
|
|
"""list hides hidden thread that belongs to viewer"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -373,6 +513,14 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_user_can_see_own_hidden_thread(self):
|
|
def test_list_user_can_see_own_hidden_thread(self):
|
|
"""list shows hidden thread that belongs to viewer due to permission"""
|
|
"""list shows hidden thread that belongs to viewer due to permission"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -389,6 +537,17 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories({
|
|
|
|
+ 'can_hide_threads': 1
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_user_can_see_hidden_thread(self):
|
|
def test_list_user_can_see_hidden_thread(self):
|
|
"""
|
|
"""
|
|
list shows hidden thread that belongs to other user due to permission
|
|
list shows hidden thread that belongs to other user due to permission
|
|
@@ -406,6 +565,17 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories({
|
|
|
|
+ 'can_hide_threads': 1
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_user_can_see_moderated_thread(self):
|
|
def test_list_user_can_see_moderated_thread(self):
|
|
"""
|
|
"""
|
|
list shows hidden thread that belongs to other user due to permission
|
|
list shows hidden thread that belongs to other user due to permission
|
|
@@ -423,6 +593,17 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories({
|
|
|
|
+ 'can_review_moderated_content': 1
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ response = self.client.get(self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
|
|
class MyThreadsListTests(ThreadsListTestCase):
|
|
class MyThreadsListTests(ThreadsListTestCase):
|
|
def test_list_renders_empty(self):
|
|
def test_list_renders_empty(self):
|
|
@@ -439,6 +620,21 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("empty-message", response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=my' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=my&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_renders_test_thread(self):
|
|
def test_list_renders_test_thread(self):
|
|
"""list renders only threads posted by user"""
|
|
"""list renders only threads posted by user"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -464,6 +660,24 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(other_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(other_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=my' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=my&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
|
|
class NewThreadsListTests(ThreadsListTestCase):
|
|
class NewThreadsListTests(ThreadsListTestCase):
|
|
def test_list_renders_empty(self):
|
|
def test_list_renders_empty(self):
|
|
@@ -480,6 +694,21 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("empty-message", response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_renders_new_thread(self):
|
|
def test_list_renders_new_thread(self):
|
|
"""list renders new thread"""
|
|
"""list renders new thread"""
|
|
test_thread = testutils.post_thread(
|
|
test_thread = testutils.post_thread(
|
|
@@ -498,6 +727,24 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_renders_thread_bumped_after_user_cutoff(self):
|
|
def test_list_renders_thread_bumped_after_user_cutoff(self):
|
|
"""list renders new thread bumped after user cutoff"""
|
|
"""list renders new thread bumped after user cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
@@ -526,6 +773,24 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_hides_global_cutoff_thread(self):
|
|
def test_list_hides_global_cutoff_thread(self):
|
|
"""list hides thread started before global cutoff"""
|
|
"""list hides thread started before global cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
@@ -551,6 +816,22 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
"""list hides thread started before users cutoff"""
|
|
"""list hides thread started before users cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -574,6 +855,22 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_user_read_thread(self):
|
|
def test_list_hides_user_read_thread(self):
|
|
"""list hides thread already read by user"""
|
|
"""list hides thread already read by user"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -600,6 +897,22 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_category_read_thread(self):
|
|
def test_list_hides_category_read_thread(self):
|
|
"""list hides thread already read by user"""
|
|
"""list hides thread already read by user"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -627,6 +940,22 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=new' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=new&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
|
|
class UnreadThreadsListTests(ThreadsListTestCase):
|
|
class UnreadThreadsListTests(ThreadsListTestCase):
|
|
def test_list_renders_empty(self):
|
|
def test_list_renders_empty(self):
|
|
@@ -644,6 +973,22 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("empty-message", response.content)
|
|
self.assertIn("empty-message", response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_renders_unread_thread(self):
|
|
def test_list_renders_unread_thread(self):
|
|
"""list renders thread with unread posts"""
|
|
"""list renders thread with unread posts"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -673,6 +1018,24 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 1)
|
|
|
|
+ self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
+
|
|
def test_list_hides_never_read_thread(self):
|
|
def test_list_hides_never_read_thread(self):
|
|
"""list hides never read thread"""
|
|
"""list hides never read thread"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -696,6 +1059,22 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_read_thread(self):
|
|
def test_list_hides_read_thread(self):
|
|
"""list hides read thread"""
|
|
"""list hides read thread"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=5)
|
|
@@ -723,6 +1102,22 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_global_cutoff_thread(self):
|
|
def test_list_hides_global_cutoff_thread(self):
|
|
"""list hides thread replied before global cutoff"""
|
|
"""list hides thread replied before global cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
@@ -757,6 +1152,22 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
"""list hides thread replied before user cutoff"""
|
|
"""list hides thread replied before user cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
@@ -789,6 +1200,22 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
def test_list_hides_category_cutoff_thread(self):
|
|
def test_list_hides_category_cutoff_thread(self):
|
|
"""list hides thread replied before category cutoff"""
|
|
"""list hides thread replied before category cutoff"""
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
self.user.reads_cutoff = timezone.now() - timedelta(days=10)
|
|
@@ -822,4 +1249,20 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
response = self.client.get(
|
|
response = self.client.get(
|
|
self.category_a.get_absolute_url() + 'unread/')
|
|
self.category_a.get_absolute_url() + 'unread/')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.status_code, 200)
|
|
- self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
|
|
+ self.assertNotIn(test_thread.get_absolute_url(), response.content)
|
|
|
|
+
|
|
|
|
+ # test api
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|
|
|
|
+
|
|
|
|
+ self.access_all_categories()
|
|
|
|
+ response = self.client.get(
|
|
|
|
+ '%s?list=unread&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
|
+ self.assertEqual(response.status_code, 200)
|
|
|
|
+
|
|
|
|
+ response_json = json_loads(response.content)
|
|
|
|
+ self.assertEqual(len(response_json['results']), 0)
|