87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
![]() |
from __future__ import annotations
|
||
|
|
||
|
from importlib.metadata import PackageNotFoundError
|
||
|
from typing import TYPE_CHECKING, Any
|
||
|
from unittest.mock import Mock
|
||
|
|
||
|
from pipdeptree._models import DistPackage, ReqPackage
|
||
|
|
||
|
if TYPE_CHECKING:
|
||
|
from pytest_mock import MockerFixture
|
||
|
|
||
|
|
||
|
def sort_map_values(m: dict[str, Any]) -> dict[str, Any]:
|
||
|
return {k: sorted(v) for k, v in m.items()}
|
||
|
|
||
|
|
||
|
def test_guess_version_setuptools(mocker: MockerFixture) -> None:
|
||
|
mocker.patch("pipdeptree._models.package.version", side_effect=PackageNotFoundError)
|
||
|
result = ReqPackage(mocker.MagicMock(key="setuptools")).installed_version
|
||
|
assert result == "?"
|
||
|
|
||
|
|
||
|
def test_dist_package_render_as_root() -> None:
|
||
|
foo = Mock(key="foo", project_name="foo", version="20.4.1")
|
||
|
dp = DistPackage(foo)
|
||
|
is_frozen = False
|
||
|
assert dp.render_as_root(frozen=is_frozen) == "foo==20.4.1"
|
||
|
|
||
|
|
||
|
def test_dist_package_render_as_branch() -> None:
|
||
|
foo = Mock(key="foo", project_name="foo", version="20.4.1")
|
||
|
bar = Mock(key="bar", project_name="bar", version="4.1.0")
|
||
|
bar_req = Mock(key="bar", project_name="bar", version="4.1.0", specs=[(">=", "4.0")])
|
||
|
rp = ReqPackage(bar_req, dist=bar)
|
||
|
dp = DistPackage(foo).as_parent_of(rp)
|
||
|
is_frozen = False
|
||
|
assert dp.render_as_branch(frozen=is_frozen) == "foo==20.4.1 [requires: bar>=4.0]"
|
||
|
|
||
|
|
||
|
def test_dist_package_as_parent_of() -> None:
|
||
|
foo = Mock(key="foo", project_name="foo", version="20.4.1")
|
||
|
dp = DistPackage(foo)
|
||
|
assert dp.req is None
|
||
|
|
||
|
bar = Mock(key="bar", project_name="bar", version="4.1.0")
|
||
|
bar_req = Mock(key="bar", project_name="bar", version="4.1.0", specs=[(">=", "4.0")])
|
||
|
rp = ReqPackage(bar_req, dist=bar)
|
||
|
dp1 = dp.as_parent_of(rp)
|
||
|
assert dp1._obj == dp._obj # noqa: SLF001
|
||
|
assert dp1.req is rp
|
||
|
|
||
|
dp2 = dp.as_parent_of(None)
|
||
|
assert dp2 is dp
|
||
|
|
||
|
|
||
|
def test_dist_package_as_dict() -> None:
|
||
|
foo = Mock(key="foo", project_name="foo", version="1.3.2b1")
|
||
|
dp = DistPackage(foo)
|
||
|
result = dp.as_dict()
|
||
|
expected = {"key": "foo", "package_name": "foo", "installed_version": "1.3.2b1"}
|
||
|
assert expected == result
|
||
|
|
||
|
|
||
|
def test_req_package_render_as_root() -> None:
|
||
|
bar = Mock(key="bar", project_name="bar", version="4.1.0")
|
||
|
bar_req = Mock(key="bar", project_name="bar", version="4.1.0", specs=[(">=", "4.0")])
|
||
|
rp = ReqPackage(bar_req, dist=bar)
|
||
|
is_frozen = False
|
||
|
assert rp.render_as_root(frozen=is_frozen) == "bar==4.1.0"
|
||
|
|
||
|
|
||
|
def test_req_package_render_as_branch() -> None:
|
||
|
bar = Mock(key="bar", project_name="bar", version="4.1.0")
|
||
|
bar_req = Mock(key="bar", project_name="bar", version="4.1.0", specs=[(">=", "4.0")])
|
||
|
rp = ReqPackage(bar_req, dist=bar)
|
||
|
is_frozen = False
|
||
|
assert rp.render_as_branch(frozen=is_frozen) == "bar [required: >=4.0, installed: 4.1.0]"
|
||
|
|
||
|
|
||
|
def test_req_package_as_dict() -> None:
|
||
|
bar = Mock(key="bar", project_name="bar", version="4.1.0")
|
||
|
bar_req = Mock(key="bar", project_name="bar", version="4.1.0", specs=[(">=", "4.0")])
|
||
|
rp = ReqPackage(bar_req, dist=bar)
|
||
|
result = rp.as_dict()
|
||
|
expected = {"key": "bar", "package_name": "bar", "installed_version": "4.1.0", "required_version": ">=4.0"}
|
||
|
assert expected == result
|