test_admin_system_checks.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. from datetime import timedelta
  2. from unittest.mock import Mock
  3. from django.contrib.auth import get_user_model
  4. from django.test import override_settings
  5. from django.urls import reverse
  6. from django.utils import timezone
  7. from ...test import assert_contains
  8. from ...users.datadownloads import request_user_data_download
  9. from ...users.models import DataDownload
  10. from ...users.test import create_test_user
  11. from ..views.index import (
  12. check_cache,
  13. check_data_downloads,
  14. check_debug_status,
  15. check_https,
  16. check_inactive_users,
  17. check_misago_address,
  18. )
  19. User = get_user_model()
  20. admin_link = reverse("misago:admin:index")
  21. def test_cache_check_passess_if_cache_can_be_read_after_setting(mocker):
  22. mocker.patch("misago.admin.views.index.cache.set")
  23. mocker.patch("misago.admin.views.index.cache.get", return_value="ok")
  24. assert check_cache() == {"is_ok": True}
  25. def test_cache_check_passess_if_cache_cant_be_read_after_setting(mocker):
  26. mocker.patch("misago.admin.views.index.cache.set")
  27. mocker.patch("misago.admin.views.index.cache.get", return_value=None)
  28. assert check_cache() == {"is_ok": False}
  29. def test_warning_about_disabled_cache_is_displayed_on_checks_list(mocker, admin_client):
  30. mocker.patch("misago.admin.views.index.check_cache", return_value={"is_ok": False})
  31. response = admin_client.get(admin_link)
  32. assert_contains(response, "Cache is disabled")
  33. def test_data_downloads_processing_check_passes_if_there_are_no_data_downloads(db):
  34. assert check_data_downloads() == {"is_ok": True, "count": 0}
  35. def test_ready_data_downloads_are_excluded_by_check(user):
  36. data_download = request_user_data_download(user)
  37. data_download.status = DataDownload.STATUS_READY
  38. data_download.save()
  39. assert check_data_downloads() == {"is_ok": True, "count": 0}
  40. def test_expired_data_downloads_are_excluded_by_check(user):
  41. data_download = request_user_data_download(user)
  42. data_download.status = DataDownload.STATUS_EXPIRED
  43. data_download.save()
  44. assert check_data_downloads() == {"is_ok": True, "count": 0}
  45. def test_recent_pending_data_downloads_are_excluded_by_check(user):
  46. data_download = request_user_data_download(user)
  47. data_download.status = DataDownload.STATUS_PENDING
  48. data_download.save()
  49. assert check_data_downloads() == {"is_ok": True, "count": 0}
  50. def test_recent_processing_data_downloads_are_excluded_by_check(user):
  51. data_download = request_user_data_download(user)
  52. data_download.status = DataDownload.STATUS_PROCESSING
  53. data_download.save()
  54. assert check_data_downloads() == {"is_ok": True, "count": 0}
  55. def test_check_fails_if_there_are_old_processing_data_downloads(user):
  56. data_download = request_user_data_download(user)
  57. data_download.status = DataDownload.STATUS_PROCESSING
  58. data_download.requested_on = timezone.now() - timedelta(days=5)
  59. data_download.save()
  60. assert check_data_downloads() == {"is_ok": False, "count": 1}
  61. def test_check_fails_if_there_are_old_pending_data_downloads(user):
  62. data_download = request_user_data_download(user)
  63. data_download.status = DataDownload.STATUS_PENDING
  64. data_download.requested_on = timezone.now() - timedelta(days=5)
  65. data_download.save()
  66. assert check_data_downloads() == {"is_ok": False, "count": 1}
  67. def test_warning_about_unprocessed_data_downloads_is_displayed_on_checks_list(
  68. admin_client, user
  69. ):
  70. data_download = request_user_data_download(user)
  71. data_download.status = DataDownload.STATUS_PENDING
  72. data_download.requested_on = timezone.now() - timedelta(days=5)
  73. data_download.save()
  74. response = admin_client.get(admin_link)
  75. assert_contains(response, "There is 1 unprocessed data download request")
  76. class RequestMock:
  77. absolute_uri = "https://misago-project.org/somewhere/"
  78. def build_absolute_uri(self, location):
  79. assert location == "/"
  80. return self.absolute_uri
  81. request = RequestMock()
  82. incorrect_address = "http://somewhere.com"
  83. correct_address = request.absolute_uri
  84. @override_settings(MISAGO_ADDRESS=None)
  85. def test_misago_address_check_handles_setting_not_configured():
  86. result = check_misago_address(request)
  87. assert result == {
  88. "is_ok": False,
  89. "set_address": None,
  90. "correct_address": request.absolute_uri,
  91. }
  92. @override_settings(MISAGO_ADDRESS=incorrect_address)
  93. def test_misago_address_check_detects_invalid_address_configuration():
  94. result = check_misago_address(request)
  95. assert result == {
  96. "is_ok": False,
  97. "set_address": incorrect_address,
  98. "correct_address": request.absolute_uri,
  99. }
  100. @override_settings(MISAGO_ADDRESS=correct_address)
  101. def test_misago_address_check_detects_valid_address_configuration():
  102. result = check_misago_address(request)
  103. assert result == {
  104. "is_ok": True,
  105. "set_address": correct_address,
  106. "correct_address": request.absolute_uri,
  107. }
  108. @override_settings(MISAGO_ADDRESS=None)
  109. def test_warning_about_unset_misago_address_is_displayed_on_checks_list(admin_client):
  110. response = admin_client.get(admin_link)
  111. assert_contains(response, "MISAGO_ADDRESS")
  112. @override_settings(MISAGO_ADDRESS=incorrect_address)
  113. def test_warning_about_incorrect_misago_address_is_displayed_on_checks_list(
  114. admin_client
  115. ):
  116. response = admin_client.get(admin_link)
  117. assert_contains(response, "MISAGO_ADDRESS")
  118. @override_settings(DEBUG=False)
  119. def test_debug_check_passess_if_debug_is_disabled():
  120. assert check_debug_status() == {"is_ok": True}
  121. @override_settings(DEBUG=True)
  122. def test_debug_check_fails_if_debug_is_enabled():
  123. assert check_debug_status() == {"is_ok": False}
  124. @override_settings(DEBUG=True)
  125. def test_warning_about_enabled_debug_is_displayed_on_checks_list(admin_client):
  126. response = admin_client.get(admin_link)
  127. assert_contains(response, "site is running in DEBUG mode")
  128. def test_https_check_passes_if_site_is_accessed_over_https():
  129. request = Mock(is_secure=Mock(return_value=True))
  130. assert check_https(request) == {"is_ok": True}
  131. def test_https_check_fails_if_site_is_accessed_without_https(mocker):
  132. request = Mock(is_secure=Mock(return_value=False))
  133. assert check_https(request) == {"is_ok": False}
  134. def test_warning_about_accessing_site_without_https_is_displayed_on_checks_list(
  135. admin_client
  136. ):
  137. response = admin_client.get(admin_link)
  138. assert_contains(response, "site is not running over HTTPS")
  139. def test_inactive_users_check_passess_if_there_are_no_inactive_users(db):
  140. assert check_inactive_users() == {"is_ok": True, "count": 0}
  141. def test_inactive_users_check_passess_if_there_are_less_than_eleven_inactive_users(db):
  142. for i in range(10):
  143. create_test_user(
  144. "User%s" % i,
  145. "user%s@example.com" % i,
  146. requires_activation=User.ACTIVATION_USER,
  147. )
  148. assert check_inactive_users() == {"is_ok": True, "count": 10}
  149. def test_inactive_users_check_fails_if_there_are_more_than_ten_inactive_users(db):
  150. for i in range(11):
  151. create_test_user(
  152. "User%s" % i,
  153. "user%s@example.com" % i,
  154. requires_activation=User.ACTIVATION_USER,
  155. )
  156. assert check_inactive_users() == {"is_ok": False, "count": 11}
  157. def test_warning_about_inactive_users_is_displayed_on_checks_list(admin_client):
  158. for i in range(11):
  159. create_test_user(
  160. "User%s" % i,
  161. "user%s@example.com" % i,
  162. requires_activation=User.ACTIVATION_USER,
  163. )
  164. response = admin_client.get(admin_link)
  165. assert_contains(response, "There are 11 inactive users accounts")