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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import pytest
from pdm.cli import actions
from pdm.exceptions import PdmException, PdmUsageError
from pdm.models.specifiers import PySpecSet
def test_remove_command(project, invoke, mocker):
do_remove = mocker.patch.object(actions, "do_remove")
invoke(["remove", "demo"], obj=project)
do_remove.assert_called_once()
@pytest.mark.usefixtures("repository", "working_set", "vcs")
def test_remove_editable_packages_while_keeping_normal(project):
project.environment.python_requires = PySpecSet(">=3.6")
actions.do_add(project, packages=["demo"])
actions.do_add(
project,
True,
editables=["git+https://github.com/test-root/demo.git#egg=demo"],
)
dev_group = project.tool_settings["dev-dependencies"]["dev"]
default_group = project.meta["dependencies"]
actions.do_remove(project, True, packages=["demo"])
assert not dev_group
assert len(default_group) == 1
assert not project.locked_repository.all_candidates["demo"].req.editable
@pytest.mark.usefixtures("repository")
def test_remove_package(project, working_set, is_dev):
actions.do_add(project, dev=is_dev, packages=["requests", "pytz"])
actions.do_remove(project, dev=is_dev, packages=["pytz"])
locked_candidates = project.locked_repository.all_candidates
assert "pytz" not in locked_candidates
assert "pytz" not in working_set
@pytest.mark.usefixtures("repository")
def test_remove_package_with_dry_run(project, working_set, capsys):
actions.do_add(project, packages=["requests"])
actions.do_remove(project, packages=["requests"], dry_run=True)
out, _ = capsys.readouterr()
project._lockfile = None
locked_candidates = project.locked_repository.all_candidates
assert "urllib3" in locked_candidates
assert "urllib3" in working_set
assert "- urllib3 1.22" in out
@pytest.mark.usefixtures("repository")
def test_remove_package_no_sync(project, working_set):
actions.do_add(project, packages=["requests", "pytz"])
actions.do_remove(project, sync=False, packages=["pytz"])
locked_candidates = project.locked_repository.all_candidates
assert "pytz" not in locked_candidates
assert "pytz" in working_set
@pytest.mark.usefixtures("repository", "working_set")
def test_remove_package_not_exist(project):
actions.do_add(project, packages=["requests", "pytz"])
with pytest.raises(PdmException):
actions.do_remove(project, sync=False, packages=["django"])
@pytest.mark.usefixtures("repository")
def test_remove_package_exist_in_multi_groups(project, working_set):
actions.do_add(project, packages=["requests"])
actions.do_add(project, dev=True, packages=["urllib3"])
actions.do_remove(project, dev=True, packages=["urllib3"])
assert all(
"urllib3" not in line
for line in project.tool_settings["dev-dependencies"]["dev"]
)
assert "urllib3" in working_set
assert "requests" in working_set
@pytest.mark.usefixtures("repository")
def test_add_remove_no_package(project):
with pytest.raises(PdmUsageError):
actions.do_add(project, packages=())
with pytest.raises(PdmUsageError):
actions.do_remove(project, packages=())
@pytest.mark.usefixtures("repository", "working_set")
def test_remove_package_wont_break_toml(project_no_init):
project_no_init.pyproject_file.write_text(
"""
[project]
dependencies = [
"requests",
# this is a comment
]
"""
)
project_no_init.pyproject = None
actions.do_remove(project_no_init, packages=["requests"])
assert project_no_init.pyproject["project"]["dependencies"] == []
|