test_version_check.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from unittest.mock import ANY, Mock
  2. import pytest
  3. from ariadne import gql
  4. from requests.exceptions import RequestException
  5. from .... import __version__
  6. from ..versioncheck import CACHE_KEY, CACHE_LENGTH, resolve_version
  7. test_query = gql("{ version { status message description } }")
  8. def mock_requests_get(mocker, mock):
  9. return mocker.patch("requests.get", return_value=Mock(json=mock))
  10. def test_version_check_query_returns_error_if_misago_version_is_unreleased(
  11. admin_graphql_client, mocker
  12. ):
  13. mocker.patch("misago.graphql.admin.versioncheck.__released__", False)
  14. mock_requests_get(mocker, Mock(return_value={"info": {"version": "outdated"}}))
  15. result = admin_graphql_client.query(test_query)
  16. assert result["version"]["status"] == "ERROR"
  17. def test_version_check_query_returns_success_if_site_is_updated(
  18. admin_graphql_client, mocker
  19. ):
  20. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  21. mock_requests_get(mocker, Mock(return_value={"info": {"version": __version__}}))
  22. result = admin_graphql_client.query(test_query)
  23. assert result["version"]["status"] == "SUCCESS"
  24. def test_version_check_query_returns_error_if_site_is_outdated(
  25. admin_graphql_client, mocker
  26. ):
  27. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  28. mock_requests_get(mocker, Mock(return_value={"info": {"version": "outdated"}}))
  29. result = admin_graphql_client.query(test_query)
  30. assert result["version"]["status"] == "ERROR"
  31. def test_version_check_query_returns_warning_if_version_check_failed(
  32. admin_graphql_client, mocker
  33. ):
  34. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  35. mock_requests_get(mocker, Mock(side_effect=RequestException()))
  36. result = admin_graphql_client.query(test_query)
  37. assert result["version"]["status"] == "WARNING"
  38. def test_version_check_result_is_cached(mocker):
  39. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  40. set_cache = mocker.patch("django.core.cache.cache.set")
  41. mock_requests_get(mocker, Mock(return_value={"info": {"version": "outdated"}}))
  42. resolve_version()
  43. set_cache.assert_called_with(CACHE_KEY, ANY, CACHE_LENGTH)
  44. def test_failed_version_check_result_is_not_cached(admin_graphql_client, mocker):
  45. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  46. set_cache = mocker.patch("django.core.cache.cache.set")
  47. mock_requests_get(mocker, Mock(side_effect=RequestException()))
  48. resolve_version()
  49. set_cache.assert_not_called()
  50. def test_remote_api_is_not_called_if_version_check_cache_is_available(mocker):
  51. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  52. mocker.patch("django.core.cache.cache.get", return_value={"status": "TEST"})
  53. api_mock = mock_requests_get(mocker, Mock())
  54. resolve_version()
  55. api_mock.assert_not_called()
  56. def test_version_check_cache_is_returned_when_set(mocker):
  57. mocker.patch("misago.graphql.admin.versioncheck.__released__", True)
  58. mocker.patch("django.core.cache.cache.get", return_value={"status": "TEST"})
  59. api_mock = mock_requests_get(mocker, Mock())
  60. assert resolve_version() == {"status": "TEST"}