test.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.contrib.messages.api import get_messages
  2. from django.contrib.messages.constants import ERROR, INFO, SUCCESS
  3. from django.test import Client
  4. def assert_contains(response, string, status_code=200):
  5. assert response.status_code == status_code
  6. fail_message = f'"{string}" not found in response.content'
  7. assert string in response.content.decode("utf-8"), fail_message
  8. def assert_not_contains(response, string, status_code=200):
  9. assert response.status_code == status_code
  10. fail_message = f'"{string}" was unexpectedly found in response.content'
  11. assert string not in response.content.decode("utf-8"), fail_message
  12. def assert_has_error_message(response):
  13. messages = get_messages(response.wsgi_request)
  14. levels = [i.level for i in messages]
  15. assert levels, "No messages were set during the request"
  16. assert ERROR in levels, "No error messages were set during the request"
  17. def assert_has_info_message(response):
  18. messages = get_messages(response.wsgi_request)
  19. levels = [i.level for i in messages]
  20. assert levels, "No messages were set during the request"
  21. assert INFO in levels, "No info messages were set during the request"
  22. def assert_has_success_message(response):
  23. messages = get_messages(response.wsgi_request)
  24. levels = [i.level for i in messages]
  25. assert levels, "No messages were set during the request"
  26. assert SUCCESS in levels, "No success messages were set during the request"
  27. def assert_has_message(response, message, level=None):
  28. messages = get_messages(response.wsgi_request)
  29. found = False
  30. for msg in messages:
  31. if message in str(msg):
  32. if level and level != msg.level:
  33. error = (
  34. 'Message containing "%s" was set '
  35. "but didn't have level %s (it had %s)"
  36. )
  37. raise AssertionError(error % (message, level, message.level))
  38. found = True
  39. if not found:
  40. raise AssertionError(
  41. 'Message containing "%s" was not set during the request' % message
  42. )
  43. class MisagoClient(Client):
  44. def post(self, *args, **kwargs):
  45. if "json" in kwargs:
  46. return super().post(
  47. *args,
  48. data=kwargs.pop("json"),
  49. content_type="application/json",
  50. **kwargs,
  51. )
  52. return super().post(*args, **kwargs)