test_thread_api.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import json
  2. from misago.acl.testutils import override_acl
  3. from misago.users.testutils import AuthenticatedUserTestCase
  4. from misago.categories.models import Category
  5. from misago.threads import testutils
  6. from misago.threads.models import Thread
  7. class ThreadApiTestCase(AuthenticatedUserTestCase):
  8. def setUp(self):
  9. super(ThreadApiTestCase, self).setUp()
  10. self.category = Category.objects.get(slug='first-category')
  11. self.thread = testutils.post_thread(category=self.category)
  12. self.api_link = self.thread.get_api_url()
  13. def override_acl(self, acl):
  14. final_acl = {
  15. 'can_see': 1,
  16. 'can_browse': 1,
  17. 'can_see_all_threads': 1,
  18. 'can_see_own_threads': 0,
  19. 'can_hide_threads': 0,
  20. 'can_approve_content': 0,
  21. }
  22. final_acl.update(acl)
  23. override_acl(self.user, {
  24. 'categories': {
  25. self.category.pk: final_acl
  26. }
  27. })
  28. def get_thread_json(self):
  29. response = self.client.get(self.thread.get_api_url())
  30. self.assertEqual(response.status_code, 200)
  31. return json.loads(response.content)
  32. class ThreadDeleteApiTests(ThreadApiTestCase):
  33. def test_delete_thread(self):
  34. """DELETE to API link with permission deletes thread"""
  35. self.override_acl({
  36. 'can_hide_threads': 2
  37. })
  38. response = self.client.delete(self.api_link)
  39. self.assertEqual(response.status_code, 200)
  40. with self.assertRaises(Thread.DoesNotExist):
  41. Thread.objects.get(pk=self.thread.pk)
  42. def test_delete_thread_no_permission(self):
  43. """DELETE to API link with no permission to delete fails"""
  44. self.override_acl({
  45. 'can_hide_threads': 1
  46. })
  47. response = self.client.delete(self.api_link)
  48. self.assertEqual(response.status_code, 403)
  49. self.override_acl({
  50. 'can_hide_threads': 0
  51. })
  52. response_json = json.loads(response.content)
  53. self.assertEqual(response_json['detail'],
  54. "You don't have permission to delete this thread.")
  55. response = self.client.delete(self.api_link)
  56. self.assertEqual(response.status_code, 403)
  57. class ThreadsReadApiTests(ThreadApiTestCase):
  58. def setUp(self):
  59. super(ThreadsReadApiTests, self).setUp()
  60. self.api_link = '/api/threads/read/'
  61. def test_read_all_threads(self):
  62. """api sets all threads as read"""
  63. response = self.client.post(self.api_link)
  64. self.assertEqual(response.status_code, 200)
  65. self.assertEqual(self.user.categoryread_set.count(), 2)
  66. def test_read_threads_in_category(self):
  67. """api sets threads in category as read"""
  68. response = self.client.post(
  69. '%s?category=%s' % (self.api_link, self.category.pk))
  70. self.assertEqual(response.status_code, 200)
  71. self.assertEqual(self.user.categoryread_set.count(), 1)