kopia lustrzana https://github.com/jupyterhub/repo2docker
66 wiersze
2.0 KiB
Python
66 wiersze
2.0 KiB
Python
import os
|
|
from tempfile import TemporaryDirectory
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from ruamel.yaml import YAML
|
|
|
|
from repo2docker.buildpacks.conda.freeze import set_python
|
|
|
|
V = "3.7"
|
|
yaml = YAML(typ="rt")
|
|
|
|
|
|
def test_set_python():
|
|
with TemporaryDirectory() as d:
|
|
env_fname = os.path.join(d, "some-env.yml")
|
|
|
|
# function being tested
|
|
set_python(env_fname, V)
|
|
|
|
# check that set_python() did its job
|
|
with open(env_fname) as f:
|
|
env = yaml.load(f)
|
|
f.seek(0)
|
|
assert "AUTO GENERATED FROM" in f.readline()
|
|
|
|
for dep in env["dependencies"]:
|
|
# the "- pip:" entry isn't a string, hence this complex if
|
|
# statement
|
|
if isinstance(dep, str) and dep.startswith("python="):
|
|
assert dep == f"python={V}.*", f"Unexpected dependency spec: '{dep}'"
|
|
break
|
|
else:
|
|
assert False, f"Did not find 'python={V}.*' listed in the generated file"
|
|
|
|
|
|
def test_doesnt_clobber():
|
|
# check a file not containing the word GENERATED on the first line is
|
|
# left unchanged
|
|
with TemporaryDirectory() as d:
|
|
env_fname = os.path.join(d, "some-env.yml")
|
|
with open(env_fname, "w") as f:
|
|
f.write("some text here")
|
|
|
|
set_python(env_fname, V)
|
|
|
|
with open(env_fname) as f:
|
|
assert f.read() == "some text here"
|
|
|
|
|
|
def test_python_missing_in_source_env():
|
|
# check we raise an exception when python isn't in the source environemt
|
|
with TemporaryDirectory() as d:
|
|
# prep our source environment
|
|
source_env_fname = os.path.join(d, "source-env.yml")
|
|
with open(source_env_fname, "w") as f:
|
|
yaml.dump({"dependencies": ["a_package_name=1.2.3"]}, f)
|
|
|
|
with patch("repo2docker.buildpacks.conda.freeze.ENV_FILE", source_env_fname):
|
|
target_env_fname = os.path.join(d, "some-env.yml")
|
|
|
|
with pytest.raises(ValueError) as e:
|
|
set_python(target_env_fname, V)
|
|
|
|
assert "python dependency not found" in str(e.value)
|