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 104 105 106 107 108 109 110 111
|
from itertools import chain
from unittest import mock
import pytest
from pdm import signals
from pdm.models.candidates import Candidate
from pdm.models.repositories import Package
from pdm.models.requirements import Requirement
def test_post_init_signal(project_no_init, pdm):
mock_handler = mock.Mock()
with signals.post_init.connected_to(mock_handler):
result = pdm(["init"], input="\n\n\n\n\n\n\n\n", obj=project_no_init)
assert result.exit_code == 0
mock_handler.assert_called_once_with(project_no_init, hooks=mock.ANY)
@pytest.mark.usefixtures("working_set")
def test_post_lock_and_install_signals(project, pdm):
pre_lock = signals.pre_lock.connect(mock.Mock(), weak=False)
post_lock = signals.post_lock.connect(mock.Mock(), weak=False)
pre_install = signals.pre_install.connect(mock.Mock(), weak=False)
post_install = signals.post_install.connect(mock.Mock(), weak=False)
pdm(["add", "requests"], obj=project, strict=True)
signals.pre_lock.disconnect(pre_lock)
signals.post_lock.disconnect(post_lock)
signals.pre_install.disconnect(pre_install)
signals.post_install.disconnect(post_install)
for mocker in (pre_lock, post_lock, pre_install, post_install):
mocker.assert_called_once()
@pytest.mark.usefixtures("working_set")
def test_lock_and_install_signals_injection_with_add(project, pdm):
pre_lock = signals.pre_lock.connect(mock.Mock(), weak=False)
post_lock = signals.post_lock.connect(mock.Mock(), weak=False)
pre_install = signals.pre_install.connect(mock.Mock(), weak=False)
post_install = signals.post_install.connect(mock.Mock(), weak=False)
pdm(["add", "requests"], obj=project, strict=True)
signals.pre_lock.disconnect(pre_lock)
signals.post_lock.disconnect(post_lock)
signals.pre_install.disconnect(pre_install)
signals.post_install.disconnect(post_install)
assert isinstance(pre_lock.call_args.kwargs["requirements"], list)
assert all(isinstance(e, Requirement) for e in pre_lock.call_args.kwargs["requirements"])
assert len(pre_lock.call_args.kwargs["requirements"]) == 1
assert isinstance(post_lock.call_args.kwargs["resolution"], dict)
assert all(isinstance(e, Candidate) for e in chain.from_iterable(post_lock.call_args.kwargs["resolution"].values()))
assert len(post_lock.call_args.kwargs["resolution"]) == 5
assert isinstance(pre_install.call_args.kwargs["packages"], list)
assert all(isinstance(e, Package) for e in pre_install.call_args.kwargs["packages"])
assert len(pre_install.call_args.kwargs["packages"]) == 5
assert isinstance(post_install.call_args.kwargs["packages"], list)
assert all(isinstance(e, Package) for e in post_install.call_args.kwargs["packages"])
assert len(post_install.call_args.kwargs["packages"]) == 5
@pytest.mark.usefixtures("working_set")
def test_lock_and_install_signals_injection_with_install(project, pdm):
project.add_dependencies(["requests"])
pre_lock = signals.pre_lock.connect(mock.Mock(), weak=False)
post_lock = signals.post_lock.connect(mock.Mock(), weak=False)
pre_install = signals.pre_install.connect(mock.Mock(), weak=False)
post_install = signals.post_install.connect(mock.Mock(), weak=False)
pdm(["install"], obj=project, strict=True)
signals.pre_lock.disconnect(pre_lock)
signals.post_lock.disconnect(post_lock)
signals.pre_install.disconnect(pre_install)
signals.post_install.disconnect(post_install)
assert isinstance(pre_lock.call_args.kwargs["requirements"], list)
assert all(isinstance(e, Requirement) for e in pre_lock.call_args.kwargs["requirements"])
assert len(pre_lock.call_args.kwargs["requirements"]) == 1
assert isinstance(post_lock.call_args.kwargs["resolution"], dict)
assert all(isinstance(e, Candidate) for e in chain.from_iterable(post_lock.call_args.kwargs["resolution"].values()))
assert len(post_lock.call_args.kwargs["resolution"]) == 5
assert isinstance(pre_install.call_args.kwargs["packages"], list)
assert all(isinstance(e, Package) for e in pre_install.call_args.kwargs["packages"])
assert len(pre_install.call_args.kwargs["packages"]) == 5
assert isinstance(post_install.call_args.kwargs["packages"], list)
assert all(isinstance(e, Package) for e in post_install.call_args.kwargs["packages"])
assert len(post_install.call_args.kwargs["packages"]) == 5
@pytest.mark.usefixtures("working_set")
def test_lock_signals_injection_with_update(project, pdm):
project.add_dependencies(["requests"])
pre_lock = signals.pre_lock.connect(mock.Mock(), weak=False)
post_lock = signals.post_lock.connect(mock.Mock(), weak=False)
pdm(["update"], obj=project, strict=True)
signals.pre_lock.disconnect(pre_lock)
signals.post_lock.disconnect(post_lock)
assert isinstance(pre_lock.call_args.kwargs["requirements"], list)
assert all(isinstance(e, Requirement) for e in pre_lock.call_args.kwargs["requirements"])
assert len(pre_lock.call_args.kwargs["requirements"]) == 1
assert isinstance(post_lock.call_args.kwargs["resolution"], dict)
assert all(isinstance(e, Candidate) for e in chain.from_iterable(post_lock.call_args.kwargs["resolution"].values()))
assert len(post_lock.call_args.kwargs["resolution"]) == 5
|