summaryrefslogtreecommitdiff
path: root/tests/unit/seed/wheels/test_acquire.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/seed/wheels/test_acquire.py')
-rw-r--r--tests/unit/seed/wheels/test_acquire.py59
1 files changed, 54 insertions, 5 deletions
diff --git a/tests/unit/seed/wheels/test_acquire.py b/tests/unit/seed/wheels/test_acquire.py
index e255311..dcce0f6 100644
--- a/tests/unit/seed/wheels/test_acquire.py
+++ b/tests/unit/seed/wheels/test_acquire.py
@@ -2,16 +2,25 @@ from __future__ import absolute_import, unicode_literals
import os
import sys
+from datetime import datetime
from subprocess import CalledProcessError
import pytest
+from virtualenv.app_data import AppDataDiskFolder
+from virtualenv.info import IS_PYPY, PY2
from virtualenv.seed.wheels.acquire import download_wheel, get_wheel, pip_wheel_env_run
from virtualenv.seed.wheels.embed import BUNDLE_FOLDER, get_embed_wheel
+from virtualenv.seed.wheels.periodic_update import dump_datetime
from virtualenv.seed.wheels.util import Wheel, discover_wheels
from virtualenv.util.path import Path
+@pytest.fixture(autouse=True)
+def fake_release_date(mocker):
+ mocker.patch("virtualenv.seed.wheels.periodic_update.release_date_for_wheel_path", return_value=None)
+
+
def test_pip_wheel_env_run_could_not_find(session_app_data, mocker):
mocker.patch("virtualenv.seed.wheels.acquire.from_bundle", return_value=None)
with pytest.raises(RuntimeError, match="could not find the embedded pip"):
@@ -74,24 +83,64 @@ def test_download_fails(mocker, for_py_version, session_app_data):
@pytest.fixture
def downloaded_wheel(mocker):
wheel = Wheel.from_path(Path("setuptools-0.0.0-py2.py3-none-any.whl"))
- mocker.patch("virtualenv.seed.wheels.acquire.download_wheel", return_value=wheel)
- yield wheel
+ yield wheel, mocker.patch("virtualenv.seed.wheels.acquire.download_wheel", return_value=wheel)
@pytest.mark.parametrize("version", ["bundle", "0.0.0"])
-def test_get_wheel_download_called(for_py_version, session_app_data, downloaded_wheel, version):
+def test_get_wheel_download_called(mocker, for_py_version, session_app_data, downloaded_wheel, version):
distribution = "setuptools"
+ write = mocker.patch("virtualenv.app_data.via_disk_folder.JSONStoreDisk.write")
wheel = get_wheel(distribution, version, for_py_version, [], True, session_app_data, False, os.environ)
assert wheel is not None
- assert wheel.name == downloaded_wheel.name
+ assert wheel.name == downloaded_wheel[0].name
+ assert downloaded_wheel[1].call_count == 1
+ assert write.call_count == 1
@pytest.mark.parametrize("version", ["embed", "pinned"])
-def test_get_wheel_download_not_called(for_py_version, session_app_data, downloaded_wheel, version):
+def test_get_wheel_download_not_called(mocker, for_py_version, session_app_data, downloaded_wheel, version):
distribution = "setuptools"
expected = get_embed_wheel(distribution, for_py_version)
if version == "pinned":
version = expected.version
+ write = mocker.patch("virtualenv.app_data.via_disk_folder.JSONStoreDisk.write")
wheel = get_wheel(distribution, version, for_py_version, [], True, session_app_data, False, os.environ)
assert wheel is not None
assert wheel.name == expected.name
+ assert downloaded_wheel[1].call_count == 0
+ assert write.call_count == 0
+
+
+@pytest.mark.skipif(IS_PYPY and PY2, reason="mocker.spy failing on PyPy 2.x")
+def test_get_wheel_download_cached(tmp_path, freezer, mocker, for_py_version, downloaded_wheel):
+ from virtualenv.app_data.via_disk_folder import JSONStoreDisk
+
+ app_data = AppDataDiskFolder(folder=str(tmp_path))
+ expected = downloaded_wheel[0]
+ write = mocker.spy(JSONStoreDisk, "write")
+ # 1st call, not cached, download is called
+ wheel = get_wheel(expected.distribution, expected.version, for_py_version, [], True, app_data, False, os.environ)
+ assert wheel is not None
+ assert wheel.name == expected.name
+ assert downloaded_wheel[1].call_count == 1
+ assert write.call_count == 1
+ # 2nd call, cached, download is not called
+ wheel = get_wheel(expected.distribution, expected.version, for_py_version, [], True, app_data, False, os.environ)
+ assert wheel is not None
+ assert wheel.name == expected.name
+ assert downloaded_wheel[1].call_count == 1
+ assert write.call_count == 1
+ wrote_json = write.call_args[0][1]
+ assert wrote_json == {
+ "completed": None,
+ "periodic": None,
+ "started": None,
+ "versions": [
+ {
+ "filename": expected.name,
+ "release_date": None,
+ "found_date": dump_datetime(datetime.now()),
+ "source": "download",
+ },
+ ],
+ }