pip/tests/unit/test_command_install.py

123 lines
3.8 KiB
Python

import errno
from unittest import mock
import pytest
from pip._internal.commands import install
from pip._internal.commands.install import create_os_error_message, decide_user_install
class TestDecideUserInstall:
@mock.patch("site.ENABLE_USER_SITE", True)
@mock.patch("pip._internal.commands.install.site_packages_writable")
def test_prefix_and_target(self, sp_writable: mock.Mock) -> None:
sp_writable.return_value = False
assert decide_user_install(use_user_site=None, prefix_path="foo") is False
assert decide_user_install(use_user_site=None, target_dir="bar") is False
@pytest.mark.parametrize(
"enable_user_site,site_packages_writable,result",
[
(True, True, False),
(True, False, True),
(False, True, False),
(False, False, False),
],
)
def test_most_cases(
self,
enable_user_site: bool,
site_packages_writable: bool,
result: bool,
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setattr("site.ENABLE_USER_SITE", enable_user_site)
monkeypatch.setattr(
"pip._internal.commands.install.site_packages_writable",
lambda **kw: site_packages_writable,
)
assert decide_user_install(use_user_site=None) is result
@pytest.mark.parametrize(
"error, show_traceback, using_user_site, expected",
[
# show_traceback = True, using_user_site = True
(
OSError("Illegal byte sequence"),
True,
True,
"Could not install packages due to an OSError.\n",
),
(
OSError(errno.EACCES, "No file permission"),
True,
True,
"Could"
" not install packages due to an OSError.\nCheck the"
" permissions.\n",
),
# show_traceback = True, using_user_site = False
(
OSError("Illegal byte sequence"),
True,
False,
"Could not install packages due to an OSError.\n",
),
(
OSError(errno.EACCES, "No file permission"),
True,
False,
"Could"
" not install packages due to an OSError.\nConsider using the"
" `--user` option or check the permissions.\n",
),
# show_traceback = False, using_user_site = True
(
OSError("Illegal byte sequence"),
False,
True,
"Could not"
" install packages due to an OSError: Illegal byte"
" sequence\n",
),
(
OSError(errno.EACCES, "No file permission"),
False,
True,
"Could"
" not install packages due to an OSError: [Errno 13] No file"
" permission\nCheck the permissions.\n",
),
# show_traceback = False, using_user_site = False
(
OSError("Illegal byte sequence"),
False,
False,
"Could not"
" install packages due to an OSError: Illegal byte sequence"
"\n",
),
(
OSError(errno.EACCES, "No file permission"),
False,
False,
"Could not install packages due to an OSError: [Errno 13] No"
" file permission\nConsider using the `--user` option or check the"
" permissions.\n",
),
],
)
def test_create_os_error_message(
monkeypatch: pytest.MonkeyPatch,
error: OSError,
show_traceback: bool,
using_user_site: bool,
expected: str,
) -> None:
monkeypatch.setattr(install, "running_under_virtualenv", lambda: False)
msg = create_os_error_message(error, show_traceback, using_user_site)
assert msg == expected