|
@@ -1,40 +1,23 @@
|
|
|
from datetime import timedelta
|
|
|
-from json import loads as json_loads
|
|
|
|
|
|
from django.urls import reverse
|
|
|
from django.utils import timezone
|
|
|
from django.utils.encoding import smart_str
|
|
|
-from django.utils.six.moves import range
|
|
|
|
|
|
from misago.acl.testutils import override_acl
|
|
|
from misago.categories.models import Category
|
|
|
from misago.conf import settings
|
|
|
-from misago.core import threadstore
|
|
|
-from misago.core.cache import cache
|
|
|
-from misago.readtracker import categoriestracker, threadstracker
|
|
|
+from misago.readtracker import threadstracker
|
|
|
from misago.threads import testutils
|
|
|
from misago.users.models import AnonymousUser
|
|
|
from misago.users.testutils import AuthenticatedUserTestCase
|
|
|
|
|
|
|
|
|
-LISTS_URLS = (
|
|
|
- '',
|
|
|
- 'my/',
|
|
|
- 'new/',
|
|
|
- 'unread/',
|
|
|
- 'subscribed/',
|
|
|
-)
|
|
|
+LISTS_URLS = ('', 'my/', 'new/', 'unread/', 'subscribed/', )
|
|
|
|
|
|
|
|
|
class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
def setUp(self):
|
|
|
- super(ThreadsListTestCase, self).setUp()
|
|
|
-
|
|
|
- self.api_link = reverse('misago:api:thread-list')
|
|
|
-
|
|
|
- self.root = Category.objects.root_category()
|
|
|
- self.first_category = Category.objects.get(slug='first-category')
|
|
|
-
|
|
|
"""
|
|
|
Create categories tree for test cases:
|
|
|
|
|
@@ -48,16 +31,31 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
Category E
|
|
|
+ Subcategory F
|
|
|
"""
|
|
|
+ super(ThreadsListTestCase, self).setUp()
|
|
|
+
|
|
|
+ self.api_link = reverse('misago:api:thread-list')
|
|
|
+
|
|
|
+ self.root = Category.objects.root_category()
|
|
|
+ self.first_category = Category.objects.get(slug='first-category')
|
|
|
+
|
|
|
Category(
|
|
|
name='Category A',
|
|
|
slug='category-a',
|
|
|
css_class='showing-category-a',
|
|
|
- ).insert_at(self.root, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
Category(
|
|
|
name='Category E',
|
|
|
slug='category-e',
|
|
|
css_class='showing-category-e',
|
|
|
- ).insert_at(self.root, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
|
|
|
self.root = Category.objects.root_category()
|
|
|
|
|
@@ -67,7 +65,11 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
name='Category B',
|
|
|
slug='category-b',
|
|
|
css_class='showing-category-b',
|
|
|
- ).insert_at(self.category_a, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.category_a,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
|
|
|
self.category_b = Category.objects.get(slug='category-b')
|
|
|
|
|
@@ -75,12 +77,20 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
name='Category C',
|
|
|
slug='category-c',
|
|
|
css_class='showing-category-c',
|
|
|
- ).insert_at(self.category_b, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.category_b,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
Category(
|
|
|
name='Category D',
|
|
|
slug='category-d',
|
|
|
css_class='showing-category-d',
|
|
|
- ).insert_at(self.category_b, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.category_b,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
|
|
|
self.category_c = Category.objects.get(slug='category-c')
|
|
|
self.category_d = Category.objects.get(slug='category-d')
|
|
@@ -90,7 +100,11 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
name='Category F',
|
|
|
slug='category-f',
|
|
|
css_class='showing-category-f',
|
|
|
- ).insert_at(self.category_e, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.category_e,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
|
|
|
self.category_f = Category.objects.get(slug='category-f')
|
|
|
|
|
@@ -115,7 +129,7 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
'categories': {},
|
|
|
'visible_categories': [],
|
|
|
'browseable_categories': [],
|
|
|
- 'can_approve_content': []
|
|
|
+ 'can_approve_content': [],
|
|
|
}
|
|
|
|
|
|
# copy first category's acl to other categories to make base for overrides
|
|
@@ -135,7 +149,7 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
'can_see_all_threads': 1,
|
|
|
'can_see_own_threads': 0,
|
|
|
'can_hide_threads': 0,
|
|
|
- 'can_approve_content': 0
|
|
|
+ 'can_approve_content': 0,
|
|
|
})
|
|
|
|
|
|
if category_acl:
|
|
@@ -150,26 +164,17 @@ class ThreadsListTestCase(AuthenticatedUserTestCase):
|
|
|
class ApiTests(ThreadsListTestCase):
|
|
|
def test_root_category(self):
|
|
|
"""its possible to access threads endpoint with category=ROOT_ID"""
|
|
|
- response = self.client.get('%s?category=%s' % (
|
|
|
- self.api_link,
|
|
|
- self.root.pk,
|
|
|
- ))
|
|
|
+ response = self.client.get('%s?category=%s' % (self.api_link, self.root.pk, ))
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
def test_explicit_first_page(self):
|
|
|
"""its possible to access threads endpoint with explicit first page"""
|
|
|
- response = self.client.get('%s?category=%s&page=1' % (
|
|
|
- self.api_link,
|
|
|
- self.root.pk,
|
|
|
- ))
|
|
|
+ response = self.client.get('%s?category=%s&page=1' % (self.api_link, self.root.pk, ))
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
def test_invalid_list_type(self):
|
|
|
"""api returns 404 for invalid list type"""
|
|
|
- response = self.client.get('%s?category=%s&list=nope' % (
|
|
|
- self.api_link,
|
|
|
- self.root.pk,
|
|
|
- ))
|
|
|
+ response = self.client.get('%s?category=%s&list=nope' % (self.api_link, self.root.pk, ))
|
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
|
|
|
|
@@ -195,7 +200,7 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=%s' % (self.api_link, url.strip('/') or 'all'))
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_authenticated_only_views(self):
|
|
@@ -215,11 +220,10 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
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('/') or 'all',
|
|
|
- ))
|
|
|
+ response = self.client.get(
|
|
|
+ '%s?category=%s&list=%s' %
|
|
|
+ (self.api_link, self.category_b.pk, url.strip('/') or 'all', )
|
|
|
+ )
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
self.logout_user()
|
|
@@ -235,11 +239,10 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
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('/') or 'all',
|
|
|
- ))
|
|
|
+ response = self.client.get(
|
|
|
+ '%s?category=%s&list=%s' %
|
|
|
+ (self.api_link, self.category_b.pk, url.strip('/') or 'all', )
|
|
|
+ )
|
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
|
|
def test_list_renders_categories_picker(self):
|
|
@@ -247,7 +250,11 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
Category(
|
|
|
name='Hidden Category',
|
|
|
slug='hidden-category',
|
|
|
- ).insert_at(self.root, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
test_category = Category.objects.get(slug='hidden-category')
|
|
|
|
|
|
testutils.post_thread(
|
|
@@ -257,28 +264,22 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- self.assertContains(response,
|
|
|
- 'subcategory-%s' % self.category_a.css_class)
|
|
|
+ self.assertContains(response, 'subcategory-%s' % self.category_a.css_class)
|
|
|
|
|
|
# readable categories, but non-accessible directly
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_b.css_class)
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_c.css_class)
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_d.css_class)
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_f.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_b.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_c.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_d.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_f.css_class)
|
|
|
|
|
|
# hidden category
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % test_category.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % test_category.css_class)
|
|
|
|
|
|
self.access_all_categories()
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertIn(self.category_a.pk, response_json['subcategories'])
|
|
|
self.assertNotIn(self.category_b.pk, response_json['subcategories'])
|
|
|
|
|
@@ -288,24 +289,19 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get(self.category_a.get_absolute_url())
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- self.assertContains(response,
|
|
|
- 'subcategory-%s' % self.category_b.css_class)
|
|
|
+ self.assertContains(response, 'subcategory-%s' % self.category_b.css_class)
|
|
|
|
|
|
# readable categories, but non-accessible directly
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_c.css_class)
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_d.css_class)
|
|
|
- self.assertNotContains(response,
|
|
|
- 'subcategory-%s' % self.category_f.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_c.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_d.css_class)
|
|
|
+ self.assertNotContains(response, 'subcategory-%s' % self.category_f.css_class)
|
|
|
|
|
|
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(smart_str(response.content))
|
|
|
- self.assertEqual(
|
|
|
- response_json['subcategories'][0], self.category_b.pk)
|
|
|
+ response_json = response.json()
|
|
|
+ self.assertEqual(response_json['subcategories'][0], self.category_b.pk)
|
|
|
|
|
|
def test_display_pinned_threads(self):
|
|
|
"""
|
|
@@ -322,9 +318,7 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
is_pinned=True,
|
|
|
)
|
|
|
|
|
|
- standard = testutils.post_thread(
|
|
|
- category=self.first_category
|
|
|
- )
|
|
|
+ standard = testutils.post_thread(category=self.first_category)
|
|
|
|
|
|
response = self.client.get('/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
@@ -373,21 +367,21 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
def test_noscript_pagination(self):
|
|
|
"""threads list is paginated for users with js disabled"""
|
|
|
+ threads_per_page = settings.MISAGO_THREADS_PER_PAGE
|
|
|
+
|
|
|
threads = []
|
|
|
- for i in range(settings.MISAGO_THREADS_PER_PAGE * 3):
|
|
|
- threads.append(testutils.post_thread(
|
|
|
- category=self.first_category
|
|
|
- ))
|
|
|
+ for _ in range(settings.MISAGO_THREADS_PER_PAGE * 3):
|
|
|
+ threads.append(testutils.post_thread(category=self.first_category))
|
|
|
|
|
|
# secondary page renders
|
|
|
response = self.client.get('/?page=2')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- for thread in threads[:settings.MISAGO_THREADS_PER_PAGE]:
|
|
|
+ for thread in threads[:threads_per_page]:
|
|
|
self.assertNotContains(response, thread.get_absolute_url())
|
|
|
- for thread in threads[settings.MISAGO_THREADS_PER_PAGE:settings.MISAGO_THREADS_PER_PAGE * 2]:
|
|
|
+ for thread in threads[threads_per_page:threads_per_page * 2]:
|
|
|
self.assertContains(response, thread.get_absolute_url())
|
|
|
- for thread in threads[settings.MISAGO_THREADS_PER_PAGE * 2:]:
|
|
|
+ for thread in threads[threads_per_page * 2:]:
|
|
|
self.assertNotContains(response, thread.get_absolute_url())
|
|
|
|
|
|
self.assertNotContains(response, '/?page=1')
|
|
@@ -397,9 +391,9 @@ class AllThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('/?page=3')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- for thread in threads[settings.MISAGO_THREADS_PER_PAGE:]:
|
|
|
+ for thread in threads[threads_per_page:]:
|
|
|
self.assertNotContains(response, thread.get_absolute_url())
|
|
|
- for thread in threads[:settings.MISAGO_THREADS_PER_PAGE]:
|
|
|
+ for thread in threads[:threads_per_page]:
|
|
|
self.assertContains(response, thread.get_absolute_url())
|
|
|
|
|
|
self.assertContains(response, '/?page=2')
|
|
@@ -416,7 +410,11 @@ class CategoryThreadsListTests(ThreadsListTestCase):
|
|
|
Category(
|
|
|
name='Hidden Category',
|
|
|
slug='hidden-category',
|
|
|
- ).insert_at(self.root, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
test_category = Category.objects.get(slug='hidden-category')
|
|
|
|
|
|
for url in LISTS_URLS:
|
|
@@ -431,40 +429,46 @@ class CategoryThreadsListTests(ThreadsListTestCase):
|
|
|
Category(
|
|
|
name='Hidden Category',
|
|
|
slug='hidden-category',
|
|
|
- ).insert_at(self.root, position='last-child', save=True)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
test_category = Category.objects.get(slug='hidden-category')
|
|
|
|
|
|
for url in LISTS_URLS:
|
|
|
- override_acl(self.user, {
|
|
|
- 'visible_categories': [test_category.pk],
|
|
|
- 'browseable_categories': [test_category.pk],
|
|
|
- 'categories': {
|
|
|
- test_category.pk: {
|
|
|
- 'can_see': 1,
|
|
|
- 'can_browse': 0,
|
|
|
- }
|
|
|
+ override_acl(
|
|
|
+ self.user, {
|
|
|
+ 'visible_categories': [test_category.pk],
|
|
|
+ 'browseable_categories': [test_category.pk],
|
|
|
+ 'categories': {
|
|
|
+ test_category.pk: {
|
|
|
+ 'can_see': 1,
|
|
|
+ 'can_browse': 0,
|
|
|
+ },
|
|
|
+ },
|
|
|
}
|
|
|
- });
|
|
|
+ )
|
|
|
|
|
|
response = self.client.get(test_category.get_absolute_url() + url)
|
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
|
|
- override_acl(self.user, {
|
|
|
- 'visible_categories': [test_category.pk],
|
|
|
- 'browseable_categories': [test_category.pk],
|
|
|
- 'categories': {
|
|
|
- test_category.pk: {
|
|
|
- 'can_see': 1,
|
|
|
- 'can_browse': 0,
|
|
|
- }
|
|
|
+ override_acl(
|
|
|
+ self.user, {
|
|
|
+ 'visible_categories': [test_category.pk],
|
|
|
+ 'browseable_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('/'),
|
|
|
- ))
|
|
|
+ response = self.client.get(
|
|
|
+ '%s?category=%s&list=%s' % (self.api_link, test_category.pk, url.strip('/'), )
|
|
|
+ )
|
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
|
|
def test_display_pinned_threads(self):
|
|
@@ -482,9 +486,7 @@ class CategoryThreadsListTests(ThreadsListTestCase):
|
|
|
is_pinned=True,
|
|
|
)
|
|
|
|
|
|
- standard = testutils.post_thread(
|
|
|
- category=self.first_category
|
|
|
- )
|
|
|
+ standard = testutils.post_thread(category=self.first_category)
|
|
|
|
|
|
response = self.client.get(self.first_category.get_absolute_url())
|
|
|
self.assertEqual(response.status_code, 200)
|
|
@@ -544,21 +546,17 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
- self.assertContains(response,
|
|
|
- 'subcategory-%s' % self.category_a.css_class)
|
|
|
- self.assertContains(response,
|
|
|
- 'subcategory-%s' % self.category_e.css_class)
|
|
|
- self.assertContains(response,
|
|
|
- 'thread-category-%s' % self.category_a.css_class)
|
|
|
- self.assertContains(response,
|
|
|
- 'thread-category-%s' % self.category_c.css_class)
|
|
|
+ self.assertContains(response, 'subcategory-%s' % self.category_a.css_class)
|
|
|
+ self.assertContains(response, 'subcategory-%s' % self.category_e.css_class)
|
|
|
+ self.assertContains(response, 'thread-category-%s' % self.category_a.css_class)
|
|
|
+ self.assertContains(response, 'thread-category-%s' % self.category_c.css_class)
|
|
|
|
|
|
# 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
self.assertEqual(len(response_json['subcategories']), 3)
|
|
|
self.assertIn(self.category_a.pk, response_json['subcategories'])
|
|
@@ -571,17 +569,15 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
# thread displays
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
- self.assertNotContains(response,
|
|
|
- 'thread-category-%s' % self.category_b.css_class)
|
|
|
- self.assertContains(response,
|
|
|
- 'thread-category-%s' % self.category_c.css_class)
|
|
|
+ self.assertNotContains(response, 'thread-category-%s' % self.category_b.css_class)
|
|
|
+ self.assertContains(response, 'thread-category-%s' % self.category_c.css_class)
|
|
|
|
|
|
# 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
self.assertEqual(len(response_json['subcategories']), 2)
|
|
|
self.assertEqual(response_json['subcategories'][0], self.category_c.pk)
|
|
@@ -591,33 +587,41 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
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
|
|
|
+ ).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.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, "empty-message")
|
|
|
+ self.assertNotContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
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)
|
|
|
+ ).insert_at(
|
|
|
+ self.root,
|
|
|
+ position='last-child',
|
|
|
+ save=True,
|
|
|
+ )
|
|
|
+
|
|
|
test_category = Category.objects.get(slug='hidden-category')
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
+ testutils.post_thread(
|
|
|
category=test_category,
|
|
|
)
|
|
|
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_user_see_own_unapproved_thread(self):
|
|
@@ -637,7 +641,7 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
|
def test_list_user_cant_see_unapproved_thread(self):
|
|
@@ -656,7 +660,7 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_user_cant_see_hidden_thread(self):
|
|
@@ -675,7 +679,7 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_user_cant_see_own_hidden_thread(self):
|
|
@@ -695,7 +699,7 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_user_can_see_own_hidden_thread(self):
|
|
@@ -706,79 +710,63 @@ class ThreadsVisibilityTests(ThreadsListTestCase):
|
|
|
is_hidden=True,
|
|
|
)
|
|
|
|
|
|
- self.access_all_categories({
|
|
|
- 'can_hide_threads': 1
|
|
|
- })
|
|
|
+ self.access_all_categories({'can_hide_threads': 1})
|
|
|
|
|
|
response = self.client.get('/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
# test api
|
|
|
- self.access_all_categories({
|
|
|
- 'can_hide_threads': 1
|
|
|
- })
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
|
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"""
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
is_hidden=True,
|
|
|
)
|
|
|
|
|
|
- self.access_all_categories({
|
|
|
- 'can_hide_threads': 1
|
|
|
- })
|
|
|
+ self.access_all_categories({'can_hide_threads': 1})
|
|
|
|
|
|
response = self.client.get('/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
# test api
|
|
|
- self.access_all_categories({
|
|
|
- 'can_hide_threads': 1
|
|
|
- })
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
|
def test_list_user_can_see_unapproved_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"""
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
is_unapproved=True,
|
|
|
)
|
|
|
|
|
|
- self.access_all_categories({
|
|
|
- 'can_approve_content': 1
|
|
|
- })
|
|
|
+ self.access_all_categories({'can_approve_content': 1})
|
|
|
|
|
|
response = self.client.get('/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
# test api
|
|
|
- self.access_all_categories({
|
|
|
- 'can_approve_content': 1
|
|
|
- })
|
|
|
+ self.access_all_categories({'can_approve_content': 1})
|
|
|
|
|
|
response = self.client.get(self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
|
|
|
@@ -802,13 +790,13 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=my' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_renders_test_thread(self):
|
|
@@ -818,9 +806,7 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
|
poster=self.user,
|
|
|
)
|
|
|
|
|
|
- other_thread = testutils.post_thread(
|
|
|
- category=self.category_a,
|
|
|
- )
|
|
|
+ other_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
self.access_all_categories()
|
|
|
|
|
@@ -841,7 +827,7 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=my' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -849,7 +835,7 @@ class MyThreadsListTests(ThreadsListTestCase):
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -874,20 +860,18 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_renders_new_thread(self):
|
|
|
"""list renders new thread"""
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a,
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
self.access_all_categories()
|
|
|
|
|
@@ -906,7 +890,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -914,7 +898,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -925,11 +909,12 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=self.user.joined_on - timedelta(days=2)
|
|
|
+ started_on=self.user.joined_on - timedelta(days=2),
|
|
|
)
|
|
|
|
|
|
- testutils.reply_thread(test_thread,
|
|
|
- posted_on=self.user.joined_on + timedelta(days=4)
|
|
|
+ testutils.reply_thread(
|
|
|
+ test_thread,
|
|
|
+ posted_on=self.user.joined_on + timedelta(days=4),
|
|
|
)
|
|
|
|
|
|
self.access_all_categories()
|
|
@@ -949,7 +934,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -957,7 +942,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -968,9 +953,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=timezone.now() - timedelta(
|
|
|
- days=settings.MISAGO_READTRACKER_CUTOFF + 1
|
|
|
- )
|
|
|
+ started_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF + 1),
|
|
|
)
|
|
|
|
|
|
self.access_all_categories()
|
|
@@ -990,14 +973,14 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
@@ -1007,7 +990,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=self.user.joined_on - timedelta(minutes=1)
|
|
|
+ started_on=self.user.joined_on - timedelta(minutes=1),
|
|
|
)
|
|
|
|
|
|
self.access_all_categories()
|
|
@@ -1027,14 +1010,14 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_user_read_thread(self):
|
|
@@ -1042,9 +1025,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
self.user.joined_on = timezone.now() - timedelta(days=5)
|
|
|
self.user.save()
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
|
threadstracker.read_thread(self.user, test_thread, test_thread.last_post)
|
|
@@ -1066,14 +1047,14 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_category_read_thread(self):
|
|
@@ -1081,9 +1062,7 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
self.user.joined_on = timezone.now() - timedelta(days=5)
|
|
|
self.user.save()
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
self.user.categoryread_set.create(
|
|
|
category=self.category_a,
|
|
@@ -1107,14 +1086,14 @@ class NewThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=new' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
|
|
@@ -1138,14 +1117,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_renders_unread_thread(self):
|
|
@@ -1153,9 +1134,7 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
self.user.joined_on = timezone.now() - timedelta(days=5)
|
|
|
self.user.save()
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
|
threadstracker.read_thread(self.user, test_thread, test_thread.last_post)
|
|
@@ -1179,15 +1158,17 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertEqual(response_json['results'][0]['id'], test_thread.pk)
|
|
|
|
|
@@ -1196,9 +1177,7 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
self.user.joined_on = timezone.now() - timedelta(days=5)
|
|
|
self.user.save()
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
self.access_all_categories()
|
|
|
|
|
@@ -1217,14 +1196,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_read_thread(self):
|
|
@@ -1232,9 +1213,7 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
self.user.joined_on = timezone.now() - timedelta(days=5)
|
|
|
self.user.save()
|
|
|
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
|
threadstracker.read_thread(self.user, test_thread, test_thread.last_post)
|
|
@@ -1256,14 +1235,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_global_cutoff_thread(self):
|
|
@@ -1273,9 +1254,7 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=timezone.now() - timedelta(
|
|
|
- days=settings.MISAGO_READTRACKER_CUTOFF + 5
|
|
|
- )
|
|
|
+ started_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF + 5),
|
|
|
)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
@@ -1300,14 +1279,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_user_cutoff_thread(self):
|
|
@@ -1317,13 +1298,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=self.user.joined_on - timedelta(days=2)
|
|
|
+ started_on=self.user.joined_on - timedelta(days=2),
|
|
|
)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
|
threadstracker.read_thread(self.user, test_thread, test_thread.last_post)
|
|
|
|
|
|
- testutils.reply_thread(test_thread, posted_on=test_thread.started_on + timedelta(days=1))
|
|
|
+ testutils.reply_thread(
|
|
|
+ test_thread,
|
|
|
+ posted_on=test_thread.started_on + timedelta(days=1),
|
|
|
+ )
|
|
|
|
|
|
self.access_all_categories()
|
|
|
|
|
@@ -1342,14 +1326,16 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
def test_list_hides_category_cutoff_thread(self):
|
|
@@ -1359,12 +1345,11 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
|
|
|
test_thread = testutils.post_thread(
|
|
|
category=self.category_a,
|
|
|
- started_on=self.user.joined_on - timedelta(days=2)
|
|
|
+ started_on=self.user.joined_on - timedelta(days=2),
|
|
|
)
|
|
|
|
|
|
threadstracker.make_thread_read_aware(self.user, test_thread)
|
|
|
- threadstracker.read_thread(
|
|
|
- self.user, test_thread, test_thread.last_post)
|
|
|
+ threadstracker.read_thread(self.user, test_thread, test_thread.last_post)
|
|
|
|
|
|
testutils.reply_thread(test_thread)
|
|
|
|
|
@@ -1390,23 +1375,23 @@ class UnreadThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=unread' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
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))
|
|
|
+ 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(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
|
|
|
|
|
|
class SubscribedThreadsListTests(ThreadsListTestCase):
|
|
|
def test_list_shows_subscribed_thread(self):
|
|
|
"""list shows subscribed thread"""
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
self.user.subscription_set.create(
|
|
|
thread=test_thread,
|
|
|
category=self.category_a,
|
|
@@ -1430,23 +1415,23 @@ class SubscribedThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=subscribed' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
self.access_all_categories()
|
|
|
- response = self.client.get('%s?list=subscribed&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
+ response = self.client.get(
|
|
|
+ '%s?list=subscribed&category=%s' % (self.api_link, self.category_a.pk)
|
|
|
+ )
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 1)
|
|
|
self.assertContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
def test_list_hides_unsubscribed_thread(self):
|
|
|
"""list shows subscribed thread"""
|
|
|
- test_thread = testutils.post_thread(
|
|
|
- category=self.category_a
|
|
|
- )
|
|
|
+ test_thread = testutils.post_thread(category=self.category_a)
|
|
|
|
|
|
self.access_all_categories()
|
|
|
|
|
@@ -1465,15 +1450,17 @@ class SubscribedThreadsListTests(ThreadsListTestCase):
|
|
|
response = self.client.get('%s?list=subscribed' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
self.assertNotContains(response, test_thread.get_absolute_url())
|
|
|
|
|
|
self.access_all_categories()
|
|
|
- response = self.client.get('%s?list=subscribed&category=%s' % (self.api_link, self.category_a.pk))
|
|
|
+ response = self.client.get(
|
|
|
+ '%s?list=subscribed&category=%s' % (self.api_link, self.category_a.pk)
|
|
|
+ )
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
- response_json = json_loads(smart_str(response.content))
|
|
|
+ response_json = response.json()
|
|
|
self.assertEqual(len(response_json['results']), 0)
|
|
|
self.assertNotContains(response, test_thread.get_absolute_url())
|
|
|
|
|
@@ -1482,8 +1469,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
def test_list_errors_without_permission(self):
|
|
|
"""list errors if user has no permission to access it"""
|
|
|
TEST_URLS = (
|
|
|
- '/unapproved/',
|
|
|
- self.category_a.get_absolute_url() + 'unapproved/',
|
|
|
+ '/unapproved/', self.category_a.get_absolute_url() + 'unapproved/',
|
|
|
'%s?list=unapproved' % self.api_link,
|
|
|
)
|
|
|
|
|
@@ -1494,9 +1480,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
|
|
|
# approval perm has no influence on visibility
|
|
|
for test_url in TEST_URLS:
|
|
|
- self.access_all_categories({
|
|
|
- 'can_approve_content': True
|
|
|
- })
|
|
|
+ self.access_all_categories({'can_approve_content': True})
|
|
|
|
|
|
self.access_all_categories()
|
|
|
response = self.client.get(test_url)
|
|
@@ -1505,7 +1489,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
# approval perm has no influence on visibility
|
|
|
for test_url in TEST_URLS:
|
|
|
self.access_all_categories(base_acl={
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
|
|
|
self.access_all_categories()
|
|
@@ -1525,10 +1509,11 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
)
|
|
|
|
|
|
self.access_all_categories({
|
|
|
- 'can_approve_content': True
|
|
|
+ 'can_approve_content': True,
|
|
|
}, {
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
+
|
|
|
response = self.client.get('/unapproved/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, visible_thread.get_absolute_url())
|
|
@@ -1537,8 +1522,9 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
self.access_all_categories({
|
|
|
'can_approve_content': True
|
|
|
}, {
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
+
|
|
|
response = self.client.get(self.category_a.get_absolute_url() + 'unapproved/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, visible_thread.get_absolute_url())
|
|
@@ -1548,17 +1534,16 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
self.access_all_categories({
|
|
|
'can_approve_content': True
|
|
|
}, {
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
+
|
|
|
response = self.client.get('%s?list=unapproved' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
self.assertContains(response, visible_thread.get_absolute_url())
|
|
|
self.assertNotContains(response, hidden_thread.get_absolute_url())
|
|
|
|
|
|
def test_list_shows_owned_threads_for_unapproving_user(self):
|
|
|
- """
|
|
|
- list shows owned threads with unapproved posts for user without perm
|
|
|
- """
|
|
|
+ """list shows owned threads with unapproved posts for user without perm"""
|
|
|
visible_thread = testutils.post_thread(
|
|
|
poster=self.user,
|
|
|
category=self.category_b,
|
|
@@ -1571,7 +1556,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
)
|
|
|
|
|
|
self.access_all_categories(base_acl={
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
response = self.client.get('/unapproved/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
@@ -1579,7 +1564,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
self.assertNotContains(response, hidden_thread.get_absolute_url())
|
|
|
|
|
|
self.access_all_categories(base_acl={
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
response = self.client.get(self.category_a.get_absolute_url() + 'unapproved/')
|
|
|
self.assertEqual(response.status_code, 200)
|
|
@@ -1588,7 +1573,7 @@ class UnapprovedListTests(ThreadsListTestCase):
|
|
|
|
|
|
# test api
|
|
|
self.access_all_categories(base_acl={
|
|
|
- 'can_see_unapproved_content_lists': True
|
|
|
+ 'can_see_unapproved_content_lists': True,
|
|
|
})
|
|
|
response = self.client.get('%s?list=unapproved' % self.api_link)
|
|
|
self.assertEqual(response.status_code, 200)
|
|
@@ -1604,9 +1589,7 @@ class OwnerOnlyThreadsVisibilityTests(AuthenticatedUserTestCase):
|
|
|
|
|
|
def override_acl(self, user):
|
|
|
category_acl = user.acl_cache['categories'][self.category.pk].copy()
|
|
|
- category_acl.update({
|
|
|
- 'can_see_all_threads': 0
|
|
|
- })
|
|
|
+ category_acl.update({'can_see_all_threads': 0})
|
|
|
user.acl_cache['categories'][self.category.pk] = category_acl
|
|
|
|
|
|
override_acl(user, user.acl_cache)
|