test_exceptionhandler.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.core import exceptions as django_exceptions
  2. from django.core.exceptions import PermissionDenied
  3. from django.http import Http404
  4. from django.test import TestCase
  5. from misago.api import exceptionhandler
  6. from misago.core.exceptions import Banned
  7. from misago.users.models import Ban
  8. INVALID_EXCEPTIONS = [
  9. django_exceptions.ObjectDoesNotExist,
  10. django_exceptions.ViewDoesNotExist,
  11. TypeError,
  12. ValueError,
  13. KeyError,
  14. ]
  15. class HandleAPIExceptionTests(TestCase):
  16. def test_banned(self):
  17. """banned exception is correctly handled"""
  18. ban = Ban(user_message="This is test ban!")
  19. response = exceptionhandler.handle_api_exception(Banned(ban), None)
  20. self.assertEqual(response.status_code, 403)
  21. self.assertEqual(response.data['detail']['html'], "<p>This is test ban!</p>")
  22. self.assertIn('expires_on', response.data)
  23. def test_permission_denied(self):
  24. """permission denied exception is correctly handled"""
  25. response = exceptionhandler.handle_api_exception(PermissionDenied(), None)
  26. self.assertEqual(response.status_code, 403)
  27. self.assertEqual(response.data['detail'], "Permission denied.")
  28. def test_permission_message_denied(self):
  29. """permission denied with message is correctly handled"""
  30. exception = PermissionDenied("You shall not pass!")
  31. response = exceptionhandler.handle_api_exception(exception, None)
  32. self.assertEqual(response.status_code, 403)
  33. self.assertEqual(response.data['detail'], "You shall not pass!")
  34. def test_unhandled_exception(self):
  35. """our exception handler is not interrupting other exceptions"""
  36. for exception in INVALID_EXCEPTIONS:
  37. response = exceptionhandler.handle_api_exception(exception(), None)
  38. self.assertIsNone(response)
  39. response = exceptionhandler.handle_api_exception(Http404(), None)
  40. self.assertEqual(response.status_code, 404)
  41. self.assertEqual(response.data['detail'], "Not found.")