test_api.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.contrib import messages
  2. from django.test import RequestFactory, SimpleTestCase
  3. from .utils import DummyStorage
  4. class ApiTests(SimpleTestCase):
  5. rf = RequestFactory()
  6. def setUp(self):
  7. self.request = self.rf.request()
  8. self.storage = DummyStorage()
  9. def test_ok(self):
  10. msg = "some message"
  11. self.request._messages = self.storage
  12. messages.add_message(self.request, messages.DEBUG, msg)
  13. [message] = self.storage.store
  14. self.assertEqual(msg, message.message)
  15. def test_request_is_none(self):
  16. msg = "add_message() argument must be an HttpRequest object, not 'NoneType'."
  17. self.request._messages = self.storage
  18. with self.assertRaisesMessage(TypeError, msg):
  19. messages.add_message(None, messages.DEBUG, "some message")
  20. self.assertEqual(self.storage.store, [])
  21. def test_middleware_missing(self):
  22. msg = (
  23. "You cannot add messages without installing "
  24. "django.contrib.messages.middleware.MessageMiddleware"
  25. )
  26. with self.assertRaisesMessage(messages.MessageFailure, msg):
  27. messages.add_message(self.request, messages.DEBUG, "some message")
  28. self.assertEqual(self.storage.store, [])
  29. def test_middleware_missing_silently(self):
  30. messages.add_message(
  31. self.request, messages.DEBUG, "some message", fail_silently=True
  32. )
  33. self.assertEqual(self.storage.store, [])
  34. class CustomRequest:
  35. def __init__(self, request):
  36. self._request = request
  37. def __getattribute__(self, attr):
  38. try:
  39. return super().__getattribute__(attr)
  40. except AttributeError:
  41. return getattr(self._request, attr)
  42. class CustomRequestApiTests(ApiTests):
  43. """
  44. add_message() should use ducktyping to allow request wrappers such as the
  45. one in Django REST framework.
  46. """
  47. def setUp(self):
  48. super().setUp()
  49. self.request = CustomRequest(self.request)