tests.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. from unittest import mock
  2. from django.contrib.messages import Message, add_message, constants
  3. from django.contrib.messages.storage import base
  4. from django.contrib.messages.test import MessagesTestMixin
  5. from django.test import RequestFactory, SimpleTestCase, override_settings
  6. from .utils import DummyStorage
  7. class MessageTests(SimpleTestCase):
  8. def test_eq(self):
  9. msg_1 = Message(constants.INFO, "Test message 1")
  10. msg_2 = Message(constants.INFO, "Test message 2")
  11. msg_3 = Message(constants.WARNING, "Test message 1")
  12. self.assertEqual(msg_1, msg_1)
  13. self.assertEqual(msg_1, mock.ANY)
  14. self.assertNotEqual(msg_1, msg_2)
  15. self.assertNotEqual(msg_1, msg_3)
  16. self.assertNotEqual(msg_2, msg_3)
  17. @override_settings(
  18. MESSAGE_TAGS={
  19. constants.WARNING: "caution",
  20. constants.ERROR: "",
  21. 12: "custom",
  22. }
  23. )
  24. def test_repr(self):
  25. tests = [
  26. (constants.INFO, "thing", "", "Message(level=20, message='thing')"),
  27. (
  28. constants.WARNING,
  29. "careful",
  30. "tag1 tag2",
  31. "Message(level=30, message='careful', extra_tags='tag1 tag2')",
  32. ),
  33. (
  34. constants.ERROR,
  35. "oops",
  36. "tag",
  37. "Message(level=40, message='oops', extra_tags='tag')",
  38. ),
  39. (12, "custom", "", "Message(level=12, message='custom')"),
  40. ]
  41. for level, message, extra_tags, expected in tests:
  42. with self.subTest(level=level, message=message):
  43. msg = Message(level, message, extra_tags=extra_tags)
  44. self.assertEqual(repr(msg), expected)
  45. class TestLevelTags(SimpleTestCase):
  46. message_tags = {
  47. constants.INFO: "info",
  48. constants.DEBUG: "",
  49. constants.WARNING: "",
  50. constants.ERROR: "bad",
  51. constants.SUCCESS: "",
  52. 12: "custom",
  53. }
  54. @override_settings(MESSAGE_TAGS=message_tags)
  55. def test_override_settings_level_tags(self):
  56. self.assertEqual(base.LEVEL_TAGS, self.message_tags)
  57. class FakeResponse:
  58. def __init__(self):
  59. request = RequestFactory().get("/")
  60. request._messages = DummyStorage()
  61. self.wsgi_request = request
  62. class AssertMessagesTest(MessagesTestMixin, SimpleTestCase):
  63. def test_assertion(self):
  64. response = FakeResponse()
  65. add_message(response.wsgi_request, constants.DEBUG, "DEBUG message.")
  66. add_message(response.wsgi_request, constants.INFO, "INFO message.")
  67. add_message(response.wsgi_request, constants.SUCCESS, "SUCCESS message.")
  68. add_message(response.wsgi_request, constants.WARNING, "WARNING message.")
  69. add_message(response.wsgi_request, constants.ERROR, "ERROR message.")
  70. self.assertMessages(
  71. response,
  72. [
  73. Message(constants.DEBUG, "DEBUG message."),
  74. Message(constants.INFO, "INFO message."),
  75. Message(constants.SUCCESS, "SUCCESS message."),
  76. Message(constants.WARNING, "WARNING message."),
  77. Message(constants.ERROR, "ERROR message."),
  78. ],
  79. )
  80. def test_with_tags(self):
  81. response = FakeResponse()
  82. add_message(
  83. response.wsgi_request,
  84. constants.INFO,
  85. "INFO message.",
  86. extra_tags="extra-info",
  87. )
  88. add_message(
  89. response.wsgi_request,
  90. constants.SUCCESS,
  91. "SUCCESS message.",
  92. extra_tags="extra-success",
  93. )
  94. add_message(
  95. response.wsgi_request,
  96. constants.WARNING,
  97. "WARNING message.",
  98. extra_tags="extra-warning",
  99. )
  100. add_message(
  101. response.wsgi_request,
  102. constants.ERROR,
  103. "ERROR message.",
  104. extra_tags="extra-error",
  105. )
  106. self.assertMessages(
  107. response,
  108. [
  109. Message(constants.INFO, "INFO message.", "extra-info"),
  110. Message(constants.SUCCESS, "SUCCESS message.", "extra-success"),
  111. Message(constants.WARNING, "WARNING message.", "extra-warning"),
  112. Message(constants.ERROR, "ERROR message.", "extra-error"),
  113. ],
  114. )
  115. @override_settings(MESSAGE_TAGS={42: "CUSTOM"})
  116. def test_custom_levelname(self):
  117. response = FakeResponse()
  118. add_message(response.wsgi_request, 42, "CUSTOM message.")
  119. self.assertMessages(response, [Message(42, "CUSTOM message.")])
  120. def test_ordered(self):
  121. response = FakeResponse()
  122. add_message(response.wsgi_request, constants.INFO, "First message.")
  123. add_message(response.wsgi_request, constants.WARNING, "Second message.")
  124. expected_messages = [
  125. Message(constants.WARNING, "Second message."),
  126. Message(constants.INFO, "First message."),
  127. ]
  128. self.assertMessages(response, expected_messages, ordered=False)
  129. with self.assertRaisesMessage(AssertionError, "Lists differ: "):
  130. self.assertMessages(response, expected_messages)
  131. def test_mismatching_length(self):
  132. response = FakeResponse()
  133. add_message(response.wsgi_request, constants.INFO, "INFO message.")
  134. msg = (
  135. "Lists differ: [Message(level=20, message='INFO message.')] != []\n\n"
  136. "First list contains 1 additional elements.\n"
  137. "First extra element 0:\n"
  138. "Message(level=20, message='INFO message.')\n\n"
  139. "- [Message(level=20, message='INFO message.')]\n"
  140. "+ []"
  141. )
  142. with self.assertRaisesMessage(AssertionError, msg):
  143. self.assertMessages(response, [])