mirror of
https://github.com/kennethreitz/pipenv.git
synced 2026-06-05 22:50:18 +00:00
87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
import os
|
|
|
|
from pipenv.project import Project
|
|
from pipenv.utils import temp_environ, normalize_drive, get_windows_path
|
|
from pipenv.vendor import delegator
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.dotvenv
|
|
def test_venv_in_project(PipenvInstance, pypi):
|
|
with temp_environ():
|
|
os.environ['PIPENV_VENV_IN_PROJECT'] = '1'
|
|
with PipenvInstance(pypi=pypi) as p:
|
|
c = p.pipenv('install requests')
|
|
assert c.return_code == 0
|
|
assert normalize_drive(p.path) in p.pipenv('--venv').out
|
|
|
|
|
|
@pytest.mark.dotvenv
|
|
def test_venv_at_project_root(PipenvInstance):
|
|
with temp_environ():
|
|
with PipenvInstance(chdir=True) as p:
|
|
os.environ['PIPENV_VENV_IN_PROJECT'] = '1'
|
|
c = p.pipenv('install')
|
|
assert c.return_code == 0
|
|
assert normalize_drive(p.path) in p.pipenv('--venv').out
|
|
del os.environ['PIPENV_VENV_IN_PROJECT']
|
|
os.mkdir('subdir')
|
|
os.chdir('subdir')
|
|
# should still detect installed
|
|
assert normalize_drive(p.path) in p.pipenv('--venv').out
|
|
|
|
|
|
@pytest.mark.dotvenv
|
|
def test_reuse_previous_venv(PipenvInstance, pypi):
|
|
with PipenvInstance(chdir=True, pypi=pypi) as p:
|
|
os.mkdir('.venv')
|
|
c = p.pipenv('install requests')
|
|
assert c.return_code == 0
|
|
assert normalize_drive(p.path) in p.pipenv('--venv').out
|
|
|
|
|
|
@pytest.mark.dotvenv
|
|
@pytest.mark.install
|
|
@pytest.mark.complex
|
|
@pytest.mark.shell
|
|
@pytest.mark.windows
|
|
@pytest.mark.pew
|
|
@pytest.mark.skip('Not mocking this.')
|
|
def test_shell_nested_venv_in_project(PipenvInstance, pypi):
|
|
import subprocess
|
|
with temp_environ():
|
|
os.environ['PIPENV_VENV_IN_PROJECT'] = '1'
|
|
os.environ['PIPENV_IGNORE_VIRTUALENVS'] = '1'
|
|
with PipenvInstance(chdir=True, pypi=pypi) as p:
|
|
# Signal to pew to look in the project directory for the environment
|
|
os.environ['WORKON_HOME'] = p.path
|
|
c = p.pipenv('install requests')
|
|
assert c.return_code == 0
|
|
assert 'requests' in p.pipfile['packages']
|
|
assert 'requests' in p.lockfile['default']
|
|
# Check that .venv now shows in pew's managed list
|
|
pew_list = delegator.run('pewtwo ls')
|
|
assert '.venv' in pew_list.out
|
|
# Check for the venv directory
|
|
c = delegator.run('pewtwo dir .venv')
|
|
# Compare pew's virtualenv path to what we expect
|
|
venv_path = get_windows_path(Project().project_directory, '.venv')
|
|
# os.path.normpath will normalize slashes
|
|
assert venv_path == normalize_drive(os.path.normpath(c.out.strip()))
|
|
# Have pew run 'pip freeze' in the virtualenv
|
|
# This is functionally the same as spawning a subshell
|
|
# If we can do this we can theoretically make a subshell
|
|
# This test doesn't work on *nix
|
|
if os.name == 'nt':
|
|
process = subprocess.Popen(
|
|
'pewtwo in .venv pip freeze',
|
|
shell=True,
|
|
universal_newlines=True,
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE
|
|
)
|
|
out, _ = process.communicate()
|
|
assert any(req.startswith('requests') for req in out.splitlines()) is True
|