test_user_signature_api.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from misago.acl.test import patch_user_acl
  2. from misago.users.test import AuthenticatedUserTestCase
  3. class UserSignatureTests(AuthenticatedUserTestCase):
  4. """tests for user signature RPC (POST to /api/users/1/signature/)"""
  5. def setUp(self):
  6. super().setUp()
  7. self.link = "/api/users/%s/signature/" % self.user.pk
  8. @patch_user_acl({"can_have_signature": 0})
  9. def test_signature_no_permission(self):
  10. """edit signature api with no ACL returns 403"""
  11. response = self.client.get(self.link)
  12. self.assertEqual(response.status_code, 403)
  13. self.assertEqual(
  14. response.json(),
  15. {"detail": "You don't have permission to change signature."},
  16. )
  17. @patch_user_acl({"can_have_signature": 1})
  18. def test_signature_locked(self):
  19. """locked edit signature returns 403"""
  20. self.user.is_signature_locked = True
  21. self.user.signature_lock_user_message = "Your siggy is banned."
  22. self.user.save()
  23. response = self.client.get(self.link)
  24. self.assertEqual(response.status_code, 403)
  25. self.assertEqual(
  26. response.json(),
  27. {
  28. "detail": "Your signature is locked. You can't change it.",
  29. "reason": "<p>Your siggy is banned.</p>",
  30. },
  31. )
  32. @patch_user_acl({"can_have_signature": 1})
  33. def test_get_signature(self):
  34. """GET to api returns json with no signature"""
  35. self.user.is_signature_locked = False
  36. self.user.save()
  37. response = self.client.get(self.link)
  38. self.assertEqual(response.status_code, 200)
  39. self.assertFalse(response.json()["signature"])
  40. @patch_user_acl({"can_have_signature": 1})
  41. def test_post_empty_signature(self):
  42. """empty POST empties user signature"""
  43. self.user.is_signature_locked = False
  44. self.user.save()
  45. response = self.client.post(self.link, data={"signature": ""})
  46. self.assertEqual(response.status_code, 200)
  47. self.assertFalse(response.json()["signature"])
  48. @patch_user_acl({"can_have_signature": 1})
  49. def test_post_too_long_signature(self):
  50. """too long new signature errors"""
  51. self.user.is_signature_locked = False
  52. self.user.save()
  53. response = self.client.post(self.link, data={"signature": "abcd" * 1000})
  54. self.assertEqual(response.status_code, 400)
  55. self.assertEqual(response.json(), {"detail": "Signature is too long."})
  56. @patch_user_acl({"can_have_signature": 1})
  57. def test_post_good_signature(self):
  58. """POST with good signature changes user signature"""
  59. self.user.is_signature_locked = False
  60. self.user.save()
  61. response = self.client.post(self.link, data={"signature": "Hello, **bros**!"})
  62. self.assertEqual(response.status_code, 200)
  63. self.assertEqual(
  64. response.json()["signature"]["html"], "<p>Hello, <strong>bros</strong>!</p>"
  65. )
  66. self.assertEqual(response.json()["signature"]["plain"], "Hello, **bros**!")
  67. self.reload_user()
  68. self.assertEqual(
  69. self.user.signature_parsed, "<p>Hello, <strong>bros</strong>!</p>"
  70. )