test_user_feeds_api.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. from django.urls import reverse
  2. from misago.threads import testutils
  3. from misago.threads.tests.test_threads_api import ThreadsApiTestCase
  4. class UserThreadsApiTests(ThreadsApiTestCase):
  5. def setUp(self):
  6. super().setUp()
  7. self.api_link = reverse(
  8. 'misago:api:user-threads', kwargs={
  9. 'pk': self.user.pk,
  10. }
  11. )
  12. def test_invalid_user_id(self):
  13. """api validates user id"""
  14. link = reverse(
  15. 'misago:api:user-threads', kwargs={
  16. 'pk': 'abcd',
  17. }
  18. )
  19. response = self.client.get(link)
  20. self.assertEqual(response.status_code, 404)
  21. def test_nonexistant_user_id(self):
  22. """api validates that user for id exists"""
  23. link = reverse(
  24. 'misago:api:user-threads', kwargs={
  25. 'pk': self.user.pk + 1,
  26. }
  27. )
  28. response = self.client.get(link)
  29. self.assertEqual(response.status_code, 404)
  30. def test_empty_response(self):
  31. """api has no showstopers on empty response"""
  32. response = self.client.get(self.api_link)
  33. self.assertEqual(response.status_code, 200)
  34. self.assertEqual(response.json()['count'], 0)
  35. def test_user_post(self):
  36. """user post doesn't show in feed because its not first post in thread"""
  37. testutils.reply_thread(self.thread, poster=self.user)
  38. response = self.client.get(self.api_link)
  39. self.assertEqual(response.status_code, 200)
  40. self.assertEqual(response.json()['count'], 0)
  41. def test_user_event(self):
  42. """events don't show in feeds at all"""
  43. testutils.reply_thread(
  44. self.thread,
  45. poster=self.user,
  46. is_event=True,
  47. )
  48. response = self.client.get(self.api_link)
  49. self.assertEqual(response.status_code, 200)
  50. self.assertEqual(response.json()['count'], 0)
  51. def test_user_thread(self):
  52. """user thread shows in feed"""
  53. thread = testutils.post_thread(
  54. category=self.category,
  55. poster=self.user,
  56. )
  57. # this post will not show in feed
  58. testutils.reply_thread(thread, poster=self.user)
  59. response = self.client.get(self.api_link)
  60. self.assertEqual(response.status_code, 200)
  61. self.assertEqual(response.json()['count'], 1)
  62. self.assertEqual(response.json()['results'][0]['id'], thread.first_post_id)
  63. def test_user_thread_anonymous(self):
  64. """user thread shows in feed requested by unauthenticated user"""
  65. thread = testutils.post_thread(
  66. category=self.category,
  67. poster=self.user,
  68. )
  69. self.logout_user()
  70. response = self.client.get(self.api_link)
  71. self.assertEqual(response.status_code, 200)
  72. self.assertEqual(response.json()['count'], 1)
  73. self.assertEqual(response.json()['results'][0]['id'], thread.first_post_id)
  74. class UserPostsApiTests(ThreadsApiTestCase):
  75. def setUp(self):
  76. super().setUp()
  77. self.api_link = reverse(
  78. 'misago:api:user-posts', kwargs={
  79. 'pk': self.user.pk,
  80. }
  81. )
  82. def test_invalid_user_id(self):
  83. """api validates user id"""
  84. link = reverse(
  85. 'misago:api:user-posts', kwargs={
  86. 'pk': 'abcd',
  87. }
  88. )
  89. response = self.client.get(link)
  90. self.assertEqual(response.status_code, 404)
  91. def test_nonexistant_user_id(self):
  92. """api validates that user for id exists"""
  93. link = reverse(
  94. 'misago:api:user-posts', kwargs={
  95. 'pk': self.user.pk + 1,
  96. }
  97. )
  98. response = self.client.get(link)
  99. self.assertEqual(response.status_code, 404)
  100. def test_empty_response(self):
  101. """api has no showstopers on empty response"""
  102. response = self.client.get(self.api_link)
  103. self.assertEqual(response.status_code, 200)
  104. self.assertEqual(response.json()['count'], 0)
  105. def test_user_event(self):
  106. """events don't show in feeds at all"""
  107. testutils.reply_thread(
  108. self.thread,
  109. poster=self.user,
  110. is_event=True,
  111. )
  112. response = self.client.get(self.api_link)
  113. self.assertEqual(response.status_code, 200)
  114. self.assertEqual(response.json()['count'], 0)
  115. def test_user_hidden_post(self):
  116. """hidden posts don't show in feeds at all"""
  117. testutils.reply_thread(
  118. self.thread,
  119. poster=self.user,
  120. is_hidden=True,
  121. )
  122. response = self.client.get(self.api_link)
  123. self.assertEqual(response.status_code, 200)
  124. self.assertEqual(response.json()['count'], 0)
  125. def test_user_unapproved_post(self):
  126. """unapproved posts don't show in feeds at all"""
  127. testutils.reply_thread(
  128. self.thread,
  129. poster=self.user,
  130. is_unapproved=True,
  131. )
  132. response = self.client.get(self.api_link)
  133. self.assertEqual(response.status_code, 200)
  134. self.assertEqual(response.json()['count'], 0)
  135. def test_user_posts(self):
  136. """user posts show in feed"""
  137. post = testutils.reply_thread(self.thread, poster=self.user)
  138. other_post = testutils.reply_thread(self.thread, poster=self.user)
  139. response = self.client.get(self.api_link)
  140. self.assertEqual(response.status_code, 200)
  141. self.assertEqual(response.json()['count'], 2)
  142. self.assertEqual(response.json()['results'][0]['id'], other_post.pk)
  143. self.assertEqual(response.json()['results'][1]['id'], post.pk)
  144. def test_user_thread(self):
  145. """user thread shows in feed"""
  146. thread = testutils.post_thread(
  147. category=self.category,
  148. poster=self.user,
  149. )
  150. post = testutils.reply_thread(thread, poster=self.user)
  151. response = self.client.get(self.api_link)
  152. self.assertEqual(response.status_code, 200)
  153. self.assertEqual(response.json()['count'], 2)
  154. self.assertEqual(response.json()['results'][0]['id'], post.pk)
  155. self.assertEqual(response.json()['results'][1]['id'], thread.first_post_id)
  156. def test_user_post_anonymous(self):
  157. """user post shows in feed requested by unauthenticated user"""
  158. post = testutils.reply_thread(self.thread, poster=self.user)
  159. other_post = testutils.reply_thread(self.thread, poster=self.user)
  160. self.logout_user()
  161. response = self.client.get(self.api_link)
  162. self.assertEqual(response.status_code, 200)
  163. self.assertEqual(response.json()['count'], 2)
  164. self.assertEqual(response.json()['results'][0]['id'], other_post.pk)
  165. self.assertEqual(response.json()['results'][1]['id'], post.pk)
  166. def test_user_thread_anonymous(self):
  167. """user thread shows in feed requested by unauthenticated user"""
  168. thread = testutils.post_thread(
  169. category=self.category,
  170. poster=self.user,
  171. )
  172. post = testutils.reply_thread(thread, poster=self.user)
  173. self.logout_user()
  174. response = self.client.get(self.api_link)
  175. self.assertEqual(response.status_code, 200)
  176. self.assertEqual(response.json()['count'], 2)
  177. self.assertEqual(response.json()['results'][0]['id'], post.pk)
  178. self.assertEqual(response.json()['results'][1]['id'], thread.first_post_id)