def test_uninstall_proper_dep_behavior_missing_interpreter( pipx_temp_env, metadata_version): # isort is a dependency of pylint. Make sure that uninstalling pylint # does not also uninstall isort app in LOCAL_BIN_DIR isort_app_paths = [ constants.LOCAL_BIN_DIR / app for app in PKG["isort"]["apps"] ] pylint_app_paths = [ constants.LOCAL_BIN_DIR / app for app in PKG["pylint"]["apps"] ] assert not run_pipx_cli(["install", PKG["pylint"]["spec"]]) assert not run_pipx_cli(["install", PKG["isort"]["spec"]]) mock_legacy_venv("pylint", metadata_version=metadata_version) mock_legacy_venv("isort", metadata_version=metadata_version) remove_venv_interpreter("pylint") remove_venv_interpreter("isort") for pylint_app_path in pylint_app_paths: assert pylint_app_path.exists() for isort_app_path in isort_app_paths: assert isort_app_path.exists() assert not run_pipx_cli(["uninstall", "pylint"]) # Do not check the following on Windows without metadata, we do not # remove bin dir links by design for missing interpreter in that case if not (sys.platform.startswith("win") and metadata_version is None): for pylint_app_path in pylint_app_paths: assert not file_or_symlink(pylint_app_path) # THIS is what we're making sure is true: for isort_app_path in isort_app_paths: assert isort_app_path.exists()
def test_reinstall_suffix_legacy_venv(pipx_temp_env, capsys, metadata_version): suffix = "_x" assert not run_pipx_cli(["install", "pycowsay", f"--suffix={suffix}"]) mock_legacy_venv(f"pycowsay{suffix}", metadata_version=metadata_version) assert not run_pipx_cli( ["reinstall", "--python", sys.executable, f"pycowsay{suffix}"])
def test_uninstall_proper_dep_behavior(pipx_temp_env, metadata_version): # isort is a dependency of pylint. Make sure that uninstalling pylint # does not also uninstall isort app in LOCAL_BIN_DIR isort_app_paths = [ constants.LOCAL_BIN_DIR / app for app in PKG["isort"]["apps"] ] pylint_app_paths = [ constants.LOCAL_BIN_DIR / app for app in PKG["pylint"]["apps"] ] assert not run_pipx_cli(["install", PKG["pylint"]["spec"]]) assert not run_pipx_cli(["install", PKG["isort"]["spec"]]) mock_legacy_venv("pylint", metadata_version=metadata_version) mock_legacy_venv("isort", metadata_version=metadata_version) for pylint_app_path in pylint_app_paths: assert pylint_app_path.exists() for isort_app_path in isort_app_paths: assert isort_app_path.exists() assert not run_pipx_cli(["uninstall", "pylint"]) for pylint_app_path in pylint_app_paths: assert not file_or_symlink(pylint_app_path) # THIS is what we're making sure is true: for isort_app_path in isort_app_paths: assert isort_app_path.exists()
def test_list_legacy_venv(pipx_temp_env, monkeypatch, capsys, metadata_version): assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) assert not run_pipx_cli(["list"]) captured = capsys.readouterr() assert "package pycowsay 0.0.0.1," in captured.out
def test_upgrade_suffix_legacy_venv(pipx_temp_env, capsys, metadata_version): name = "pycowsay" suffix = "_a" assert not run_pipx_cli(["install", name, f"--suffix={suffix}"]) mock_legacy_venv(f"{name}{suffix}", metadata_version=metadata_version) assert run_pipx_cli(["upgrade", f"{name}"]) assert not run_pipx_cli(["upgrade", f"{name}{suffix}"])
def test_list_suffix_legacy_venv(pipx_temp_env, monkeypatch, capsys, metadata_version): suffix = "_x" assert not run_pipx_cli(["install", "pycowsay", f"--suffix={suffix}"]) mock_legacy_venv(f"pycowsay{suffix}", metadata_version=metadata_version) assert not run_pipx_cli(["list"]) captured = capsys.readouterr() assert f"package pycowsay 0.0.0.1 (pycowsay{suffix})," in captured.out
def test_uninstall_legacy_venv(pipx_temp_env, metadata_version): executable_path = constants.LOCAL_BIN_DIR / app_name("pycowsay") assert not run_pipx_cli(["install", "pycowsay"]) assert executable_path.exists() mock_legacy_venv("pycowsay", metadata_version=metadata_version) assert not run_pipx_cli(["uninstall", "pycowsay"]) assert not file_or_symlink(executable_path)
def test_inject_simple_legacy_venv(pipx_temp_env, capsys, metadata_version): assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) if metadata_version is not None: assert not run_pipx_cli(["inject", "pycowsay", PKG["black"]["spec"]]) else: # no metadata in venv should result in PipxError with message assert run_pipx_cli(["inject", "pycowsay", PKG["black"]["spec"]]) assert "Please uninstall and install" in capsys.readouterr().err
def test_uninstall_suffix_legacy_venv(pipx_temp_env, capsys, metadata_version): name = "pbr" suffix = "_a" executable = f"{name}{suffix}{'.exe' if constants.WINDOWS else ''}" assert not run_pipx_cli(["install", "pbr", f"--suffix={suffix}"]) mock_legacy_venv(f"{name}{suffix}", metadata_version=metadata_version) assert (constants.LOCAL_BIN_DIR / executable).exists() assert not run_pipx_cli(["uninstall", f"{name}{suffix}"]) assert not (constants.LOCAL_BIN_DIR / executable).exists()
def test_upgrade_all_legacy_venv(pipx_temp_env, capsys, caplog, metadata_version): assert run_pipx_cli(["upgrade", "pycowsay"]) assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) if metadata_version is None: capsys.readouterr() assert run_pipx_cli(["upgrade-all"]) assert "Error encountered when upgrading pycowsay" in caplog.text else: assert not run_pipx_cli(["upgrade-all"])
def test_uninstall_with_missing_interpreter(pipx_temp_env, metadata_version): executable_path = constants.LOCAL_BIN_DIR / app_name("pycowsay") assert not run_pipx_cli(["install", "pycowsay"]) assert executable_path.exists() mock_legacy_venv("pycowsay", metadata_version=metadata_version) remove_venv_interpreter("pycowsay") assert not run_pipx_cli(["uninstall", "pycowsay"]) # On Windows we cannot remove app binaries if no metadata and no python if not (sys.platform.startswith("win") and metadata_version is None): assert not file_or_symlink(executable_path)
def test_uninstall_suffix_legacy_venv(pipx_temp_env, metadata_version): name = "pbr" # legacy uninstall on Windows only works with "canonical name characters" # in suffix suffix = "-a" executable_path = constants.LOCAL_BIN_DIR / app_name(f"{name}{suffix}") assert not run_pipx_cli(["install", "pbr", f"--suffix={suffix}"]) mock_legacy_venv(f"{name}{suffix}", metadata_version=metadata_version) assert executable_path.exists() assert not run_pipx_cli(["uninstall", f"{name}{suffix}"]) assert not file_or_symlink(executable_path)
def test_upgrade_legacy_venv(pipx_temp_env, capsys, metadata_version): assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) captured = capsys.readouterr() if metadata_version is None: assert run_pipx_cli(["upgrade", "pycowsay"]) captured = capsys.readouterr() assert ( "Not upgrading pycowsay. It has missing internal pipx metadata." in captured.err) else: assert not run_pipx_cli(["upgrade", "pycowsay"]) captured = capsys.readouterr()
def test_uninstall_legacy_venv(pipx_temp_env, capsys, metadata_version): assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) assert not run_pipx_cli(["uninstall", "pycowsay"])
def test_reinstall_legacy_venv(pipx_temp_env, capsys, metadata_version): assert not run_pipx_cli(["install", "pycowsay"]) mock_legacy_venv("pycowsay", metadata_version=metadata_version) assert not run_pipx_cli( ["reinstall", "--python", sys.executable, "pycowsay"])