|
1 | 1 | import pytest |
2 | 2 | from conftest import mock_fetch_cls |
| 3 | +from pytest_pyodide import run_in_pyodide |
3 | 4 |
|
4 | 5 |
|
5 | 6 | @pytest.mark.asyncio |
@@ -102,3 +103,73 @@ def test_freeze_lockfile_compat( |
102 | 103 | assert package.install_dir == "site" |
103 | 104 | assert not package.unvendored_tests |
104 | 105 | assert package.version == wheel.version |
| 106 | + |
| 107 | + |
| 108 | +def test_override_base_url(): |
| 109 | + from micropip.freeze import override_base_url |
| 110 | + |
| 111 | + lockfile_packages = { |
| 112 | + "pkg1": {"file_name": "pkg1-1.0.0-py3-none-any.whl"}, |
| 113 | + "pkg2": {"file_name": "pkg2-2.0.0-py3-none-any.whl"}, |
| 114 | + "pkg3": {"file_name": "https://other.com/pkg3-3.0.0-py3-none-any.whl"}, |
| 115 | + } |
| 116 | + base_url = "https://example.com/packages/" |
| 117 | + |
| 118 | + override_base_url(lockfile_packages, base_url) |
| 119 | + |
| 120 | + assert ( |
| 121 | + lockfile_packages["pkg1"]["file_name"] |
| 122 | + == "https://example.com/packages/pkg1-1.0.0-py3-none-any.whl" |
| 123 | + ) |
| 124 | + assert ( |
| 125 | + lockfile_packages["pkg2"]["file_name"] |
| 126 | + == "https://example.com/packages/pkg2-2.0.0-py3-none-any.whl" |
| 127 | + ) |
| 128 | + assert ( |
| 129 | + lockfile_packages["pkg3"]["file_name"] |
| 130 | + == "https://other.com/pkg3-3.0.0-py3-none-any.whl" |
| 131 | + ) |
| 132 | + |
| 133 | + |
| 134 | +def test_url_after_freeze_pyodide(selenium_standalone_micropip): |
| 135 | + |
| 136 | + @run_in_pyodide |
| 137 | + def _run(selenium, prefix): |
| 138 | + import json |
| 139 | + |
| 140 | + from pyodide_js import lockfileBaseUrl |
| 141 | + from pyodide_js._api import lockfile_packages |
| 142 | + |
| 143 | + import micropip |
| 144 | + |
| 145 | + new_lockfile_str = micropip.freeze() |
| 146 | + new_lockfile_packages = json.loads(new_lockfile_str)["packages"] |
| 147 | + |
| 148 | + orig_lockfile_packages = lockfile_packages.to_py() |
| 149 | + |
| 150 | + for orig_pkg_name, orig_pkg in orig_lockfile_packages.items(): |
| 151 | + assert orig_pkg_name in new_lockfile_packages |
| 152 | + |
| 153 | + new_pkg = new_lockfile_packages[orig_pkg_name] |
| 154 | + |
| 155 | + assert new_pkg["name"] == orig_pkg["name"] |
| 156 | + assert new_pkg["version"] == orig_pkg["version"] |
| 157 | + assert new_pkg["sha256"] == orig_pkg["sha256"] |
| 158 | + assert new_pkg["imports"] == orig_pkg["imports"] |
| 159 | + assert new_pkg["depends"] == orig_pkg["depends"] |
| 160 | + assert new_pkg["install_dir"] == orig_pkg["install_dir"] |
| 161 | + assert new_pkg["unvendored_tests"] == orig_pkg["unvendored_tests"] |
| 162 | + |
| 163 | + # original lockfile will have relative URLs |
| 164 | + # TODO: this might change later if packages are served from PyPI |
| 165 | + assert not orig_pkg["file_name"].startswith(prefix) |
| 166 | + |
| 167 | + # new lockfile should have absolute URLs |
| 168 | + assert new_pkg["file_name"].startswith(prefix) |
| 169 | + assert new_pkg["file_name"].startswith(lockfileBaseUrl) |
| 170 | + |
| 171 | + assert orig_pkg["file_name"] in new_pkg["file_name"] |
| 172 | + |
| 173 | + selenium = selenium_standalone_micropip |
| 174 | + prefix = ("/",) if selenium.browser == "node" else ("http://", "https://") |
| 175 | + _run(selenium, prefix) |
0 commit comments