|
1 | 1 | from pathlib import Path |
| 2 | +from unittest import mock |
| 3 | +from urllib.error import URLError |
2 | 4 | from uuid import uuid4 |
3 | 5 |
|
4 | 6 | import orjson |
@@ -57,3 +59,51 @@ def test_extend_pyscript_config_string_values(): |
57 | 59 |
|
58 | 60 | # Check whether `packages_cache` has been overridden |
59 | 61 | assert result["packages_cache"] == "always" |
| 62 | + |
| 63 | + |
| 64 | +def test_get_reactpy_versions_https_fail_http_success(): |
| 65 | + utils.get_reactpy_versions.cache_clear() |
| 66 | + |
| 67 | + mock_response = mock.Mock() |
| 68 | + mock_response.status = 200 |
| 69 | + |
| 70 | + # Mock json.load to return data when called with mock_response |
| 71 | + with ( |
| 72 | + mock.patch("reactpy.pyscript.utils.request.urlopen") as mock_urlopen, |
| 73 | + mock.patch("reactpy.pyscript.utils.json.load") as mock_json_load, |
| 74 | + ): |
| 75 | + |
| 76 | + def side_effect(url, timeout): |
| 77 | + if url.startswith("https"): |
| 78 | + raise URLError("Fail") |
| 79 | + return mock_response |
| 80 | + |
| 81 | + mock_urlopen.side_effect = side_effect |
| 82 | + mock_json_load.return_value = { |
| 83 | + "releases": {"1.0.0": []}, |
| 84 | + "info": {"version": "1.0.0"}, |
| 85 | + } |
| 86 | + |
| 87 | + versions = utils.get_reactpy_versions() |
| 88 | + assert versions == {"versions": ["1.0.0"], "latest": "1.0.0"} |
| 89 | + |
| 90 | + # Verify both calls were made |
| 91 | + assert mock_urlopen.call_count == 2 |
| 92 | + assert mock_urlopen.call_args_list[0][0][0].startswith("https") |
| 93 | + assert mock_urlopen.call_args_list[1][0][0].startswith("http") |
| 94 | + |
| 95 | + |
| 96 | +def test_get_reactpy_versions_all_fail(): |
| 97 | + utils.get_reactpy_versions.cache_clear() |
| 98 | + |
| 99 | + with ( |
| 100 | + mock.patch("reactpy.pyscript.utils.request.urlopen") as mock_urlopen, |
| 101 | + mock.patch("reactpy.pyscript.utils._logger") as mock_logger, |
| 102 | + ): |
| 103 | + mock_urlopen.side_effect = URLError("Fail") |
| 104 | + |
| 105 | + versions = utils.get_reactpy_versions() |
| 106 | + assert versions == {} |
| 107 | + |
| 108 | + # Verify exception was logged |
| 109 | + assert mock_logger.exception.called |
0 commit comments