poetry/tests/console/commands/test_show.py

2338 lines
69 KiB
Python

from __future__ import annotations
from typing import TYPE_CHECKING
import pytest
from poetry.core.packages.dependency_group import MAIN_GROUP
from poetry.core.packages.dependency_group import DependencyGroup
from poetry.factory import Factory
from poetry.utils._compat import tomllib
from tests.helpers import MOCK_DEFAULT_GIT_REVISION
from tests.helpers import TestLocker
from tests.helpers import get_package
if TYPE_CHECKING:
from cleo.testers.command_tester import CommandTester
from poetry.poetry import Poetry
from poetry.repositories import Repository
from tests.helpers import TestRepository
from tests.types import CommandTesterFactory
@pytest.fixture
def tester(command_tester_factory: CommandTesterFactory) -> CommandTester:
return command_tester_factory("show")
def test_show_basic_with_installed_packages(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
poetry.package.add_dependency(
Factory.create_dependency("pytest", "^3.7.3", groups=["dev"])
)
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pytest_373 = get_package("pytest", "3.7.3")
pytest_373.description = "Pytest package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(pytest_373)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "3.7.3",
"description": "Pytest package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "pytest": []},
},
}
)
tester.execute()
expected = """\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
pytest 3.7.3 Pytest package
"""
assert tester.io.fetch_output() == expected
def _configure_project_with_groups(poetry: Poetry, installed: Repository) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency_group(DependencyGroup(name="time", optional=True))
poetry.package.add_dependency(
Factory.create_dependency("pendulum", "^2.0.0", groups=["time"])
)
poetry.package.add_dependency(
Factory.create_dependency("pytest", "^3.7.3", groups=["test"])
)
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pytest_373 = get_package("pytest", "3.7.3")
pytest_373.description = "Pytest package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(pytest_373)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "3.7.3",
"description": "Pytest package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "pytest": []},
},
}
)
@pytest.mark.parametrize(
("options", "expected"),
[
(
"",
"""\
cachy 0.1.0 Cachy package
pytest 3.7.3 Pytest package
""",
),
(
"--with time",
"""\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
pytest 3.7.3 Pytest package
""",
),
(
"--without test",
"""\
cachy 0.1.0 Cachy package
""",
),
(
f"--without {MAIN_GROUP}",
"""\
pytest 3.7.3 Pytest package
""",
),
(
f"--only {MAIN_GROUP}",
"""\
cachy 0.1.0 Cachy package
""",
),
(
"--no-dev",
"""\
cachy 0.1.0 Cachy package
""",
),
(
"--with time --without test",
"""\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
""",
),
(
f"--with time --without {MAIN_GROUP},test",
"""\
pendulum 2.0.0 Pendulum package
""",
),
(
"--only time",
"""\
pendulum 2.0.0 Pendulum package
""",
),
(
"--only time --with test",
"""\
pendulum 2.0.0 Pendulum package
""",
),
(
"--with time",
"""\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
pytest 3.7.3 Pytest package
""",
),
],
)
def test_show_basic_with_group_options(
options: str,
expected: str,
tester: CommandTester,
poetry: Poetry,
installed: Repository,
) -> None:
_configure_project_with_groups(poetry, installed)
tester.execute(options)
assert tester.io.fetch_output() == expected
def test_show_basic_with_installed_packages_single(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
installed.add_package(cachy_010)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": []},
},
}
)
tester.execute("cachy")
assert [
"name : cachy",
"version : 0.1.0",
"description : Cachy package",
] == [line.strip() for line in tester.io.fetch_output().splitlines()]
def test_show_basic_with_installed_packages_single_canonicalized(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("foo-bar", "^0.1.0"))
foo_bar = get_package("foo-bar", "0.1.0")
foo_bar.description = "Foobar package"
installed.add_package(foo_bar)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "foo-bar",
"version": "0.1.0",
"description": "Foobar package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"foo-bar": []},
},
}
)
tester.execute("Foo_Bar")
assert [
"name : foo-bar",
"version : 0.1.0",
"description : Foobar package",
] == [line.strip() for line in tester.io.fetch_output().splitlines()]
def test_show_basic_with_not_installed_packages_non_decorated(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(cachy_010)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute()
expected = """\
cachy 0.1.0 Cachy package
pendulum (!) 2.0.0 Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_basic_with_not_installed_packages_decorated(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(cachy_010)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute(decorated=True)
expected = """\
\033[36mcachy \033[39m \033[39;1m0.1.0\033[39;22m Cachy package
\033[31mpendulum\033[39m \033[39;1m2.0.0\033[39;22m Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_latest_non_decorated(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pendulum_201 = get_package("pendulum", "2.0.1")
pendulum_201.description = "Pendulum package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
repo.add_package(pendulum_201)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--latest")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
pendulum 2.0.0 2.0.1 Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_latest_decorated(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pendulum_201 = get_package("pendulum", "2.0.1")
pendulum_201.description = "Pendulum package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
repo.add_package(pendulum_201)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--latest", decorated=True)
expected = """\
\033[36mcachy \033[39m \033[39;1m0.1.0\033[39;22m\
\033[33m0.2.0\033[39m Cachy package
\033[36mpendulum\033[39m \033[39;1m2.0.0\033[39;22m\
\033[31m2.0.1\033[39m Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_outdated(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_outdated_with_only_up_to_date_packages(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
installed.add_package(cachy_020)
repo.add_package(cachy_020)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": []},
},
}
)
tester.execute("--outdated")
expected = ""
assert tester.io.fetch_output() == expected
def test_show_outdated_has_prerelease_but_not_allowed(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
cachy_030dev = get_package("cachy", "0.3.0.dev123")
cachy_030dev.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
# sorting isn't used, so this has to be the first element to
# replicate the issue in PR #1548
repo.add_package(cachy_030dev)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_outdated_has_prerelease_and_allowed(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(
Factory.create_dependency(
"cachy", {"version": ">=0.0.1", "allow-prereleases": True}
)
)
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010dev = get_package("cachy", "0.1.0.dev1")
cachy_010dev.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
cachy_030dev = get_package("cachy", "0.3.0.dev123")
cachy_030dev.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(cachy_010dev)
installed.add_package(pendulum_200)
# sorting isn't used, so this has to be the first element to
# replicate the issue in PR #1548
repo.add_package(cachy_030dev)
repo.add_package(cachy_010dev)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0.dev1",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.1.0.dev1 0.3.0.dev123 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_outdated_formatting(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pendulum_201 = get_package("pendulum", "2.0.1")
pendulum_201.description = "Pendulum package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
repo.add_package(pendulum_201)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
pendulum 2.0.0 2.0.1 Pendulum package
"""
assert tester.io.fetch_output() == expected
@pytest.mark.parametrize(
("project_directory", "required_fixtures"),
[
(
"project_with_local_dependencies",
["distributions/demo-0.1.0-py2.py3-none-any.whl", "project_with_setup"],
),
],
)
def test_show_outdated_local_dependencies(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
cachy_030 = get_package("cachy", "0.3.0")
cachy_030.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
demo_010 = get_package("demo", "0.1.0")
demo_010.description = ""
my_package_011 = get_package("project-with-setup", "0.1.1")
my_package_011.description = "Demo project."
installed.add_package(cachy_020)
installed.add_package(pendulum_200)
installed.add_package(demo_010)
installed.add_package(my_package_011)
repo.add_package(cachy_020)
repo.add_package(cachy_030)
repo.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "demo",
"version": "0.1.0",
"description": "Demo package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"source": {
"type": "file",
"reference": "",
"url": "../distributions/demo-0.1.0-py2.py3-none-any.whl",
},
},
{
"name": "project-with-setup",
"version": "0.1.1",
"description": "Demo project.",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {
"pendulum": ">=1.4.4",
"cachy": {"version": ">=0.2.0", "extras": ["msgpack"]},
},
"source": {
"type": "directory",
"reference": "",
"url": "../project_with_setup",
},
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {
"cachy": [],
"pendulum": [],
"demo": [],
"project-with-setup": [],
},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.2.0 0.3.0
project-with-setup 0.1.1 ../project_with_setup 0.1.2 ../project_with_setup
"""
assert (
"\n".join(line.rstrip() for line in tester.io.fetch_output().splitlines())
== expected.rstrip()
)
@pytest.mark.parametrize("project_directory", ["project_with_git_dev_dependency"])
def test_show_outdated_git_dev_dependency(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
demo_011 = get_package("demo", "0.1.1")
demo_011.description = "Demo package"
pytest = get_package("pytest", "3.4.3")
pytest.description = "Pytest"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(demo_011)
installed.add_package(pytest)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
repo.add_package(pytest)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "demo",
"version": "0.1.1",
"description": "Demo package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"source": {
"type": "git",
"reference": MOCK_DEFAULT_GIT_REVISION,
"resolved_reference": MOCK_DEFAULT_GIT_REVISION,
"url": "https://github.com/demo/demo.git",
},
},
{
"name": "pytest",
"version": "3.4.3",
"description": "Pytest",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "demo": [], "pytest": []},
},
}
)
tester.execute("--outdated")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
demo 0.1.1 9cf87a2 0.1.2 9cf87a2 Demo package
"""
assert tester.io.fetch_output() == expected
@pytest.mark.parametrize("project_directory", ["project_with_git_dev_dependency"])
def test_show_outdated_no_dev_git_dev_dependency(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
cachy_020 = get_package("cachy", "0.2.0")
cachy_020.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
demo_011 = get_package("demo", "0.1.1")
demo_011.description = "Demo package"
pytest = get_package("pytest", "3.4.3")
pytest.description = "Pytest"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(demo_011)
installed.add_package(pytest)
repo.add_package(cachy_010)
repo.add_package(cachy_020)
repo.add_package(pendulum_200)
repo.add_package(pytest)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "demo",
"version": "0.1.1",
"description": "Demo package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"source": {
"type": "git",
"reference": MOCK_DEFAULT_GIT_REVISION,
"url": "https://github.com/demo/pyproject-demo.git",
},
},
{
"name": "pytest",
"version": "3.4.3",
"description": "Pytest",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "demo": [], "pytest": []},
},
}
)
tester.execute("--outdated --without dev")
expected = """\
cachy 0.1.0 0.2.0 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_hides_incompatible_package(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(
Factory.create_dependency("cachy", {"version": "^0.1.0", "python": "< 2.0"})
)
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute()
expected = """\
pendulum 2.0.0 Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_all_shows_incompatible_package(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
installed.add_package(pendulum_200)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"requirements": {"python": "1.0"},
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": []},
},
}
)
tester.execute("--all")
expected = """\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_hides_incompatible_package_with_duplicate(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(
Factory.create_dependency("cachy", {"version": "0.1.0", "platform": "linux"})
)
poetry.package.add_dependency(
Factory.create_dependency("cachy", {"version": "0.1.1", "platform": "darwin"})
)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"files": [],
},
{
"name": "cachy",
"version": "0.1.1",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"files": [],
},
],
"metadata": {"content-hash": "123456789"},
}
)
tester.execute()
expected = """\
cachy (!) 0.1.1 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_all_shows_all_duplicates(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
poetry.package.add_dependency(
Factory.create_dependency("cachy", {"version": "0.1.0", "platform": "linux"})
)
poetry.package.add_dependency(
Factory.create_dependency("cachy", {"version": "0.1.1", "platform": "darwin"})
)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"files": [],
},
{
"name": "cachy",
"version": "0.1.1",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"files": [],
},
],
"metadata": {"content-hash": "123456789"},
}
)
tester.execute("--all")
expected = """\
cachy 0.1.0 Cachy package
cachy (!) 0.1.1 Cachy package
"""
assert tester.io.fetch_output() == expected
def test_show_non_dev_with_basic_installed_packages(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
poetry.package.add_dependency(
Factory.create_dependency("pytest", "*", groups=["dev"])
)
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pytest_373 = get_package("pytest", "3.7.3")
pytest_373.description = "Pytest package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(pytest_373)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "3.7.3",
"description": "Pytest package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "pytest": []},
},
}
)
tester.execute("--without dev")
expected = """\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
"""
assert tester.io.fetch_output() == expected
def test_show_with_group_only(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
poetry.package.add_dependency(
Factory.create_dependency("pytest", "*", groups=["dev"])
)
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pytest_373 = get_package("pytest", "3.7.3")
pytest_373.description = "Pytest package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(pytest_373)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "3.7.3",
"description": "Pytest package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "pytest": []},
},
}
)
tester.execute("--only dev")
expected = """\
pytest 3.7.3 Pytest package
"""
assert tester.io.fetch_output() == expected
def test_show_with_optional_group(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "^2.0.0"))
group = DependencyGroup("dev", optional=True)
group.add_dependency(Factory.create_dependency("pytest", "*", groups=["dev"]))
poetry.package.add_dependency_group(group)
cachy_010 = get_package("cachy", "0.1.0")
cachy_010.description = "Cachy package"
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
pytest_373 = get_package("pytest", "3.7.3")
pytest_373.description = "Pytest package"
installed.add_package(cachy_010)
installed.add_package(pendulum_200)
installed.add_package(pytest_373)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.1.0",
"description": "Cachy package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "3.7.3",
"description": "Pytest package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "pytest": []},
},
}
)
tester.execute()
expected = """\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
"""
assert tester.io.fetch_output() == expected
tester.execute("--with dev")
expected = """\
cachy 0.1.0 Cachy package
pendulum 2.0.0 Pendulum package
pytest 3.7.3 Pytest package
"""
assert tester.io.fetch_output() == expected
def test_show_tree(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0"))
cachy2 = get_package("cachy", "0.2.0")
cachy2.add_dependency(Factory.create_dependency("msgpack-python", ">=0.5 <0.6"))
installed.add_package(cachy2)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"msgpack-python": ">=0.5 <0.6"},
},
{
"name": "msgpack-python",
"version": "0.5.1",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "msgpack-python": []},
},
}
)
tester.execute("--tree", supports_utf8=False)
expected = """\
cachy 0.2.0
`-- msgpack-python >=0.5 <0.6
"""
assert tester.io.fetch_output() == expected
def test_show_tree_no_dev(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0"))
poetry.package.add_dependency(
Factory.create_dependency("pytest", "^6.1.0", groups=["dev"])
)
cachy2 = get_package("cachy", "0.2.0")
cachy2.add_dependency(Factory.create_dependency("msgpack-python", ">=0.5 <0.6"))
installed.add_package(cachy2)
pytest = get_package("pytest", "6.1.1")
installed.add_package(pytest)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"msgpack-python": ">=0.5 <0.6"},
},
{
"name": "msgpack-python",
"version": "0.5.1",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
{
"name": "pytest",
"version": "6.1.1",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "msgpack-python": [], "pytest": []},
},
}
)
tester.execute("--tree --without dev")
expected = """\
cachy 0.2.0
└── msgpack-python >=0.5 <0.6
"""
assert tester.io.fetch_output() == expected
def test_show_tree_why_package(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("a", "=0.0.1"))
a = get_package("a", "0.0.1")
installed.add_package(a)
a.add_dependency(Factory.create_dependency("b", "=0.0.1"))
b = get_package("b", "0.0.1")
a.add_dependency(Factory.create_dependency("c", "=0.0.1"))
installed.add_package(b)
c = get_package("c", "0.0.1")
installed.add_package(c)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "a",
"version": "0.0.1",
"dependencies": {"b": "=0.0.1"},
"python-versions": "*",
"optional": False,
},
{
"name": "b",
"version": "0.0.1",
"dependencies": {"c": "=0.0.1"},
"python-versions": "*",
"optional": False,
},
{
"name": "c",
"version": "0.0.1",
"python-versions": "*",
"optional": False,
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"a": [], "b": [], "c": []},
},
}
)
tester.execute("--tree --why b")
expected = """\
a 0.0.1
└── b =0.0.1
└── c =0.0.1 \n"""
assert tester.io.fetch_output() == expected
def test_show_tree_why(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("a", "=0.0.1"))
a = get_package("a", "0.0.1")
installed.add_package(a)
a.add_dependency(Factory.create_dependency("b", "=0.0.1"))
b = get_package("b", "0.0.1")
a.add_dependency(Factory.create_dependency("c", "=0.0.1"))
installed.add_package(b)
c = get_package("c", "0.0.1")
installed.add_package(c)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "a",
"version": "0.0.1",
"dependencies": {"b": "=0.0.1"},
"python-versions": "*",
"optional": False,
},
{
"name": "b",
"version": "0.0.1",
"dependencies": {"c": "=0.0.1"},
"python-versions": "*",
"optional": False,
},
{
"name": "c",
"version": "0.0.1",
"python-versions": "*",
"optional": False,
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"a": [], "b": [], "c": []},
},
}
)
tester.execute("--why")
# this has to be on a single line due to the padding whitespace, which gets stripped
# by pre-commit.
expected = """a 0.0.1 \nb 0.0.1 from a \nc 0.0.1 from b \n"""
assert tester.io.fetch_output() == expected
def test_show_required_by_deps(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0"))
poetry.package.add_dependency(Factory.create_dependency("pendulum", "2.0.0"))
cachy2 = get_package("cachy", "0.2.0")
cachy2.add_dependency(Factory.create_dependency("msgpack-python", ">=0.5 <0.6"))
pendulum = get_package("pendulum", "2.0.0")
pendulum.add_dependency(Factory.create_dependency("CachY", "^0.2.0"))
installed.add_package(cachy2)
installed.add_package(pendulum)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"msgpack-python": ">=0.5 <0.6"},
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"cachy": ">=0.2.0 <0.3.0"},
},
{
"name": "msgpack-python",
"version": "0.5.1",
"description": "",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "pendulum": [], "msgpack-python": []},
},
}
)
tester.execute("cachy")
expected = """\
name : cachy
version : 0.2.0
description :
dependencies
- msgpack-python >=0.5 <0.6
required by
- pendulum >=0.2.0 <0.3.0
""".splitlines()
actual = [line.rstrip() for line in tester.io.fetch_output().splitlines()]
assert actual == expected
def test_show_errors_without_lock_file(tester: CommandTester, poetry: Poetry) -> None:
assert not poetry.locker.lock.exists()
tester.execute()
expected = "Error: poetry.lock not found. Run `poetry lock` to create it.\n"
assert tester.io.fetch_error() == expected
assert tester.status_code == 1
def test_show_dependency_installed_from_git_in_dev(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
# Add a regular dependency for a package in main, and a git dependency for the same
# package in dev.
poetry.package.add_dependency(Factory.create_dependency("demo", "^0.1.1"))
poetry.package.add_dependency(
Factory.create_dependency(
"demo", {"git": "https://github.com/demo/demo.git"}, groups=["dev"]
)
)
demo_011 = get_package("demo", "0.1.1")
demo_011.description = "Demo package"
repo.add_package(demo_011)
pendulum_200 = get_package("pendulum", "2.0.0")
pendulum_200.description = "Pendulum package"
repo.add_package(pendulum_200)
# The git package is the one that gets into the lockfile.
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "demo",
"version": "0.1.2",
"description": "Demo package",
"optional": False,
"python-versions": "*",
"develop": False,
"source": {
"type": "git",
"reference": MOCK_DEFAULT_GIT_REVISION,
"resolved_reference": MOCK_DEFAULT_GIT_REVISION,
"url": "https://github.com/demo/demo.git",
},
},
{
"name": "pendulum",
"version": "2.0.0",
"description": "Pendulum package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"demo": [], "pendulum": []},
},
}
)
# Nothing needs updating, there is no confusion between the git and not-git
# packages.
tester.execute("--outdated")
assert tester.io.fetch_output() == ""
def test_url_dependency_is_not_outdated_by_repository_package(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
demo_url = "https://python-poetry.org/distributions/demo-0.1.0-py2.py3-none-any.whl"
poetry.package.add_dependency(
Factory.create_dependency(
"demo",
{"url": demo_url},
)
)
# A newer version of demo is available in the repository.
demo_100 = get_package("demo", "1.0.0")
repo.add_package(demo_100)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "demo",
"version": "0.1.0",
"description": "Demo package",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"source": {
"type": "url",
"url": demo_url,
},
}
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"hashes": {"demo": []},
},
}
)
# The url dependency on demo is not made outdated by the existence of a newer
# version in the repository.
tester.execute("--outdated")
assert tester.io.fetch_output() == ""
def test_show_top_level(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("cachy", "^0.2.0"))
cachy2 = get_package("cachy", "0.2.0")
cachy2.add_dependency(Factory.create_dependency("msgpack-python", ">=0.5 <0.6"))
installed.add_package(cachy2)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "cachy",
"version": "0.2.0",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"msgpack-python": ">=0.5 <0.6"},
},
{
"name": "msgpack-python",
"version": "0.5.1",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"cachy": [], "msgpack-python": []},
},
}
)
tester.execute("--top-level")
expected = """cachy 0.2.0 \n"""
assert tester.io.fetch_output() == expected
def test_show_top_level_with_explicitly_defined_depenancy(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
poetry.package.add_dependency(Factory.create_dependency("a", "^0.1.0"))
poetry.package.add_dependency(Factory.create_dependency("b", "^0.2.0"))
a = get_package("a", "0.1.0")
a.add_dependency(Factory.create_dependency("b", "0.2.0"))
b = get_package("b", "0.2.0")
installed.add_package(a)
installed.add_package(b)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "a",
"version": "0.1.0",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {"b": "0.2.0"},
},
{
"name": "b",
"version": "0.2.0",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"a": [], "b": []},
},
}
)
tester.execute("--top-level")
expected = """a 0.1.0 \nb 0.2.0 \n"""
assert tester.io.fetch_output() == expected
def test_show_top_level_with_extras(
tester: CommandTester, poetry: Poetry, installed: Repository
) -> None:
black_dep = Factory.create_dependency(
"black", {"version": "23.3.0", "extras": ["d"]}
)
poetry.package.add_dependency(black_dep)
black_package = get_package("black", "23.3.0")
black_package.add_dependency(
Factory.create_dependency(
"aiohttp",
{
"version": ">=3.7.4",
"optional": True,
"markers": 'extra == "d"',
},
)
)
installed.add_package(black_package)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(
{
"package": [
{
"name": "black",
"version": "23.3.0",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
"dependencies": {
"aiohttp": {
"version": ">=3.7.4",
"optional": True,
"markers": 'extra == "d"',
}
},
},
{
"name": "aiohttp",
"version": "3.8.4",
"description": "",
"category": "main",
"optional": False,
"platform": "*",
"python-versions": "*",
"checksum": [],
},
],
"metadata": {
"python-versions": "*",
"platform": "*",
"content-hash": "123456789",
"files": {"black": [], "aiohttp": []},
},
}
)
tester.execute("--top-level")
expected = """black 23.3.0 \n"""
assert tester.io.fetch_output() == expected
def test_show_error_top_level_with_tree(tester: CommandTester) -> None:
expected = "Error: Cannot use --tree and --top-level at the same time.\n"
tester.execute("--top-level --tree")
assert tester.io.fetch_error() == expected
assert tester.status_code == 1
def test_show_error_top_level_with_single_package(tester: CommandTester) -> None:
expected = "Error: Cannot use --top-level when displaying a single package.\n"
tester.execute("--top-level some_package_name")
assert tester.io.fetch_error() == expected
assert tester.status_code == 1
@pytest.mark.parametrize(
("project_directory", "required_fixtures"),
[
(
"deleted_directory_dependency",
[],
),
],
)
def test_show_outdated_missing_directory_dependency(
tester: CommandTester,
poetry: Poetry,
installed: Repository,
repo: TestRepository,
) -> None:
with (poetry.pyproject.file.path.parent / "poetry.lock").open(mode="rb") as f:
data = tomllib.load(f)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.mock_lock_data(data)
poetry.package.add_dependency(
Factory.create_dependency(
"missing",
{"path": data["package"][0]["source"]["url"]},
)
)
with pytest.raises(ValueError, match="does not exist"):
tester.execute("")