1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00
pip/tests/functional/test_uninstall_user.py
Tzu-ping Chung 50e194f107 Selectively enable user site
The modern virtual environment structure does not allow us to enable
"fake user site" while disabling the global site, so we need to do more
fine-grained configuration to correctly set up test environments for
each test case.

With this done, we can also properly support the stdlib venv ad the test
environment backend, since it basically works identically with modern
virtualenv. The incompatible_with_test_venv is thus removed.
2022-10-28 01:51:13 +08:00

103 lines
3.3 KiB
Python

"""
tests specific to uninstalling --user installs
"""
from os.path import isdir, isfile, normcase
import pytest
from tests.functional.test_install_user import _patch_dist_in_site_packages
from tests.lib import PipTestEnvironment, TestData, assert_all_changes
from tests.lib.venv import VirtualEnvironment
from tests.lib.wheel import make_wheel
@pytest.mark.usefixtures("enable_user_site")
class Tests_UninstallUserSite:
@pytest.mark.network
def test_uninstall_from_usersite(self, script: PipTestEnvironment) -> None:
"""
Test uninstall from usersite
"""
result1 = script.pip("install", "--user", "INITools==0.3")
result2 = script.pip("uninstall", "-y", "INITools")
assert_all_changes(result1, result2, [script.venv / "build", "cache"])
def test_uninstall_from_usersite_with_dist_in_global_site(
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
) -> None:
"""
Test uninstall from usersite (with same dist in global site)
"""
entry_points_txt = "[console_scripts]\nscript = pkg:func"
make_wheel(
"pkg",
"0.1",
extra_metadata_files={"entry_points.txt": entry_points_txt},
).save_to_dir(script.scratch_path)
make_wheel(
"pkg",
"0.1.1",
extra_metadata_files={"entry_points.txt": entry_points_txt},
).save_to_dir(script.scratch_path)
_patch_dist_in_site_packages(virtualenv)
script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--no-warn-script-location",
"pkg==0.1",
)
result2 = script.pip(
"install",
"--no-index",
"--find-links",
script.scratch_path,
"--no-warn-script-location",
"--user",
"pkg==0.1.1",
)
result3 = script.pip("uninstall", "-vy", "pkg")
# uninstall console is mentioning user scripts, but not global scripts
assert normcase(script.user_bin_path) in result3.stdout, str(result3)
assert normcase(script.bin_path) not in result3.stdout, str(result3)
# uninstall worked
assert_all_changes(result2, result3, [script.venv / "build", "cache"])
# site still has 0.2 (can't look in result1; have to check)
dist_info_folder = script.base_path / script.site_packages / "pkg-0.1.dist-info"
assert isdir(dist_info_folder)
def test_uninstall_editable_from_usersite(
self, script: PipTestEnvironment, data: TestData
) -> None:
"""
Test uninstall editable local user install
"""
assert script.user_site_path.exists()
# install
to_install = data.packages.joinpath("FSPkg")
result1 = script.pip("install", "--user", "-e", to_install)
egg_link = script.user_site / "FSPkg.egg-link"
result1.did_create(egg_link)
# uninstall
result2 = script.pip("uninstall", "-y", "FSPkg")
assert not isfile(script.base_path / egg_link)
assert_all_changes(
result1,
result2,
[
script.venv / "build",
"cache",
script.user_site / "easy-install.pth",
],
)