1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
import os
import pytest
import subprocess
import sys
here = os.path.abspath(os.path.dirname(__file__))
def test_it(venv):
result = subprocess.check_output(
[venv.python, '-c', 'print("hello world")'],
)
assert result.strip() == b'hello world'
@pytest.mark.needs_network
def test_it_installs_dep(venv):
venv.install('webob')
subprocess.check_call([venv.python, '-c', 'import webob'])
@pytest.mark.needs_network
def test_it_installs_dep_with_extra_args(venv):
venv.install('webob', extra_args=['--prefer-binary'])
subprocess.check_call([venv.python, '-c', 'import webob'])
@pytest.mark.needs_network
@pytest.mark.skipif(
sys.version_info < (3, 12), reason="Make sense only for Python 3.12"
)
def test_it_installs_dep_without_setuptools(venv):
# micropipenv does not depend on setuptools
# so this test verifies that `get_version` works
# fine even when setuptools/pkg_resources are
# not available in the virtual environment.
venv.install('micropipenv')
subprocess.check_call([venv.python, '-c', 'import micropipenv'])
venv.get_version('micropipenv')
@pytest.mark.needs_network
def test_it_installs_editable_dep(venv):
venv.install(os.path.join(here, 'myapp'), editable=True)
result = subprocess.check_output([venv.python, '-c', 'import myapp'])
assert result.strip() == b'hello world'
@pytest.mark.needs_network
def test_it_upgrades_dep(venv):
venv.install('pyramid==1.6')
version1 = venv.get_version('pyramid')
assert str(version1) == '1.6'
venv.install('pyramid', upgrade=True)
version2 = venv.get_version('pyramid')
assert version2 > version1
def test_get_version_returns_none(venv):
version = venv.get_version('pyramid', raises=False)
assert version is None
def test_get_version_raises(venv):
with pytest.raises(Exception, match='package is not installed'):
venv.get_version('pyramid')
def test_it_creates_with_system_packages(tmpdir):
from pytest_venv import VirtualEnvironment
venv = VirtualEnvironment(tmpdir.strpath)
venv.create(system_packages=True, extra_args=['--no-setuptools'])
result = subprocess.check_output(
[venv.python, '-c', 'print("hello world")'],
)
assert b'hello world' in result
|