test_usernamechanges_api.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from misago.acl.testutils import override_acl
  2. from misago.core.utils import serialize_datetime
  3. from misago.users.testutils import AuthenticatedUserTestCase
  4. class UsernameChangesApiTests(AuthenticatedUserTestCase):
  5. def setUp(self):
  6. super(UsernameChangesApiTests, self).setUp()
  7. self.link = '/api/username-changes/'
  8. def test_user_can_always_see_his_name_changes(self):
  9. """list returns own username changes"""
  10. self.user.set_username('NewUsername', self.user)
  11. self.user.save()
  12. override_acl(self.user, {'can_see_users_name_history': False})
  13. response = self.client.get('%s?user=%s' % (self.link, self.user.pk))
  14. self.assertEqual(response.status_code, 200)
  15. username_change = self.user.namechanges.all()[0]
  16. self.assertEqual(response.json(), {
  17. 'page': 1,
  18. 'pages': 1,
  19. 'count': 1,
  20. 'first': None,
  21. 'previous': None,
  22. 'next': None,
  23. 'last': None,
  24. 'before': 0,
  25. 'more': 0,
  26. 'results': [
  27. {
  28. 'id': username_change.id,
  29. 'user': {
  30. 'id': self.user.id,
  31. 'username': 'NewUsername',
  32. 'avatars': self.user.avatars,
  33. 'url': self.user.get_absolute_url(),
  34. },
  35. 'changed_by': {
  36. 'id': self.user.id,
  37. 'username': 'NewUsername',
  38. 'avatars': self.user.avatars,
  39. 'url': self.user.get_absolute_url(),
  40. },
  41. 'changed_by_username': 'NewUsername',
  42. 'changed_on': serialize_datetime(username_change.changed_on),
  43. 'new_username': 'NewUsername',
  44. 'old_username': 'TestUser'
  45. }
  46. ],
  47. })
  48. def test_list_handles_invalid_filter(self):
  49. """list raises 404 for invalid filter"""
  50. self.user.set_username('NewUsername', self.user)
  51. override_acl(self.user, {'can_see_users_name_history': True})
  52. response = self.client.get('%s?user=abcd' % self.link)
  53. self.assertEqual(response.status_code, 404)
  54. self.assertEqual(response.json(), {'detail': "NOT FOUND"})
  55. def test_list_handles_nonexisting_user(self):
  56. """list raises 404 for invalid user id"""
  57. self.user.set_username('NewUsername', self.user)
  58. override_acl(self.user, {'can_see_users_name_history': True})
  59. response = self.client.get('%s?user=142141' % self.link)
  60. self.assertEqual(response.status_code, 404)
  61. self.assertEqual(response.json(), {'detail': "No User matches the given query."})
  62. def test_list_handles_search(self):
  63. """list returns found username changes"""
  64. self.user.set_username('NewUsername', self.user)
  65. self.user.save()
  66. override_acl(self.user, {'can_see_users_name_history': False})
  67. response = self.client.get('%s?user=%s&search=new' % (self.link, self.user.pk))
  68. self.assertEqual(response.status_code, 200)
  69. username_change = self.user.namechanges.all()[0]
  70. self.assertEqual(response.json(), {
  71. 'page': 1,
  72. 'pages': 1,
  73. 'count': 1,
  74. 'first': None,
  75. 'previous': None,
  76. 'next': None,
  77. 'last': None,
  78. 'before': 0,
  79. 'more': 0,
  80. 'results': [
  81. {
  82. 'id': username_change.id,
  83. 'user': {
  84. 'id': self.user.id,
  85. 'username': 'NewUsername',
  86. 'avatars': self.user.avatars,
  87. 'url': self.user.get_absolute_url(),
  88. },
  89. 'changed_by': {
  90. 'id': self.user.id,
  91. 'username': 'NewUsername',
  92. 'avatars': self.user.avatars,
  93. 'url': self.user.get_absolute_url(),
  94. },
  95. 'changed_by_username': 'NewUsername',
  96. 'changed_on': serialize_datetime(username_change.changed_on),
  97. 'new_username': 'NewUsername',
  98. 'old_username': 'TestUser'
  99. }
  100. ],
  101. })
  102. override_acl(self.user, {'can_see_users_name_history': False})
  103. response = self.client.get('%s?user=%s&search=usernew' % (self.link, self.user.pk))
  104. self.assertEqual(response.status_code, 200)
  105. self.assertEqual(response.json(), {
  106. 'page': 1,
  107. 'pages': 1,
  108. 'count': 0,
  109. 'first': None,
  110. 'previous': None,
  111. 'next': None,
  112. 'last': None,
  113. 'before': 0,
  114. 'more': 0,
  115. 'results': [],
  116. })
  117. def test_list_denies_permission(self):
  118. """list denies permission for other user (or all) if no access"""
  119. override_acl(self.user, {'can_see_users_name_history': False})
  120. response = self.client.get('%s?user=%s' % (self.link, self.user.pk + 1))
  121. self.assertEqual(response.status_code, 403)
  122. self.assertEqual(response.json(), {
  123. 'detail': "You don't have permission to see other users name history.",
  124. })
  125. response = self.client.get(self.link)
  126. self.assertEqual(response.status_code, 403)
  127. self.assertEqual(response.json(), {
  128. 'detail': "You don't have permission to see other users name history.",
  129. })