test_forums_views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from django.core.urlresolvers import reverse
  2. from misago.acl.testutils import override_acl
  3. from misago.admin.testutils import AdminTestCase
  4. from misago.forums.lists import get_forums_list
  5. from misago.forums.models import Forum
  6. class ForumViewsTests(AdminTestCase):
  7. def test_index(self):
  8. """index contains forums list"""
  9. response = self.client.get(reverse('misago:index'))
  10. for node in get_forums_list(self.test_admin):
  11. self.assertIn(node.name, response.content)
  12. if node.level > 1:
  13. self.assertIn(node.get_absolute_url(), response.content)
  14. def test_index_no_perms(self):
  15. """index contains no visible forums"""
  16. override_acl(self.test_admin, {'visible_forums': []})
  17. response = self.client.get(reverse('misago:index'))
  18. for node in get_forums_list(self.test_admin):
  19. self.assertNotIn(node.name, response.content)
  20. if node.level > 1:
  21. self.assertNotIn(node.get_absolute_url(), response.content)
  22. class CategoryViewsTests(AdminTestCase):
  23. def setUp(self):
  24. super(CategoryViewsTests, self).setUp()
  25. categories_qs = Forum.objects.all_forums().filter(role='category')
  26. master_category = categories_qs[:1][0]
  27. self.category = Forum(role='category',
  28. name='Test category',
  29. slug='test-category')
  30. self.category.insert_at(master_category, save=True)
  31. def test_cant_see_category(self):
  32. """can't see category"""
  33. override_acl(self.test_admin, {'visible_forums': []})
  34. response = self.client.get(self.category.get_absolute_url())
  35. self.assertEqual(response.status_code, 404)
  36. def test_cant_browse_category(self):
  37. """can't see category"""
  38. override_acl(self.test_admin, {
  39. 'visible_forums': [self.category.parent_id, self.category.pk],
  40. 'forums': {
  41. self.category.parent_id: {'can_see': 1, 'can_browse': 1},
  42. self.category.pk: {'can_see': 1, 'can_browse': 0},
  43. }
  44. })
  45. response = self.client.get(self.category.get_absolute_url())
  46. self.assertEqual(response.status_code, 403)
  47. def test_can_browse_category(self):
  48. """can see category contents"""
  49. override_acl(self.test_admin, {
  50. 'visible_forums': [self.category.parent_id, self.category.pk],
  51. 'forums': {
  52. self.category.parent_id: {'can_see': 1, 'can_browse': 1},
  53. self.category.pk: {'can_see': 1, 'can_browse': 1},
  54. }
  55. })
  56. response = self.client.get(self.category.get_absolute_url())
  57. self.assertEqual(response.status_code, 200)
  58. class RedirectViewsTests(AdminTestCase):
  59. def setUp(self):
  60. super(RedirectViewsTests, self).setUp()
  61. redirects_qs = Forum.objects.all_forums().filter(role='redirect')
  62. self.redirect = redirects_qs[:1][0]
  63. def test_cant_see_redirect(self):
  64. """can't see redirect"""
  65. override_acl(self.test_admin, {'visible_forums': []})
  66. response = self.client.get(self.redirect.get_absolute_url())
  67. self.assertEqual(response.status_code, 404)
  68. def test_can_follow_redirect(self):
  69. """can see redirect"""
  70. override_acl(self.test_admin, {
  71. 'visible_forums': [self.redirect.parent_id, self.redirect.pk],
  72. 'forums': {
  73. self.redirect.parent_id: {'can_see': 1, 'can_browse': 1},
  74. self.redirect.pk: {'can_see': 1, 'can_browse': 1},
  75. }
  76. })
  77. response = self.client.get(self.redirect.get_absolute_url())
  78. self.assertEqual(response.status_code, 302)
  79. self.assertEqual(response['location'], 'http://misago-project.org')
  80. # Redirects count increased
  81. updated_redirect = Forum.objects.get(id=self.redirect.pk)
  82. self.assertEqual(updated_redirect.redirects_count,
  83. self.redirect.redirects_count + 1)
  84. # Session keeps track of clicks spam
  85. self.client.get(self.redirect.get_absolute_url())
  86. self.client.get(self.redirect.get_absolute_url())
  87. self.client.get(self.redirect.get_absolute_url())
  88. self.client.get(self.redirect.get_absolute_url())
  89. updated_redirect = Forum.objects.get(id=self.redirect.pk)
  90. self.assertEqual(updated_redirect.redirects_count,
  91. self.redirect.redirects_count + 1)