Commit 3855bc58 by Randy Döring

tests: consistently use fixture_dir

parent 4c377351
...@@ -282,6 +282,11 @@ def http() -> Iterator[type[httpretty.httpretty]]: ...@@ -282,6 +282,11 @@ def http() -> Iterator[type[httpretty.httpretty]]:
yield httpretty yield httpretty
@pytest.fixture
def project_root() -> Path:
return Path(__file__).parent.parent
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def fixture_base() -> Path: def fixture_base() -> Path:
return Path(__file__).parent / "fixtures" return Path(__file__).parent / "fixtures"
...@@ -417,11 +422,6 @@ def project_factory( ...@@ -417,11 +422,6 @@ def project_factory(
return _factory return _factory
@pytest.fixture
def project_root() -> Path:
return Path(__file__).parent.parent
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def set_simple_log_formatter() -> None: def set_simple_log_formatter() -> None:
""" """
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -20,12 +19,11 @@ if TYPE_CHECKING: ...@@ -20,12 +19,11 @@ if TYPE_CHECKING:
from tests.helpers import TestRepository from tests.helpers import TestRepository
from tests.types import CommandTesterFactory from tests.types import CommandTesterFactory
from tests.types import FixtureDirGetter
FIXTURES = Path(__file__).parent.joinpath("fixtures")
@pytest.fixture
@pytest.fixture() def setup(mocker: MockerFixture, fixture_dir: FixtureDirGetter) -> None:
def setup(mocker: MockerFixture, fixture_dir: Path):
mocker.patch.object( mocker.patch.object(
Executor, Executor,
"_download", "_download",
...@@ -46,7 +44,7 @@ def test_self_update_can_update_from_recommended_installation( ...@@ -46,7 +44,7 @@ def test_self_update_can_update_from_recommended_installation(
tester: CommandTester, tester: CommandTester,
repo: TestRepository, repo: TestRepository,
installed: TestRepository, installed: TestRepository,
): ) -> None:
new_version = Version.parse(__version__).next_minor().text new_version = Version.parse(__version__).next_minor().text
old_poetry = Package("poetry", __version__) old_poetry = Package("poetry", __version__)
......
...@@ -3,23 +3,26 @@ from __future__ import annotations ...@@ -3,23 +3,26 @@ from __future__ import annotations
import shutil import shutil
import tarfile import tarfile
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from poetry.factory import Factory from poetry.factory import Factory
if TYPE_CHECKING: if TYPE_CHECKING:
from pathlib import Path
from poetry.utils.env import VirtualEnv from poetry.utils.env import VirtualEnv
from tests.types import CommandTesterFactory from tests.types import CommandTesterFactory
from tests.types import FixtureDirGetter
def test_build_with_multiple_readme_files( def test_build_with_multiple_readme_files(
tmp_path: Path, tmp_venv: VirtualEnv, command_tester_factory: CommandTesterFactory fixture_dir: FixtureDirGetter,
): tmp_path: Path,
source_dir = ( tmp_venv: VirtualEnv,
Path(__file__).parent.parent.parent / "fixtures" / "with_multiple_readme_files" command_tester_factory: CommandTesterFactory,
) ) -> None:
source_dir = fixture_dir("with_multiple_readme_files")
target_dir = tmp_path / "project" target_dir = tmp_path / "project"
shutil.copytree(str(source_dir), str(target_dir)) shutil.copytree(str(source_dir), str(target_dir))
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -11,6 +10,7 @@ if TYPE_CHECKING: ...@@ -11,6 +10,7 @@ if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from tests.types import CommandTesterFactory from tests.types import CommandTesterFactory
from tests.types import FixtureDirGetter
@pytest.fixture() @pytest.fixture()
...@@ -18,7 +18,7 @@ def tester(command_tester_factory: CommandTesterFactory) -> CommandTester: ...@@ -18,7 +18,7 @@ def tester(command_tester_factory: CommandTesterFactory) -> CommandTester:
return command_tester_factory("check") return command_tester_factory("check")
def test_check_valid(tester: CommandTester): def test_check_valid(tester: CommandTester) -> None:
tester.execute() tester.execute()
expected = """\ expected = """\
...@@ -28,17 +28,14 @@ All set! ...@@ -28,17 +28,14 @@ All set!
assert tester.io.fetch_output() == expected assert tester.io.fetch_output() == expected
def test_check_invalid(mocker: MockerFixture, tester: CommandTester): def test_check_invalid(
mocker: MockerFixture, tester: CommandTester, fixture_dir: FixtureDirGetter
) -> None:
from poetry.toml import TOMLFile from poetry.toml import TOMLFile
mocker.patch( mocker.patch(
"poetry.poetry.Poetry.file", "poetry.poetry.Poetry.file",
return_value=TOMLFile( return_value=TOMLFile(fixture_dir("invalid_pyproject") / "pyproject.toml"),
Path(__file__).parent.parent.parent
/ "fixtures"
/ "invalid_pyproject"
/ "pyproject.toml"
),
new_callable=mocker.PropertyMock, new_callable=mocker.PropertyMock,
) )
...@@ -61,13 +58,12 @@ Warning: Deprecated classifier\ ...@@ -61,13 +58,12 @@ Warning: Deprecated classifier\
assert tester.io.fetch_error() == expected assert tester.io.fetch_error() == expected
def test_check_private(mocker: MockerFixture, tester: CommandTester): def test_check_private(
mocker: MockerFixture, tester: CommandTester, fixture_dir: FixtureDirGetter
) -> None:
mocker.patch( mocker.patch(
"poetry.factory.Factory.locate", "poetry.factory.Factory.locate",
return_value=Path(__file__).parent.parent.parent return_value=fixture_dir("private_pyproject") / "pyproject.toml",
/ "fixtures"
/ "private_pyproject"
/ "pyproject.toml",
) )
tester.execute() tester.execute()
......
...@@ -2,7 +2,6 @@ from __future__ import annotations ...@@ -2,7 +2,6 @@ from __future__ import annotations
import os import os
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -22,6 +21,7 @@ from tests.helpers import mock_clone ...@@ -22,6 +21,7 @@ from tests.helpers import mock_clone
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import Iterator from collections.abc import Iterator
from pathlib import Path
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
...@@ -31,6 +31,7 @@ if TYPE_CHECKING: ...@@ -31,6 +31,7 @@ if TYPE_CHECKING:
from poetry.utils.env import Env from poetry.utils.env import Env
from tests.conftest import Config from tests.conftest import Config
from tests.types import CommandTesterFactory from tests.types import CommandTesterFactory
from tests.types import FixtureDirGetter
from tests.types import ProjectFactory from tests.types import ProjectFactory
...@@ -96,11 +97,12 @@ def project_directory() -> str: ...@@ -96,11 +97,12 @@ def project_directory() -> str:
@pytest.fixture @pytest.fixture
def poetry(project_directory: str, project_factory: ProjectFactory) -> Poetry: def poetry(
return project_factory( project_directory: str,
name="simple", project_factory: ProjectFactory,
source=Path(__file__).parent.parent / "fixtures" / project_directory, fixture_dir: FixtureDirGetter,
) ) -> Poetry:
return project_factory(name="simple", source=fixture_dir(project_directory))
@pytest.fixture @pytest.fixture
......
...@@ -68,13 +68,6 @@ def get_dependency( ...@@ -68,13 +68,6 @@ def get_dependency(
return Factory.create_dependency(name, constraint or "*", groups=groups) return Factory.create_dependency(name, constraint or "*", groups=groups)
def fixture(path: str | None = None) -> Path:
if path:
return FIXTURE_PATH / path
else:
return FIXTURE_PATH
def copy_or_symlink(source: Path, dest: Path) -> None: def copy_or_symlink(source: Path, dest: Path) -> None:
if dest.is_symlink() or dest.is_file(): if dest.is_symlink() or dest.is_file():
dest.unlink() # missing_ok is only available in Python >= 3.8 dest.unlink() # missing_ok is only available in Python >= 3.8
...@@ -113,7 +106,7 @@ def mock_clone( ...@@ -113,7 +106,7 @@ def mock_clone(
parsed = ParsedUrl.parse(url) parsed = ParsedUrl.parse(url)
path = re.sub(r"(.git)?$", "", parsed.pathname.lstrip("/")) path = re.sub(r"(.git)?$", "", parsed.pathname.lstrip("/"))
folder = Path(__file__).parent / "fixtures" / "git" / parsed.resource / path folder = FIXTURE_PATH / "git" / parsed.resource / path
if not source_root: if not source_root:
source_root = Path(Config.create().get("cache-dir")) / "src" source_root = Path(Config.create().get("cache-dir")) / "src"
...@@ -128,8 +121,7 @@ def mock_clone( ...@@ -128,8 +121,7 @@ def mock_clone(
def mock_download(url: str, dest: Path) -> None: def mock_download(url: str, dest: Path) -> None:
parts = urllib.parse.urlparse(url) parts = urllib.parse.urlparse(url)
fixtures = Path(__file__).parent / "fixtures" fixture = FIXTURE_PATH / parts.path.lstrip("/")
fixture = fixtures / parts.path.lstrip("/")
copy_or_symlink(fixture, dest) copy_or_symlink(fixture, dest)
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from subprocess import CalledProcessError from subprocess import CalledProcessError
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
...@@ -13,10 +12,11 @@ from poetry.utils.env import VirtualEnv ...@@ -13,10 +12,11 @@ from poetry.utils.env import VirtualEnv
if TYPE_CHECKING: if TYPE_CHECKING:
from pathlib import Path
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
FIXTURE_DIR_BASE = Path(__file__).parent.parent / "fixtures" from tests.types import FixtureDirGetter
FIXTURE_DIR_INSPECTIONS = FIXTURE_DIR_BASE / "inspection"
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
...@@ -25,13 +25,13 @@ def pep517_metadata_mock() -> None: ...@@ -25,13 +25,13 @@ def pep517_metadata_mock() -> None:
@pytest.fixture @pytest.fixture
def demo_sdist() -> Path: def demo_sdist(fixture_dir: FixtureDirGetter) -> Path:
return FIXTURE_DIR_BASE / "distributions" / "demo-0.1.0.tar.gz" return fixture_dir("distributions") / "demo-0.1.0.tar.gz"
@pytest.fixture @pytest.fixture
def demo_wheel() -> Path: def demo_wheel(fixture_dir: FixtureDirGetter) -> Path:
return FIXTURE_DIR_BASE / "distributions" / "demo-0.1.0-py2.py3-none-any.whl" return fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl"
@pytest.fixture @pytest.fixture
...@@ -128,15 +128,15 @@ def test_info_from_bdist(demo_wheel: Path) -> None: ...@@ -128,15 +128,15 @@ def test_info_from_bdist(demo_wheel: Path) -> None:
demo_check_info(info) demo_check_info(info)
def test_info_from_poetry_directory() -> None: def test_info_from_poetry_directory(fixture_dir: FixtureDirGetter) -> None:
info = PackageInfo.from_directory( info = PackageInfo.from_directory(
FIXTURE_DIR_INSPECTIONS / "demo", disable_build=True fixture_dir("inspection") / "demo", disable_build=True
) )
demo_check_info(info) demo_check_info(info)
def test_info_from_poetry_directory_fallback_on_poetry_create_error( def test_info_from_poetry_directory_fallback_on_poetry_create_error(
mocker: MockerFixture, mocker: MockerFixture, fixture_dir: FixtureDirGetter
) -> None: ) -> None:
mock_create_poetry = mocker.patch( mock_create_poetry = mocker.patch(
"poetry.inspection.info.Factory.create_poetry", side_effect=RuntimeError "poetry.inspection.info.Factory.create_poetry", side_effect=RuntimeError
...@@ -146,16 +146,16 @@ def test_info_from_poetry_directory_fallback_on_poetry_create_error( ...@@ -146,16 +146,16 @@ def test_info_from_poetry_directory_fallback_on_poetry_create_error(
"poetry.inspection.info.get_pep517_metadata" "poetry.inspection.info.get_pep517_metadata"
) )
PackageInfo.from_directory(FIXTURE_DIR_INSPECTIONS / "demo_poetry_package") PackageInfo.from_directory(fixture_dir("inspection") / "demo_poetry_package")
assert mock_create_poetry.call_count == 1 assert mock_create_poetry.call_count == 1
assert mock_get_poetry_package.call_count == 1 assert mock_get_poetry_package.call_count == 1
assert mock_get_pep517_metadata.call_count == 1 assert mock_get_pep517_metadata.call_count == 1
def test_info_from_requires_txt() -> None: def test_info_from_requires_txt(fixture_dir: FixtureDirGetter) -> None:
info = PackageInfo.from_metadata( info = PackageInfo.from_metadata(
FIXTURE_DIR_INSPECTIONS / "demo_only_requires_txt.egg-info" fixture_dir("inspection") / "demo_only_requires_txt.egg-info"
) )
assert info is not None assert info is not None
demo_check_info(info) demo_check_info(info)
...@@ -171,9 +171,9 @@ def test_info_from_setup_cfg(demo_setup_cfg: Path) -> None: ...@@ -171,9 +171,9 @@ def test_info_from_setup_cfg(demo_setup_cfg: Path) -> None:
demo_check_info(info, requires_dist={"package"}) demo_check_info(info, requires_dist={"package"})
def test_info_no_setup_pkg_info_no_deps() -> None: def test_info_no_setup_pkg_info_no_deps(fixture_dir: FixtureDirGetter) -> None:
info = PackageInfo.from_directory( info = PackageInfo.from_directory(
FIXTURE_DIR_INSPECTIONS / "demo_no_setup_pkg_info_no_deps", fixture_dir("inspection") / "demo_no_setup_pkg_info_no_deps",
disable_build=True, disable_build=True,
) )
assert info.name == "demo" assert info.name == "demo"
...@@ -250,8 +250,8 @@ def test_info_setup_missing_mandatory_should_trigger_pep517( ...@@ -250,8 +250,8 @@ def test_info_setup_missing_mandatory_should_trigger_pep517(
assert spy.call_count == 1 assert spy.call_count == 1
def test_info_prefer_poetry_config_over_egg_info() -> None: def test_info_prefer_poetry_config_over_egg_info(fixture_dir: FixtureDirGetter) -> None:
info = PackageInfo.from_directory( info = PackageInfo.from_directory(
FIXTURE_DIR_INSPECTIONS / "demo_with_obsolete_egg_info" fixture_dir("inspection") / "demo_with_obsolete_egg_info"
) )
demo_check_info(info) demo_check_info(info)
...@@ -24,6 +24,7 @@ if TYPE_CHECKING: ...@@ -24,6 +24,7 @@ if TYPE_CHECKING:
from poetry.utils.env import VirtualEnv from poetry.utils.env import VirtualEnv
from tests.conftest import Config from tests.conftest import Config
from tests.types import FixtureDirGetter
@pytest.fixture @pytest.fixture
...@@ -278,7 +279,10 @@ def test_install_with_trusted_host(config: Config, env: NullEnv) -> None: ...@@ -278,7 +279,10 @@ def test_install_with_trusted_host(config: Config, env: NullEnv) -> None:
def test_install_directory_fallback_on_poetry_create_error( def test_install_directory_fallback_on_poetry_create_error(
mocker: MockerFixture, tmp_venv: VirtualEnv, pool: RepositoryPool mocker: MockerFixture,
tmp_venv: VirtualEnv,
pool: RepositoryPool,
fixture_dir: FixtureDirGetter,
) -> None: ) -> None:
mock_create_poetry = mocker.patch( mock_create_poetry = mocker.patch(
"poetry.factory.Factory.create_poetry", side_effect=RuntimeError "poetry.factory.Factory.create_poetry", side_effect=RuntimeError
...@@ -293,9 +297,7 @@ def test_install_directory_fallback_on_poetry_create_error( ...@@ -293,9 +297,7 @@ def test_install_directory_fallback_on_poetry_create_error(
"demo", "demo",
"1.0.0", "1.0.0",
source_type="directory", source_type="directory",
source_url=str( source_url=str(fixture_dir("inspection") / "demo_poetry_package"),
Path(__file__).parent.parent / "fixtures/inspection/demo_poetry_package"
),
) )
installer = PipInstaller(tmp_venv, NullIO(), pool) installer = PipInstaller(tmp_venv, NullIO(), pool)
......
...@@ -28,51 +28,40 @@ if TYPE_CHECKING: ...@@ -28,51 +28,40 @@ if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from poetry.poetry import Poetry from poetry.poetry import Poetry
from tests.types import FixtureDirGetter
@pytest.fixture() @pytest.fixture()
def simple_poetry() -> Poetry: def simple_poetry(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("simple_project"))
Path(__file__).parent.parent.parent / "fixtures" / "simple_project"
)
return poetry return poetry
@pytest.fixture() @pytest.fixture()
def project_with_include() -> Poetry: def project_with_include(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("with-include"))
Path(__file__).parent.parent.parent / "fixtures" / "with-include"
)
return poetry return poetry
@pytest.fixture() @pytest.fixture()
def extended_poetry() -> Poetry: def extended_poetry(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("extended_project"))
Path(__file__).parent.parent.parent / "fixtures" / "extended_project"
)
return poetry return poetry
@pytest.fixture() @pytest.fixture()
def extended_without_setup_poetry() -> Poetry: def extended_without_setup_poetry(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("extended_project_without_setup"))
Path(__file__).parent.parent.parent
/ "fixtures"
/ "extended_project_without_setup"
)
return poetry return poetry
@pytest.fixture @pytest.fixture
def with_multiple_readme_files() -> Poetry: def with_multiple_readme_files(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("with_multiple_readme_files"))
Path(__file__).parent.parent.parent / "fixtures" / "with_multiple_readme_files"
)
return poetry return poetry
...@@ -235,9 +224,11 @@ def test_builder_falls_back_on_setup_and_pip_for_packages_with_build_scripts( ...@@ -235,9 +224,11 @@ def test_builder_falls_back_on_setup_and_pip_for_packages_with_build_scripts(
assert [] == env.executed assert [] == env.executed
def test_builder_setup_generation_runs_with_pip_editable(tmp_path: Path) -> None: def test_builder_setup_generation_runs_with_pip_editable(
fixture_dir: FixtureDirGetter, tmp_path: Path
) -> None:
# create an isolated copy of the project # create an isolated copy of the project
fixture = Path(__file__).parent.parent.parent / "fixtures" / "extended_project" fixture = fixture_dir("extended_project")
extended_project = tmp_path / "extended_project" extended_project = tmp_path / "extended_project"
shutil.copytree(fixture, extended_project) shutil.copytree(fixture, extended_project)
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from poetry.factory import Factory from poetry.factory import Factory
...@@ -13,6 +12,7 @@ if TYPE_CHECKING: ...@@ -13,6 +12,7 @@ if TYPE_CHECKING:
from poetry.repositories import Repository from poetry.repositories import Repository
from tests.mixology.version_solver.conftest import Provider from tests.mixology.version_solver.conftest import Provider
from tests.types import FixtureDirGetter
def test_no_version_matching_constraint( def test_no_version_matching_constraint(
...@@ -94,11 +94,13 @@ Because myapp depends on both foo (1.0.0) and foo (2.0.0), version solving faile ...@@ -94,11 +94,13 @@ Because myapp depends on both foo (1.0.0) and foo (2.0.0), version solving faile
def test_disjoint_root_constraints_path_dependencies( def test_disjoint_root_constraints_path_dependencies(
root: ProjectPackage, provider: Provider, repo: Repository root: ProjectPackage,
provider: Provider,
repo: Repository,
fixture_dir: FixtureDirGetter,
) -> None: ) -> None:
provider.set_package_python_versions("^3.7") provider.set_package_python_versions("^3.7")
fixtures = Path(__file__).parent.parent.parent / "fixtures" project_dir = fixture_dir("with_conditional_path_deps")
project_dir = fixtures.joinpath("with_conditional_path_deps")
dependency1 = Factory.create_dependency("demo", {"path": project_dir / "demo_one"}) dependency1 = Factory.create_dependency("demo", {"path": project_dir / "demo_one"})
root.add_dependency(dependency1) root.add_dependency(dependency1)
dependency2 = Factory.create_dependency("demo", {"path": project_dir / "demo_two"}) dependency2 = Factory.create_dependency("demo", {"path": project_dir / "demo_two"})
......
...@@ -737,14 +737,13 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77 ...@@ -737,14 +737,13 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77
def test_root_extras_dependencies_are_ordered( def test_root_extras_dependencies_are_ordered(
locker: Locker, root: ProjectPackage locker: Locker, root: ProjectPackage, fixture_base: Path
) -> None: ) -> None:
root_dir = Path(__file__).parent.parent.joinpath("fixtures") Factory.create_dependency("B", "1.0.0", root_dir=fixture_base)
Factory.create_dependency("B", "1.0.0", root_dir=root_dir) Factory.create_dependency("C", "1.0.0", root_dir=fixture_base)
Factory.create_dependency("C", "1.0.0", root_dir=root_dir) package_first = Factory.create_dependency("first", "1.0.0", root_dir=fixture_base)
package_first = Factory.create_dependency("first", "1.0.0", root_dir=root_dir) package_second = Factory.create_dependency("second", "1.0.0", root_dir=fixture_base)
package_second = Factory.create_dependency("second", "1.0.0", root_dir=root_dir) package_third = Factory.create_dependency("third", "1.0.0", root_dir=fixture_base)
package_third = Factory.create_dependency("third", "1.0.0", root_dir=root_dir)
root.extras = { root.extras = {
"C": [package_third, package_second, package_first], "C": [package_third, package_second, package_first],
...@@ -834,25 +833,24 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77 ...@@ -834,25 +833,24 @@ content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77
def test_locker_dumps_dependency_information_correctly( def test_locker_dumps_dependency_information_correctly(
locker: Locker, root: ProjectPackage locker: Locker, root: ProjectPackage, fixture_base: Path
) -> None: ) -> None:
root_dir = Path(__file__).parent.parent.joinpath("fixtures")
package_a = get_package("A", "1.0.0") package_a = get_package("A", "1.0.0")
package_a.add_dependency( package_a.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"B", {"path": "project_with_extras", "develop": True}, root_dir=root_dir "B", {"path": "project_with_extras", "develop": True}, root_dir=fixture_base
) )
) )
package_a.add_dependency( package_a.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"C", "C",
{"path": "directory/project_with_transitive_directory_dependencies"}, {"path": "directory/project_with_transitive_directory_dependencies"},
root_dir=root_dir, root_dir=fixture_base,
) )
) )
package_a.add_dependency( package_a.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"D", {"path": "distributions/demo-0.1.0.tar.gz"}, root_dir=root_dir "D", {"path": "distributions/demo-0.1.0.tar.gz"}, root_dir=fixture_base
) )
) )
package_a.add_dependency( package_a.add_dependency(
...@@ -969,15 +967,14 @@ content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8 ...@@ -969,15 +967,14 @@ content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
def test_locker_dumps_dependency_extras_in_correct_order( def test_locker_dumps_dependency_extras_in_correct_order(
locker: Locker, root: ProjectPackage locker: Locker, root: ProjectPackage, fixture_base: Path
) -> None: ) -> None:
root_dir = Path(__file__).parent.parent.joinpath("fixtures")
package_a = get_package("A", "1.0.0") package_a = get_package("A", "1.0.0")
Factory.create_dependency("B", "1.0.0", root_dir=root_dir) Factory.create_dependency("B", "1.0.0", root_dir=fixture_base)
Factory.create_dependency("C", "1.0.0", root_dir=root_dir) Factory.create_dependency("C", "1.0.0", root_dir=fixture_base)
package_first = Factory.create_dependency("first", "1.0.0", root_dir=root_dir) package_first = Factory.create_dependency("first", "1.0.0", root_dir=fixture_base)
package_second = Factory.create_dependency("second", "1.0.0", root_dir=root_dir) package_second = Factory.create_dependency("second", "1.0.0", root_dir=fixture_base)
package_third = Factory.create_dependency("third", "1.0.0", root_dir=root_dir) package_third = Factory.create_dependency("third", "1.0.0", root_dir=fixture_base)
package_a.extras = { package_a.extras = {
"C": [package_third, package_second, package_first], "C": [package_third, package_second, package_first],
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -21,8 +20,7 @@ if TYPE_CHECKING: ...@@ -21,8 +20,7 @@ if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from tests.conftest import Config from tests.conftest import Config
from tests.types import FixtureDirGetter
CWD = Path(__file__).parent.parent / "fixtures" / "simple_project"
class ManagerFactory(Protocol): class ManagerFactory(Protocol):
...@@ -46,13 +44,14 @@ class InvalidPlugin: ...@@ -46,13 +44,14 @@ class InvalidPlugin:
poetry.package.version = "9.9.9" poetry.package.version = "9.9.9"
@pytest.fixture() @pytest.fixture
def poetry(tmp_path: Path, config: Config) -> Poetry: def poetry(fixture_dir: FixtureDirGetter, config: Config) -> Poetry:
project_path = fixture_dir("simple_project")
poetry = Poetry( poetry = Poetry(
CWD / "pyproject.toml", project_path / "pyproject.toml",
{}, {},
ProjectPackage("simple-project", "1.2.3"), ProjectPackage("simple-project", "1.2.3"),
Locker(CWD / "poetry.lock", {}), Locker(project_path / "poetry.lock", {}),
config, config,
) )
...@@ -82,7 +81,7 @@ def test_load_plugins_and_activate( ...@@ -82,7 +81,7 @@ def test_load_plugins_and_activate(
poetry: Poetry, poetry: Poetry,
io: BufferedIO, io: BufferedIO,
with_my_plugin: None, with_my_plugin: None,
): ) -> None:
manager = manager_factory() manager = manager_factory()
manager.load_plugins() manager.load_plugins()
manager.activate(poetry, io) manager.activate(poetry, io)
...@@ -106,7 +105,7 @@ def test_load_plugins_with_invalid_plugin( ...@@ -106,7 +105,7 @@ def test_load_plugins_with_invalid_plugin(
poetry: Poetry, poetry: Poetry,
io: BufferedIO, io: BufferedIO,
with_invalid_plugin: None, with_invalid_plugin: None,
): ) -> None:
manager = manager_factory() manager = manager_factory()
with pytest.raises(ValueError): with pytest.raises(ValueError):
...@@ -118,7 +117,7 @@ def test_load_plugins_with_plugins_disabled( ...@@ -118,7 +117,7 @@ def test_load_plugins_with_plugins_disabled(
poetry: Poetry, poetry: Poetry,
io: BufferedIO, io: BufferedIO,
with_my_plugin: None, with_my_plugin: None,
): ) -> None:
no_plugin_manager.load_plugins() no_plugin_manager.load_plugins()
assert poetry.package.version.text == "1.2.3" assert poetry.package.version.text == "1.2.3"
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from subprocess import CalledProcessError from subprocess import CalledProcessError
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
...@@ -29,6 +28,8 @@ from tests.helpers import get_dependency ...@@ -29,6 +28,8 @@ from tests.helpers import get_dependency
if TYPE_CHECKING: if TYPE_CHECKING:
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from tests.types import FixtureDirGetter
SOME_URL = "https://example.com/path.tar.gz" SOME_URL = "https://example.com/path.tar.gz"
...@@ -157,7 +158,7 @@ def test_search_for_direct_origin_and_extras( ...@@ -157,7 +158,7 @@ def test_search_for_direct_origin_and_extras(
@pytest.mark.parametrize("value", [True, False]) @pytest.mark.parametrize("value", [True, False])
def test_search_for_vcs_retains_develop_flag(provider: Provider, value: bool): def test_search_for_vcs_retains_develop_flag(provider: Provider, value: bool) -> None:
dependency = VCSDependency( dependency = VCSDependency(
"demo", "git", "https://github.com/demo/demo.git", develop=value "demo", "git", "https://github.com/demo/demo.git", develop=value
) )
...@@ -165,7 +166,7 @@ def test_search_for_vcs_retains_develop_flag(provider: Provider, value: bool): ...@@ -165,7 +166,7 @@ def test_search_for_vcs_retains_develop_flag(provider: Provider, value: bool):
assert package.develop == value assert package.develop == value
def test_search_for_vcs_setup_egg_info(provider: Provider): def test_search_for_vcs_setup_egg_info(provider: Provider) -> None:
dependency = VCSDependency("demo", "git", "https://github.com/demo/demo.git") dependency = VCSDependency("demo", "git", "https://github.com/demo/demo.git")
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -183,7 +184,7 @@ def test_search_for_vcs_setup_egg_info(provider: Provider): ...@@ -183,7 +184,7 @@ def test_search_for_vcs_setup_egg_info(provider: Provider):
} }
def test_search_for_vcs_setup_egg_info_with_extras(provider: Provider): def test_search_for_vcs_setup_egg_info_with_extras(provider: Provider) -> None:
dependency = VCSDependency( dependency = VCSDependency(
"demo", "git", "https://github.com/demo/demo.git", extras=["foo"] "demo", "git", "https://github.com/demo/demo.git", extras=["foo"]
) )
...@@ -203,7 +204,7 @@ def test_search_for_vcs_setup_egg_info_with_extras(provider: Provider): ...@@ -203,7 +204,7 @@ def test_search_for_vcs_setup_egg_info_with_extras(provider: Provider):
} }
def test_search_for_vcs_read_setup(provider: Provider, mocker: MockerFixture): def test_search_for_vcs_read_setup(provider: Provider, mocker: MockerFixture) -> None:
mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())
dependency = VCSDependency("demo", "git", "https://github.com/demo/demo.git") dependency = VCSDependency("demo", "git", "https://github.com/demo/demo.git")
...@@ -225,7 +226,7 @@ def test_search_for_vcs_read_setup(provider: Provider, mocker: MockerFixture): ...@@ -225,7 +226,7 @@ def test_search_for_vcs_read_setup(provider: Provider, mocker: MockerFixture):
def test_search_for_vcs_read_setup_with_extras( def test_search_for_vcs_read_setup_with_extras(
provider: Provider, mocker: MockerFixture provider: Provider, mocker: MockerFixture
): ) -> None:
mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())
dependency = VCSDependency( dependency = VCSDependency(
...@@ -245,7 +246,7 @@ def test_search_for_vcs_read_setup_with_extras( ...@@ -245,7 +246,7 @@ def test_search_for_vcs_read_setup_with_extras(
def test_search_for_vcs_read_setup_raises_error_if_no_version( def test_search_for_vcs_read_setup_raises_error_if_no_version(
provider: Provider, mocker: MockerFixture provider: Provider, mocker: MockerFixture
): ) -> None:
mocker.patch( mocker.patch(
"poetry.inspection.info.get_pep517_metadata", "poetry.inspection.info.get_pep517_metadata",
return_value=PackageInfo(name="demo", version=None), return_value=PackageInfo(name="demo", version=None),
...@@ -258,15 +259,12 @@ def test_search_for_vcs_read_setup_raises_error_if_no_version( ...@@ -258,15 +259,12 @@ def test_search_for_vcs_read_setup_raises_error_if_no_version(
@pytest.mark.parametrize("directory", ["demo", "non-canonical-name"]) @pytest.mark.parametrize("directory", ["demo", "non-canonical-name"])
def test_search_for_directory_setup_egg_info(provider: Provider, directory: str): def test_search_for_directory_setup_egg_info(
provider: Provider, directory: str, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / directory,
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ directory,
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -284,15 +282,12 @@ def test_search_for_directory_setup_egg_info(provider: Provider, directory: str) ...@@ -284,15 +282,12 @@ def test_search_for_directory_setup_egg_info(provider: Provider, directory: str)
} }
def test_search_for_directory_setup_egg_info_with_extras(provider: Provider): def test_search_for_directory_setup_egg_info_with_extras(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / "demo",
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo",
extras=["foo"], extras=["foo"],
) )
...@@ -312,21 +307,13 @@ def test_search_for_directory_setup_egg_info_with_extras(provider: Provider): ...@@ -312,21 +307,13 @@ def test_search_for_directory_setup_egg_info_with_extras(provider: Provider):
@pytest.mark.parametrize("directory", ["demo", "non-canonical-name"]) @pytest.mark.parametrize("directory", ["demo", "non-canonical-name"])
def test_search_for_directory_setup_with_base(provider: Provider, directory: str): def test_search_for_directory_setup_with_base(
provider: Provider, directory: str, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / directory,
/ "fixtures" base=fixture_dir("git") / "github.com" / "demo" / directory,
/ "git"
/ "github.com"
/ "demo"
/ directory,
base=Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ directory,
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -342,29 +329,17 @@ def test_search_for_directory_setup_with_base(provider: Provider, directory: str ...@@ -342,29 +329,17 @@ def test_search_for_directory_setup_with_base(provider: Provider, directory: str
"foo": [get_dependency("cleo")], "foo": [get_dependency("cleo")],
"bar": [get_dependency("tomlkit")], "bar": [get_dependency("tomlkit")],
} }
assert package.root_dir == ( assert package.root_dir == (fixture_dir("git") / "github.com" / "demo" / directory)
Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ directory
)
def test_search_for_directory_setup_read_setup( def test_search_for_directory_setup_read_setup(
provider: Provider, mocker: MockerFixture provider: Provider, mocker: MockerFixture, fixture_dir: FixtureDirGetter
): ) -> None:
mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / "demo",
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo",
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -383,18 +358,13 @@ def test_search_for_directory_setup_read_setup( ...@@ -383,18 +358,13 @@ def test_search_for_directory_setup_read_setup(
def test_search_for_directory_setup_read_setup_with_extras( def test_search_for_directory_setup_read_setup_with_extras(
provider: Provider, mocker: MockerFixture provider: Provider, mocker: MockerFixture, fixture_dir: FixtureDirGetter
): ) -> None:
mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv())
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / "demo",
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo",
extras=["foo"], extras=["foo"],
) )
...@@ -413,15 +383,12 @@ def test_search_for_directory_setup_read_setup_with_extras( ...@@ -413,15 +383,12 @@ def test_search_for_directory_setup_read_setup_with_extras(
} }
def test_search_for_directory_setup_read_setup_with_no_dependencies(provider: Provider): def test_search_for_directory_setup_read_setup_with_no_dependencies(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("git") / "github.com" / "demo" / "no-dependencies",
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "no-dependencies",
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -432,10 +399,12 @@ def test_search_for_directory_setup_read_setup_with_no_dependencies(provider: Pr ...@@ -432,10 +399,12 @@ def test_search_for_directory_setup_read_setup_with_no_dependencies(provider: Pr
assert package.extras == {} assert package.extras == {}
def test_search_for_directory_poetry(provider: Provider): def test_search_for_directory_poetry(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"project-with-extras", "project-with-extras",
Path(__file__).parent.parent / "fixtures" / "project_with_extras", fixture_dir("project_with_extras"),
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -460,10 +429,12 @@ def test_search_for_directory_poetry(provider: Provider): ...@@ -460,10 +429,12 @@ def test_search_for_directory_poetry(provider: Provider):
} }
def test_search_for_directory_poetry_with_extras(provider: Provider): def test_search_for_directory_poetry_with_extras(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = DirectoryDependency( dependency = DirectoryDependency(
"project-with-extras", "project-with-extras",
Path(__file__).parent.parent / "fixtures" / "project_with_extras", fixture_dir("project_with_extras"),
extras=["extras_a"], extras=["extras_a"],
) )
...@@ -489,13 +460,12 @@ def test_search_for_directory_poetry_with_extras(provider: Provider): ...@@ -489,13 +460,12 @@ def test_search_for_directory_poetry_with_extras(provider: Provider):
} }
def test_search_for_file_sdist(provider: Provider): def test_search_for_file_sdist(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = FileDependency( dependency = FileDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("distributions") / "demo-0.1.0.tar.gz",
/ "fixtures"
/ "distributions"
/ "demo-0.1.0.tar.gz",
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -520,13 +490,12 @@ def test_search_for_file_sdist(provider: Provider): ...@@ -520,13 +490,12 @@ def test_search_for_file_sdist(provider: Provider):
} }
def test_search_for_file_sdist_with_extras(provider: Provider): def test_search_for_file_sdist_with_extras(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = FileDependency( dependency = FileDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("distributions") / "demo-0.1.0.tar.gz",
/ "fixtures"
/ "distributions"
/ "demo-0.1.0.tar.gz",
extras=["foo"], extras=["foo"],
) )
...@@ -552,13 +521,12 @@ def test_search_for_file_sdist_with_extras(provider: Provider): ...@@ -552,13 +521,12 @@ def test_search_for_file_sdist_with_extras(provider: Provider):
} }
def test_search_for_file_wheel(provider: Provider): def test_search_for_file_wheel(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = FileDependency( dependency = FileDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl",
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl",
) )
package = provider.search_for_direct_origin_dependency(dependency) package = provider.search_for_direct_origin_dependency(dependency)
...@@ -583,13 +551,12 @@ def test_search_for_file_wheel(provider: Provider): ...@@ -583,13 +551,12 @@ def test_search_for_file_wheel(provider: Provider):
} }
def test_search_for_file_wheel_with_extras(provider: Provider): def test_search_for_file_wheel_with_extras(
provider: Provider, fixture_dir: FixtureDirGetter
) -> None:
dependency = FileDependency( dependency = FileDependency(
"demo", "demo",
Path(__file__).parent.parent fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl",
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl",
extras=["foo"], extras=["foo"],
) )
...@@ -639,10 +606,9 @@ def test_complete_package_does_not_merge_different_source_names( ...@@ -639,10 +606,9 @@ def test_complete_package_does_not_merge_different_source_names(
def test_complete_package_preserves_source_type( def test_complete_package_preserves_source_type(
provider: Provider, root: ProjectPackage provider: Provider, root: ProjectPackage, fixture_dir: FixtureDirGetter
) -> None: ) -> None:
fixtures = Path(__file__).parent.parent / "fixtures" project_dir = fixture_dir("with_conditional_path_deps")
project_dir = fixtures.joinpath("with_conditional_path_deps")
for folder in ["demo_one", "demo_two"]: for folder in ["demo_one", "demo_two"]:
path = (project_dir / folder).as_posix() path = (project_dir / folder).as_posix()
root.add_dependency(Factory.create_dependency("demo", {"path": path})) root.add_dependency(Factory.create_dependency("demo", {"path": path}))
...@@ -737,7 +703,7 @@ def test_complete_package_with_extras_preserves_source_name( ...@@ -737,7 +703,7 @@ def test_complete_package_with_extras_preserves_source_name(
@pytest.mark.parametrize("with_extra", [False, True]) @pytest.mark.parametrize("with_extra", [False, True])
def test_complete_package_fetches_optional_vcs_dependency_only_if_requested( def test_complete_package_fetches_optional_vcs_dependency_only_if_requested(
provider: Provider, repository: Repository, mocker: MockerFixture, with_extra: bool provider: Provider, repository: Repository, mocker: MockerFixture, with_extra: bool
): ) -> None:
optional_vcs_dependency = Factory.create_dependency( optional_vcs_dependency = Factory.create_dependency(
"demo", {"git": "https://github.com/demo/demo.git", "optional": True} "demo", {"git": "https://github.com/demo/demo.git", "optional": True}
) )
......
...@@ -2,7 +2,6 @@ from __future__ import annotations ...@@ -2,7 +2,6 @@ from __future__ import annotations
import re import re
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from typing import Any from typing import Any
...@@ -43,6 +42,7 @@ if TYPE_CHECKING: ...@@ -43,6 +42,7 @@ if TYPE_CHECKING:
from poetry.installation.operations.operation import Operation from poetry.installation.operations.operation import Operation
from poetry.puzzle.provider import Provider from poetry.puzzle.provider import Provider
from poetry.puzzle.transaction import Transaction from poetry.puzzle.transaction import Transaction
from tests.types import FixtureDirGetter
DEFAULT_SOURCE_REF = ( DEFAULT_SOURCE_REF = (
VCSDependency("poetry", "git", "git@github.com:python-poetry/poetry.git").branch VCSDependency("poetry", "git", "git@github.com:python-poetry/poetry.git").branch
...@@ -115,7 +115,7 @@ def check_solver_result( ...@@ -115,7 +115,7 @@ def check_solver_result(
def test_solver_install_single( def test_solver_install_single(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -128,7 +128,7 @@ def test_solver_install_single( ...@@ -128,7 +128,7 @@ def test_solver_install_single(
def test_solver_remove_if_no_longer_locked( def test_solver_remove_if_no_longer_locked(
package: ProjectPackage, pool: RepositoryPool, io: NullIO package: ProjectPackage, pool: RepositoryPool, io: NullIO
): ) -> None:
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
solver = Solver(package, pool, [package_a], [package_a], io) solver = Solver(package, pool, [package_a], [package_a], io)
...@@ -139,7 +139,7 @@ def test_solver_remove_if_no_longer_locked( ...@@ -139,7 +139,7 @@ def test_solver_remove_if_no_longer_locked(
def test_remove_non_installed( def test_remove_non_installed(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
repo.add_package(package_a) repo.add_package(package_a)
...@@ -151,7 +151,7 @@ def test_remove_non_installed( ...@@ -151,7 +151,7 @@ def test_remove_non_installed(
def test_install_non_existing_package_fail( def test_install_non_existing_package_fail(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("B", "1")) package.add_dependency(Factory.create_dependency("B", "1"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -163,7 +163,7 @@ def test_install_non_existing_package_fail( ...@@ -163,7 +163,7 @@ def test_install_non_existing_package_fail(
def test_install_unpublished_package_does_not_fail( def test_install_unpublished_package_does_not_fail(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency(Factory.create_dependency("B", "1")) package.add_dependency(Factory.create_dependency("B", "1"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -188,7 +188,9 @@ def test_install_unpublished_package_does_not_fail( ...@@ -188,7 +188,9 @@ def test_install_unpublished_package_does_not_fail(
) )
def test_solver_with_deps(solver: Solver, repo: Repository, package: ProjectPackage): def test_solver_with_deps(
solver: Solver, repo: Repository, package: ProjectPackage
) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -214,7 +216,7 @@ def test_solver_with_deps(solver: Solver, repo: Repository, package: ProjectPack ...@@ -214,7 +216,7 @@ def test_solver_with_deps(solver: Solver, repo: Repository, package: ProjectPack
def test_install_honours_not_equal( def test_install_honours_not_equal(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -244,7 +246,7 @@ def test_install_honours_not_equal( ...@@ -244,7 +246,7 @@ def test_install_honours_not_equal(
def test_install_with_deps_in_order( def test_install_with_deps_in_order(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
package.add_dependency(Factory.create_dependency("C", "*")) package.add_dependency(Factory.create_dependency("C", "*"))
...@@ -275,7 +277,7 @@ def test_install_with_deps_in_order( ...@@ -275,7 +277,7 @@ def test_install_with_deps_in_order(
def test_install_installed( def test_install_installed(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -291,7 +293,7 @@ def test_install_installed( ...@@ -291,7 +293,7 @@ def test_install_installed(
def test_update_installed( def test_update_installed(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -309,7 +311,7 @@ def test_update_installed( ...@@ -309,7 +311,7 @@ def test_update_installed(
def test_update_with_use_latest( def test_update_with_use_latest(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -337,7 +339,9 @@ def test_update_with_use_latest( ...@@ -337,7 +339,9 @@ def test_update_with_use_latest(
) )
def test_solver_sets_groups(solver: Solver, repo: Repository, package: ProjectPackage): def test_solver_sets_groups(
solver: Solver, repo: Repository, package: ProjectPackage
) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*", groups=["dev"])) package.add_dependency(Factory.create_dependency("B", "*", groups=["dev"]))
...@@ -368,7 +372,7 @@ def test_solver_sets_groups(solver: Solver, repo: Repository, package: ProjectPa ...@@ -368,7 +372,7 @@ def test_solver_sets_groups(solver: Solver, repo: Repository, package: ProjectPa
def test_solver_respects_root_package_python_versions( def test_solver_respects_root_package_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~3.4") set_package_python_versions(solver.provider, "~3.4")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -401,7 +405,7 @@ def test_solver_respects_root_package_python_versions( ...@@ -401,7 +405,7 @@ def test_solver_respects_root_package_python_versions(
def test_solver_fails_if_mismatch_root_python_versions( def test_solver_fails_if_mismatch_root_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "^3.4") set_package_python_versions(solver.provider, "^3.4")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -423,7 +427,7 @@ def test_solver_fails_if_mismatch_root_python_versions( ...@@ -423,7 +427,7 @@ def test_solver_fails_if_mismatch_root_python_versions(
def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versions( def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versions(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~3.8") set_package_python_versions(solver.provider, "~3.8")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "1.0", "python": "<3.8"}) Factory.create_dependency("A", {"version": "1.0", "python": "<3.8"})
...@@ -447,7 +451,7 @@ def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versio ...@@ -447,7 +451,7 @@ def test_solver_ignores_python_restricted_if_mismatch_root_package_python_versio
def test_solver_solves_optional_and_compatible_packages( def test_solver_solves_optional_and_compatible_packages(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~3.4") set_package_python_versions(solver.provider, "~3.4")
package.extras["foo"] = [get_dependency("B")] package.extras["foo"] = [get_dependency("B")]
package.add_dependency( package.add_dependency(
...@@ -482,7 +486,7 @@ def test_solver_solves_optional_and_compatible_packages( ...@@ -482,7 +486,7 @@ def test_solver_solves_optional_and_compatible_packages(
def test_solver_does_not_return_extras_if_not_requested( def test_solver_does_not_return_extras_if_not_requested(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -509,7 +513,7 @@ def test_solver_does_not_return_extras_if_not_requested( ...@@ -509,7 +513,7 @@ def test_solver_does_not_return_extras_if_not_requested(
def test_solver_returns_extras_if_requested( def test_solver_returns_extras_if_requested(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency( package.add_dependency(
Factory.create_dependency("B", {"version": "*", "extras": ["foo"]}) Factory.create_dependency("B", {"version": "*", "extras": ["foo"]})
...@@ -549,7 +553,7 @@ def test_solver_returns_extras_only_requested( ...@@ -549,7 +553,7 @@ def test_solver_returns_extras_only_requested(
repo: Repository, repo: Repository,
package: ProjectPackage, package: ProjectPackage,
enabled_extra: bool | None, enabled_extra: bool | None,
): ) -> None:
extras = [enabled_extra] if enabled_extra is not None else [] extras = [enabled_extra] if enabled_extra is not None else []
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
...@@ -611,7 +615,7 @@ def test_solver_returns_extras_when_multiple_extras_use_same_dependency( ...@@ -611,7 +615,7 @@ def test_solver_returns_extras_when_multiple_extras_use_same_dependency(
repo: Repository, repo: Repository,
package: ProjectPackage, package: ProjectPackage,
enabled_extra: bool | None, enabled_extra: bool | None,
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -660,7 +664,7 @@ def test_solver_returns_extras_only_requested_nested( ...@@ -660,7 +664,7 @@ def test_solver_returns_extras_only_requested_nested(
repo: Repository, repo: Repository,
package: ProjectPackage, package: ProjectPackage,
enabled_extra: bool | None, enabled_extra: bool | None,
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -715,7 +719,7 @@ def test_solver_returns_extras_only_requested_nested( ...@@ -715,7 +719,7 @@ def test_solver_returns_extras_only_requested_nested(
def test_solver_finds_extras_next_to_non_extras( def test_solver_finds_extras_next_to_non_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
# Root depends on A[foo] # Root depends on A[foo]
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "*", "extras": ["foo"]}) Factory.create_dependency("A", {"version": "*", "extras": ["foo"]})
...@@ -762,7 +766,7 @@ def test_solver_finds_extras_next_to_non_extras( ...@@ -762,7 +766,7 @@ def test_solver_finds_extras_next_to_non_extras(
def test_solver_merge_extras_into_base_package_multiple_repos_fixes_5727( def test_solver_merge_extras_into_base_package_multiple_repos_fixes_5727(
solver: Solver, repo: Repository, pool: RepositoryPool, package: ProjectPackage solver: Solver, repo: Repository, pool: RepositoryPool, package: ProjectPackage
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "*", "source": "legacy"}) Factory.create_dependency("A", {"version": "*", "source": "legacy"})
) )
...@@ -794,7 +798,7 @@ def test_solver_merge_extras_into_base_package_multiple_repos_fixes_5727( ...@@ -794,7 +798,7 @@ def test_solver_merge_extras_into_base_package_multiple_repos_fixes_5727(
def test_solver_returns_extras_if_excluded_by_markers_without_extras( def test_solver_returns_extras_if_excluded_by_markers_without_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "*", "extras": ["foo"]}) Factory.create_dependency("A", {"version": "*", "extras": ["foo"]})
) )
...@@ -833,7 +837,7 @@ def test_solver_returns_extras_if_excluded_by_markers_without_extras( ...@@ -833,7 +837,7 @@ def test_solver_returns_extras_if_excluded_by_markers_without_extras(
def test_solver_returns_prereleases_if_requested( def test_solver_returns_prereleases_if_requested(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
package.add_dependency( package.add_dependency(
...@@ -864,7 +868,7 @@ def test_solver_returns_prereleases_if_requested( ...@@ -864,7 +868,7 @@ def test_solver_returns_prereleases_if_requested(
def test_solver_does_not_return_prereleases_if_not_requested( def test_solver_does_not_return_prereleases_if_not_requested(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
package.add_dependency(Factory.create_dependency("C", "*")) package.add_dependency(Factory.create_dependency("C", "*"))
...@@ -893,7 +897,7 @@ def test_solver_does_not_return_prereleases_if_not_requested( ...@@ -893,7 +897,7 @@ def test_solver_does_not_return_prereleases_if_not_requested(
def test_solver_sub_dependencies_with_requirements( def test_solver_sub_dependencies_with_requirements(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
...@@ -931,7 +935,7 @@ def test_solver_sub_dependencies_with_requirements( ...@@ -931,7 +935,7 @@ def test_solver_sub_dependencies_with_requirements(
def test_solver_sub_dependencies_with_requirements_complex( def test_solver_sub_dependencies_with_requirements_complex(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "<5.0"}) Factory.create_dependency("A", {"version": "^1.0", "python": "<5.0"})
) )
...@@ -990,7 +994,7 @@ def test_solver_sub_dependencies_with_requirements_complex( ...@@ -990,7 +994,7 @@ def test_solver_sub_dependencies_with_requirements_complex(
def test_solver_sub_dependencies_with_not_supported_python_version( def test_solver_sub_dependencies_with_not_supported_python_version(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "^3.5") set_package_python_versions(solver.provider, "^3.5")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
...@@ -1012,7 +1016,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version( ...@@ -1012,7 +1016,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version(
def test_solver_sub_dependencies_with_not_supported_python_version_transitive( def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "^3.4") set_package_python_versions(solver.provider, "^3.4")
package.add_dependency( package.add_dependency(
...@@ -1056,7 +1060,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive( ...@@ -1056,7 +1060,7 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
def test_solver_with_dependency_in_both_main_and_dev_dependencies( def test_solver_with_dependency_in_both_main_and_dev_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "^3.5") set_package_python_versions(solver.provider, "^3.5")
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency( package.add_dependency(
...@@ -1109,7 +1113,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies( ...@@ -1109,7 +1113,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies(
def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_dependent( # noqa: E501 def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_dependent( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("E", "*")) package.add_dependency(Factory.create_dependency("E", "*"))
package.add_dependency( package.add_dependency(
...@@ -1169,7 +1173,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_ ...@@ -1169,7 +1173,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
def test_solver_with_dependency_and_prerelease_sub_dependencies( def test_solver_with_dependency_and_prerelease_sub_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1196,7 +1200,7 @@ def test_solver_with_dependency_and_prerelease_sub_dependencies( ...@@ -1196,7 +1200,7 @@ def test_solver_with_dependency_and_prerelease_sub_dependencies(
def test_solver_circular_dependency( def test_solver_circular_dependency(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1228,7 +1232,7 @@ def test_solver_circular_dependency( ...@@ -1228,7 +1232,7 @@ def test_solver_circular_dependency(
def test_solver_circular_dependency_chain( def test_solver_circular_dependency_chain(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1265,7 +1269,7 @@ def test_solver_circular_dependency_chain( ...@@ -1265,7 +1269,7 @@ def test_solver_circular_dependency_chain(
def test_solver_dense_dependencies( def test_solver_dense_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
# The root package depends on packages A0...An-1, # The root package depends on packages A0...An-1,
# And package Ai depends on packages A0...Ai-1 # And package Ai depends on packages A0...Ai-1
# This graph is a transitive tournament # This graph is a transitive tournament
...@@ -1288,7 +1292,7 @@ def test_solver_dense_dependencies( ...@@ -1288,7 +1292,7 @@ def test_solver_dense_dependencies(
def test_solver_duplicate_dependencies_same_constraint( def test_solver_duplicate_dependencies_same_constraint(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1317,7 +1321,7 @@ def test_solver_duplicate_dependencies_same_constraint( ...@@ -1317,7 +1321,7 @@ def test_solver_duplicate_dependencies_same_constraint(
def test_solver_duplicate_dependencies_different_constraints( def test_solver_duplicate_dependencies_different_constraints(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1349,7 +1353,7 @@ def test_solver_duplicate_dependencies_different_constraints( ...@@ -1349,7 +1353,7 @@ def test_solver_duplicate_dependencies_different_constraints(
def test_solver_duplicate_dependencies_different_constraints_same_requirements( def test_solver_duplicate_dependencies_different_constraints_same_requirements(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1376,7 +1380,7 @@ So, because no versions of a match !=1.0 ...@@ -1376,7 +1380,7 @@ So, because no versions of a match !=1.0
def test_solver_duplicate_dependencies_different_constraints_merge_by_marker( def test_solver_duplicate_dependencies_different_constraints_merge_by_marker(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1414,7 +1418,7 @@ def test_solver_duplicate_dependencies_different_constraints_merge_by_marker( ...@@ -1414,7 +1418,7 @@ def test_solver_duplicate_dependencies_different_constraints_merge_by_marker(
@pytest.mark.parametrize("git_first", [False, True]) @pytest.mark.parametrize("git_first", [False, True])
def test_solver_duplicate_dependencies_different_sources_types_are_preserved( def test_solver_duplicate_dependencies_different_sources_types_are_preserved(
solver: Solver, repo: Repository, package: ProjectPackage, git_first: bool solver: Solver, repo: Repository, package: ProjectPackage, git_first: bool
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
repo.add_package(pendulum) repo.add_package(pendulum)
repo.add_package(get_package("cleo", "1.0.0")) repo.add_package(get_package("cleo", "1.0.0"))
...@@ -1482,7 +1486,7 @@ def test_solver_duplicate_dependencies_different_sources_types_are_preserved( ...@@ -1482,7 +1486,7 @@ def test_solver_duplicate_dependencies_different_sources_types_are_preserved(
def test_solver_duplicate_dependencies_different_constraints_merge_no_markers( def test_solver_duplicate_dependencies_different_constraints_merge_no_markers(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "1.0")) package.add_dependency(Factory.create_dependency("B", "1.0"))
...@@ -1683,7 +1687,7 @@ def test_solver_duplicate_dependencies_different_constraints_discard_no_markers3 ...@@ -1683,7 +1687,7 @@ def test_solver_duplicate_dependencies_different_constraints_discard_no_markers3
def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_intersection( def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_intersection(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
""" """
Distinct requirements per marker: Distinct requirements per marker:
* Python 2.7: A (which requires B) and B * Python 2.7: A (which requires B) and B
...@@ -1754,7 +1758,7 @@ def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_inters ...@@ -1754,7 +1758,7 @@ def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_inters
def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_intersection2( def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_intersection2(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
""" """
Empty intersection between top level dependency and transient dependency. Empty intersection between top level dependency and transient dependency.
""" """
...@@ -1797,7 +1801,7 @@ def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_inters ...@@ -1797,7 +1801,7 @@ def test_solver_duplicate_dependencies_ignore_overrides_with_empty_marker_inters
def test_solver_duplicate_dependencies_sub_dependencies( def test_solver_duplicate_dependencies_sub_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
...@@ -1836,10 +1840,11 @@ def test_solver_duplicate_dependencies_sub_dependencies( ...@@ -1836,10 +1840,11 @@ def test_solver_duplicate_dependencies_sub_dependencies(
) )
def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) -> None: def test_duplicate_path_dependencies(
solver: Solver, package: ProjectPackage, fixture_dir: FixtureDirGetter
) -> None:
set_package_python_versions(solver.provider, "^3.7") set_package_python_versions(solver.provider, "^3.7")
fixtures = Path(__file__).parent.parent / "fixtures" project_dir = fixture_dir("with_conditional_path_deps")
project_dir = fixtures / "with_conditional_path_deps"
path1 = (project_dir / "demo_one").as_posix() path1 = (project_dir / "demo_one").as_posix()
demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1) demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1)
...@@ -1869,11 +1874,10 @@ def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) -> ...@@ -1869,11 +1874,10 @@ def test_duplicate_path_dependencies(solver: Solver, package: ProjectPackage) ->
def test_duplicate_path_dependencies_same_path( def test_duplicate_path_dependencies_same_path(
solver: Solver, package: ProjectPackage solver: Solver, package: ProjectPackage, fixture_dir: FixtureDirGetter
) -> None: ) -> None:
set_package_python_versions(solver.provider, "^3.7") set_package_python_versions(solver.provider, "^3.7")
fixtures = Path(__file__).parent.parent / "fixtures" project_dir = fixture_dir("with_conditional_path_deps")
project_dir = fixtures / "with_conditional_path_deps"
path1 = (project_dir / "demo_one").as_posix() path1 = (project_dir / "demo_one").as_posix()
demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1) demo1 = Package("demo", "1.2.3", source_type="directory", source_url=path1)
...@@ -1895,7 +1899,7 @@ def test_duplicate_path_dependencies_same_path( ...@@ -1895,7 +1899,7 @@ def test_duplicate_path_dependencies_same_path(
def test_solver_fails_if_dependency_name_does_not_match_package( def test_solver_fails_if_dependency_name_does_not_match_package(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"my-demo", {"git": "https://github.com/demo/demo.git"} "my-demo", {"git": "https://github.com/demo/demo.git"}
...@@ -1908,7 +1912,7 @@ def test_solver_fails_if_dependency_name_does_not_match_package( ...@@ -1908,7 +1912,7 @@ def test_solver_fails_if_dependency_name_does_not_match_package(
def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency( def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package_a = get_package("A", "1.0") package_a = get_package("A", "1.0")
package_a.add_dependency(Factory.create_dependency("B", "^1.0")) package_a.add_dependency(Factory.create_dependency("B", "^1.0"))
package_b = get_package("B", "1.0") package_b = get_package("B", "1.0")
...@@ -1936,7 +1940,7 @@ def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency( ...@@ -1936,7 +1940,7 @@ def test_solver_does_not_get_stuck_in_recursion_on_circular_dependency(
def test_solver_can_resolve_git_dependencies( def test_solver_can_resolve_git_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -1971,7 +1975,7 @@ def test_solver_can_resolve_git_dependencies( ...@@ -1971,7 +1975,7 @@ def test_solver_can_resolve_git_dependencies(
def test_solver_can_resolve_git_dependencies_with_extras( def test_solver_can_resolve_git_dependencies_with_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -2011,7 +2015,7 @@ def test_solver_can_resolve_git_dependencies_with_extras( ...@@ -2011,7 +2015,7 @@ def test_solver_can_resolve_git_dependencies_with_extras(
) )
def test_solver_can_resolve_git_dependencies_with_ref( def test_solver_can_resolve_git_dependencies_with_ref(
solver: Solver, repo: Repository, package: ProjectPackage, ref: dict[str, str] solver: Solver, repo: Repository, package: ProjectPackage, ref: dict[str, str]
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -2046,7 +2050,7 @@ def test_solver_can_resolve_git_dependencies_with_ref( ...@@ -2046,7 +2050,7 @@ def test_solver_can_resolve_git_dependencies_with_ref(
def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible( # noqa: E501 def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
...@@ -2064,7 +2068,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir ...@@ -2064,7 +2068,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir
def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible_multiple( # noqa: E501 def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requirement_is_compatible_multiple( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
...@@ -2096,7 +2100,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir ...@@ -2096,7 +2100,7 @@ def test_solver_does_not_trigger_conflict_for_python_constraint_if_python_requir
def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501 def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"})
...@@ -2113,7 +2117,7 @@ def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_wit ...@@ -2113,7 +2117,7 @@ def test_solver_triggers_conflict_for_dependency_python_not_fully_compatible_wit
def test_solver_finds_compatible_package_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501 def test_solver_finds_compatible_package_for_dependency_python_not_fully_compatible_with_package_python( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.5"})
...@@ -2135,7 +2139,7 @@ def test_solver_finds_compatible_package_for_dependency_python_not_fully_compati ...@@ -2135,7 +2139,7 @@ def test_solver_finds_compatible_package_for_dependency_python_not_fully_compati
def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_only_extras( # noqa: E501 def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_only_extras( # noqa: E501
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
dep1 = Dependency.create_from_pep_508('B (>=1.0); extra == "foo"') dep1 = Dependency.create_from_pep_508('B (>=1.0); extra == "foo"')
dep1.activate() dep1.activate()
dep2 = Dependency.create_from_pep_508('B (>=2.0); extra == "bar"') dep2 = Dependency.create_from_pep_508('B (>=2.0); extra == "bar"')
...@@ -2173,7 +2177,7 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl ...@@ -2173,7 +2177,7 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl
def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies( def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.4") set_package_python_versions(solver.provider, "~2.7 || ^3.4")
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"}) Factory.create_dependency("A", {"version": "^1.0", "python": "^3.6"})
...@@ -2205,7 +2209,7 @@ def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies( ...@@ -2205,7 +2209,7 @@ def test_solver_does_not_raise_conflict_for_locked_conditional_dependencies(
def test_solver_returns_extras_if_requested_in_dependencies_and_not_in_root_package( def test_solver_returns_extras_if_requested_in_dependencies_and_not_in_root_package(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "*")) package.add_dependency(Factory.create_dependency("A", "*"))
package.add_dependency(Factory.create_dependency("B", "*")) package.add_dependency(Factory.create_dependency("B", "*"))
package.add_dependency(Factory.create_dependency("C", "*")) package.add_dependency(Factory.create_dependency("C", "*"))
...@@ -2244,7 +2248,7 @@ def test_solver_returns_extras_if_requested_in_dependencies_and_not_in_root_pack ...@@ -2244,7 +2248,7 @@ def test_solver_returns_extras_if_requested_in_dependencies_and_not_in_root_pack
def test_solver_should_not_resolve_prerelease_version_if_not_requested( def test_solver_should_not_resolve_prerelease_version_if_not_requested(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("A", "~1.8.0")) package.add_dependency(Factory.create_dependency("A", "~1.8.0"))
package.add_dependency(Factory.create_dependency("B", "^0.5.0")) package.add_dependency(Factory.create_dependency("B", "^0.5.0"))
...@@ -2263,7 +2267,7 @@ def test_solver_should_not_resolve_prerelease_version_if_not_requested( ...@@ -2263,7 +2267,7 @@ def test_solver_should_not_resolve_prerelease_version_if_not_requested(
def test_solver_ignores_dependencies_with_incompatible_python_full_version_marker( def test_solver_ignores_dependencies_with_incompatible_python_full_version_marker(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "^3.6") set_package_python_versions(solver.provider, "^3.6")
package.add_dependency(Factory.create_dependency("A", "^1.0")) package.add_dependency(Factory.create_dependency("A", "^1.0"))
package.add_dependency(Factory.create_dependency("B", "^2.0")) package.add_dependency(Factory.create_dependency("B", "^2.0"))
...@@ -2296,7 +2300,7 @@ def test_solver_ignores_dependencies_with_incompatible_python_full_version_marke ...@@ -2296,7 +2300,7 @@ def test_solver_ignores_dependencies_with_incompatible_python_full_version_marke
def test_solver_git_dependencies_update( def test_solver_git_dependencies_update(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -2345,7 +2349,7 @@ def test_solver_git_dependencies_update( ...@@ -2345,7 +2349,7 @@ def test_solver_git_dependencies_update(
def test_solver_git_dependencies_update_skipped( def test_solver_git_dependencies_update_skipped(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -2378,7 +2382,7 @@ def test_solver_git_dependencies_update_skipped( ...@@ -2378,7 +2382,7 @@ def test_solver_git_dependencies_update_skipped(
def test_solver_git_dependencies_short_hash_update_skipped( def test_solver_git_dependencies_short_hash_update_skipped(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
...@@ -2423,19 +2427,15 @@ def test_solver_git_dependencies_short_hash_update_skipped( ...@@ -2423,19 +2427,15 @@ def test_solver_git_dependencies_short_hash_update_skipped(
def test_solver_can_resolve_directory_dependencies( def test_solver_can_resolve_directory_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
repo.add_package(pendulum) repo.add_package(pendulum)
path = ( path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo"
).as_posix()
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
...@@ -2460,8 +2460,9 @@ def test_solver_can_resolve_directory_dependencies_nested_editable( ...@@ -2460,8 +2460,9 @@ def test_solver_can_resolve_directory_dependencies_nested_editable(
repo: Repository, repo: Repository,
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
): fixture_dir: FixtureDirGetter,
base = Path(__file__).parent.parent / "fixtures" / "project_with_nested_local" ) -> None:
base = fixture_dir("project_with_nested_local")
poetry = Factory().create_poetry(cwd=base) poetry = Factory().create_poetry(cwd=base)
package = poetry.package package = poetry.package
...@@ -2511,21 +2512,17 @@ def test_solver_can_resolve_directory_dependencies_nested_editable( ...@@ -2511,21 +2512,17 @@ def test_solver_can_resolve_directory_dependencies_nested_editable(
def test_solver_can_resolve_directory_dependencies_with_extras( def test_solver_can_resolve_directory_dependencies_with_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
repo.add_package(cleo) repo.add_package(cleo)
path = ( path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo"
).as_posix()
package.add_dependency( package.add_dependency(
Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) Factory.create_dependency("demo", {"path": path, "extras": ["foo"]})
...@@ -2553,17 +2550,15 @@ def test_solver_can_resolve_directory_dependencies_with_extras( ...@@ -2553,17 +2550,15 @@ def test_solver_can_resolve_directory_dependencies_with_extras(
def test_solver_can_resolve_sdist_dependencies( def test_solver_can_resolve_sdist_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
repo.add_package(pendulum) repo.add_package(pendulum)
path = ( path = (fixture_dir("distributions") / "demo-0.1.0.tar.gz").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "distributions"
/ "demo-0.1.0.tar.gz"
).as_posix()
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
...@@ -2585,19 +2580,17 @@ def test_solver_can_resolve_sdist_dependencies( ...@@ -2585,19 +2580,17 @@ def test_solver_can_resolve_sdist_dependencies(
def test_solver_can_resolve_sdist_dependencies_with_extras( def test_solver_can_resolve_sdist_dependencies_with_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
repo.add_package(cleo) repo.add_package(cleo)
path = ( path = (fixture_dir("distributions") / "demo-0.1.0.tar.gz").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "distributions"
/ "demo-0.1.0.tar.gz"
).as_posix()
package.add_dependency( package.add_dependency(
Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) Factory.create_dependency("demo", {"path": path, "extras": ["foo"]})
...@@ -2625,17 +2618,15 @@ def test_solver_can_resolve_sdist_dependencies_with_extras( ...@@ -2625,17 +2618,15 @@ def test_solver_can_resolve_sdist_dependencies_with_extras(
def test_solver_can_resolve_wheel_dependencies( def test_solver_can_resolve_wheel_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
repo.add_package(pendulum) repo.add_package(pendulum)
path = ( path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl"
).as_posix()
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
...@@ -2657,19 +2648,17 @@ def test_solver_can_resolve_wheel_dependencies( ...@@ -2657,19 +2648,17 @@ def test_solver_can_resolve_wheel_dependencies(
def test_solver_can_resolve_wheel_dependencies_with_extras( def test_solver_can_resolve_wheel_dependencies_with_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
cleo = get_package("cleo", "1.0.0") cleo = get_package("cleo", "1.0.0")
repo.add_package(pendulum) repo.add_package(pendulum)
repo.add_package(cleo) repo.add_package(cleo)
path = ( path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl"
).as_posix()
package.add_dependency( package.add_dependency(
Factory.create_dependency("demo", {"path": path, "extras": ["foo"]}) Factory.create_dependency("demo", {"path": path, "extras": ["foo"]})
...@@ -2698,7 +2687,7 @@ def test_solver_can_resolve_wheel_dependencies_with_extras( ...@@ -2698,7 +2687,7 @@ def test_solver_can_resolve_wheel_dependencies_with_extras(
def test_solver_can_solve_with_legacy_repository_using_proper_dists( def test_solver_can_solve_with_legacy_repository_using_proper_dists(
package: ProjectPackage, io: NullIO package: ProjectPackage, io: NullIO
): ) -> None:
repo = MockLegacyRepository() repo = MockLegacyRepository()
pool = RepositoryPool([repo]) pool = RepositoryPool([repo])
...@@ -2741,7 +2730,7 @@ def test_solver_can_solve_with_legacy_repository_using_proper_dists( ...@@ -2741,7 +2730,7 @@ def test_solver_can_solve_with_legacy_repository_using_proper_dists(
def test_solver_can_solve_with_legacy_repository_using_proper_python_compatible_dists( def test_solver_can_solve_with_legacy_repository_using_proper_python_compatible_dists(
package: ProjectPackage, package: ProjectPackage,
io: NullIO, io: NullIO,
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
repo = MockLegacyRepository() repo = MockLegacyRepository()
...@@ -2770,7 +2759,7 @@ def test_solver_can_solve_with_legacy_repository_using_proper_python_compatible_ ...@@ -2770,7 +2759,7 @@ def test_solver_can_solve_with_legacy_repository_using_proper_python_compatible_
) )
def test_solver_skips_invalid_versions(package: ProjectPackage, io: NullIO): def test_solver_skips_invalid_versions(package: ProjectPackage, io: NullIO) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
repo = MockPyPIRepository() repo = MockPyPIRepository()
...@@ -2789,7 +2778,7 @@ def test_solver_skips_invalid_versions(package: ProjectPackage, io: NullIO): ...@@ -2789,7 +2778,7 @@ def test_solver_skips_invalid_versions(package: ProjectPackage, io: NullIO):
def test_multiple_constraints_on_root( def test_multiple_constraints_on_root(
package: ProjectPackage, solver: Solver, repo: Repository package: ProjectPackage, solver: Solver, repo: Repository
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("foo", {"version": "^1.0", "python": "^2.7"}) Factory.create_dependency("foo", {"version": "^1.0", "python": "^2.7"})
) )
...@@ -2813,7 +2802,7 @@ def test_multiple_constraints_on_root( ...@@ -2813,7 +2802,7 @@ def test_multiple_constraints_on_root(
def test_solver_chooses_most_recent_version_amongst_repositories( def test_solver_chooses_most_recent_version_amongst_repositories(
package: ProjectPackage, io: NullIO package: ProjectPackage, io: NullIO
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
package.add_dependency(Factory.create_dependency("tomlkit", {"version": "^0.5"})) package.add_dependency(Factory.create_dependency("tomlkit", {"version": "^0.5"}))
...@@ -2834,7 +2823,7 @@ def test_solver_chooses_most_recent_version_amongst_repositories( ...@@ -2834,7 +2823,7 @@ def test_solver_chooses_most_recent_version_amongst_repositories(
def test_solver_chooses_from_correct_repository_if_forced( def test_solver_chooses_from_correct_repository_if_forced(
package: ProjectPackage, io: NullIO package: ProjectPackage, io: NullIO
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
package.add_dependency( package.add_dependency(
Factory.create_dependency("tomlkit", {"version": "^0.5", "source": "legacy"}) Factory.create_dependency("tomlkit", {"version": "^0.5", "source": "legacy"})
...@@ -2869,7 +2858,7 @@ def test_solver_chooses_from_correct_repository_if_forced( ...@@ -2869,7 +2858,7 @@ def test_solver_chooses_from_correct_repository_if_forced(
def test_solver_chooses_from_correct_repository_if_forced_and_transitive_dependency( def test_solver_chooses_from_correct_repository_if_forced_and_transitive_dependency(
package: ProjectPackage, package: ProjectPackage,
io: NullIO, io: NullIO,
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
package.add_dependency(Factory.create_dependency("foo", "^1.0")) package.add_dependency(Factory.create_dependency("foo", "^1.0"))
package.add_dependency( package.add_dependency(
...@@ -2911,7 +2900,7 @@ def test_solver_chooses_from_correct_repository_if_forced_and_transitive_depende ...@@ -2911,7 +2900,7 @@ def test_solver_chooses_from_correct_repository_if_forced_and_transitive_depende
def test_solver_does_not_choose_from_secondary_repository_by_default( def test_solver_does_not_choose_from_secondary_repository_by_default(
package: ProjectPackage, io: NullIO package: ProjectPackage, io: NullIO
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
package.add_dependency(Factory.create_dependency("clikit", {"version": "^0.2.0"})) package.add_dependency(Factory.create_dependency("clikit", {"version": "^0.2.0"}))
...@@ -2959,7 +2948,7 @@ def test_solver_does_not_choose_from_secondary_repository_by_default( ...@@ -2959,7 +2948,7 @@ def test_solver_does_not_choose_from_secondary_repository_by_default(
def test_solver_chooses_from_secondary_if_explicit( def test_solver_chooses_from_secondary_if_explicit(
package: ProjectPackage, package: ProjectPackage,
io: NullIO, io: NullIO,
): ) -> None:
package.python_versions = "^3.7" package.python_versions = "^3.7"
package.add_dependency( package.add_dependency(
Factory.create_dependency("clikit", {"version": "^0.2.0", "source": "PyPI"}) Factory.create_dependency("clikit", {"version": "^0.2.0", "source": "PyPI"})
...@@ -3068,7 +3057,7 @@ def test_solver_discards_packages_with_empty_markers( ...@@ -3068,7 +3057,7 @@ def test_solver_discards_packages_with_empty_markers(
repo: Repository, repo: Repository,
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
): ) -> None:
package.python_versions = "~2.7 || ^3.4" package.python_versions = "~2.7 || ^3.4"
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -3104,7 +3093,7 @@ def test_solver_discards_packages_with_empty_markers( ...@@ -3104,7 +3093,7 @@ def test_solver_discards_packages_with_empty_markers(
def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies( def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -3136,7 +3125,7 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies( ...@@ -3136,7 +3125,7 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
def test_solver_does_not_loop_indefinitely_on_duplicate_constraints_with_extras( def test_solver_does_not_loop_indefinitely_on_duplicate_constraints_with_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -3170,7 +3159,7 @@ def test_solver_does_not_fail_with_locked_git_and_non_git_dependencies( ...@@ -3170,7 +3159,7 @@ def test_solver_does_not_fail_with_locked_git_and_non_git_dependencies(
repo: Repository, repo: Repository,
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("demo", {"git": "https://github.com/demo/demo.git"}) Factory.create_dependency("demo", {"git": "https://github.com/demo/demo.git"})
) )
...@@ -3205,7 +3194,7 @@ def test_solver_does_not_fail_with_locked_git_and_non_git_dependencies( ...@@ -3205,7 +3194,7 @@ def test_solver_does_not_fail_with_locked_git_and_non_git_dependencies(
def test_ignore_python_constraint_no_overlap_dependencies( def test_ignore_python_constraint_no_overlap_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
pytest = get_package("demo", "1.0.0") pytest = get_package("demo", "1.0.0")
pytest.add_dependency( pytest.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -3230,7 +3219,7 @@ def test_ignore_python_constraint_no_overlap_dependencies( ...@@ -3230,7 +3219,7 @@ def test_ignore_python_constraint_no_overlap_dependencies(
def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies( def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
set_package_python_versions(solver.provider, "~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency(Factory.create_dependency("A", "^1.0")) package.add_dependency(Factory.create_dependency("A", "^1.0"))
...@@ -3263,7 +3252,7 @@ def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies( ...@@ -3263,7 +3252,7 @@ def test_solver_should_not_go_into_an_infinite_loop_on_duplicate_dependencies(
def test_solver_synchronize_single( def test_solver_synchronize_single(
package: ProjectPackage, pool: RepositoryPool, io: NullIO package: ProjectPackage, pool: RepositoryPool, io: NullIO
): ) -> None:
package_a = get_package("a", "1.0") package_a = get_package("a", "1.0")
solver = Solver(package, pool, [package_a], [], io) solver = Solver(package, pool, [package_a], [], io)
...@@ -3279,7 +3268,7 @@ def test_solver_with_synchronization_keeps_critical_package( ...@@ -3279,7 +3268,7 @@ def test_solver_with_synchronization_keeps_critical_package(
package: ProjectPackage, package: ProjectPackage,
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
): ) -> None:
package_pip = get_package("setuptools", "1.0") package_pip = get_package("setuptools", "1.0")
solver = Solver(package, pool, [package_pip], [], io) solver = Solver(package, pool, [package_pip], [], io)
...@@ -3289,8 +3278,11 @@ def test_solver_with_synchronization_keeps_critical_package( ...@@ -3289,8 +3278,11 @@ def test_solver_with_synchronization_keeps_critical_package(
def test_solver_cannot_choose_another_version_for_directory_dependencies( def test_solver_cannot_choose_another_version_for_directory_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
demo = get_package("demo", "0.1.0") demo = get_package("demo", "0.1.0")
foo = get_package("foo", "1.2.3") foo = get_package("foo", "1.2.3")
...@@ -3299,14 +3291,7 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies( ...@@ -3299,14 +3291,7 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies(
repo.add_package(demo) repo.add_package(demo)
repo.add_package(pendulum) repo.add_package(pendulum)
path = ( path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo"
).as_posix()
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
package.add_dependency(Factory.create_dependency("foo", "^1.2.3")) package.add_dependency(Factory.create_dependency("foo", "^1.2.3"))
...@@ -3318,8 +3303,11 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies( ...@@ -3318,8 +3303,11 @@ def test_solver_cannot_choose_another_version_for_directory_dependencies(
def test_solver_cannot_choose_another_version_for_file_dependencies( def test_solver_cannot_choose_another_version_for_file_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
demo = get_package("demo", "0.0.8") demo = get_package("demo", "0.0.8")
foo = get_package("foo", "1.2.3") foo = get_package("foo", "1.2.3")
...@@ -3328,12 +3316,7 @@ def test_solver_cannot_choose_another_version_for_file_dependencies( ...@@ -3328,12 +3316,7 @@ def test_solver_cannot_choose_another_version_for_file_dependencies(
repo.add_package(demo) repo.add_package(demo)
repo.add_package(pendulum) repo.add_package(pendulum)
path = ( path = (fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl"
).as_posix()
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
package.add_dependency(Factory.create_dependency("foo", "^1.2.3")) package.add_dependency(Factory.create_dependency("foo", "^1.2.3"))
...@@ -3346,7 +3329,7 @@ def test_solver_cannot_choose_another_version_for_file_dependencies( ...@@ -3346,7 +3329,7 @@ def test_solver_cannot_choose_another_version_for_file_dependencies(
def test_solver_cannot_choose_another_version_for_git_dependencies( def test_solver_cannot_choose_another_version_for_git_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
pendulum = get_package("pendulum", "2.0.3") pendulum = get_package("pendulum", "2.0.3")
demo = get_package("demo", "0.0.8") demo = get_package("demo", "0.0.8")
foo = get_package("foo", "1.2.3") foo = get_package("foo", "1.2.3")
...@@ -3371,13 +3354,9 @@ def test_solver_cannot_choose_another_version_for_url_dependencies( ...@@ -3371,13 +3354,9 @@ def test_solver_cannot_choose_another_version_for_url_dependencies(
repo: Repository, repo: Repository,
package: ProjectPackage, package: ProjectPackage,
http: type[httpretty.httpretty], http: type[httpretty.httpretty],
): fixture_dir: FixtureDirGetter,
path = ( ) -> None:
Path(__file__).parent.parent path = fixture_dir("distributions") / "demo-0.1.0-py2.py3-none-any.whl"
/ "fixtures"
/ "distributions"
/ "demo-0.1.0-py2.py3-none-any.whl"
)
http.register_uri( http.register_uri(
"GET", "GET",
...@@ -3409,7 +3388,7 @@ def test_solver_cannot_choose_another_version_for_url_dependencies( ...@@ -3409,7 +3388,7 @@ def test_solver_cannot_choose_another_version_for_url_dependencies(
def test_solver_should_not_update_same_version_packages_if_installed_has_no_source_type( def test_solver_should_not_update_same_version_packages_if_installed_has_no_source_type(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency(Factory.create_dependency("foo", "1.0.0")) package.add_dependency(Factory.create_dependency("foo", "1.0.0"))
foo = Package( foo = Package(
...@@ -3458,7 +3437,7 @@ def test_solver_should_use_the_python_constraint_from_the_environment_if_availab ...@@ -3458,7 +3437,7 @@ def test_solver_should_use_the_python_constraint_from_the_environment_if_availab
def test_solver_should_resolve_all_versions_for_multiple_duplicate_dependencies( def test_solver_should_resolve_all_versions_for_multiple_duplicate_dependencies(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.python_versions = "~2.7 || ^3.5" package.python_versions = "~2.7 || ^3.5"
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
...@@ -3506,7 +3485,7 @@ def test_solver_should_resolve_all_versions_for_multiple_duplicate_dependencies( ...@@ -3506,7 +3485,7 @@ def test_solver_should_resolve_all_versions_for_multiple_duplicate_dependencies(
def test_solver_should_not_raise_errors_for_irrelevant_python_constraints( def test_solver_should_not_raise_errors_for_irrelevant_python_constraints(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.python_versions = "^3.6" package.python_versions = "^3.6"
set_package_python_versions(solver.provider, "^3.6") set_package_python_versions(solver.provider, "^3.6")
package.add_dependency( package.add_dependency(
...@@ -3524,7 +3503,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_python_constraints( ...@@ -3524,7 +3503,7 @@ def test_solver_should_not_raise_errors_for_irrelevant_python_constraints(
def test_solver_can_resolve_transitive_extras( def test_solver_can_resolve_transitive_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency(Factory.create_dependency("requests", "^2.24.0")) package.add_dependency(Factory.create_dependency("requests", "^2.24.0"))
package.add_dependency(Factory.create_dependency("PyOTA", "^2.1.0")) package.add_dependency(Factory.create_dependency("PyOTA", "^2.1.0"))
...@@ -3562,7 +3541,7 @@ def test_solver_can_resolve_transitive_extras( ...@@ -3562,7 +3541,7 @@ def test_solver_can_resolve_transitive_extras(
def test_solver_can_resolve_for_packages_with_missing_extras( def test_solver_can_resolve_for_packages_with_missing_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency( Factory.create_dependency(
"django-anymail", {"version": "^6.0", "extras": ["postmark"]} "django-anymail", {"version": "^6.0", "extras": ["postmark"]}
...@@ -3599,7 +3578,7 @@ def test_solver_can_resolve_for_packages_with_missing_extras( ...@@ -3599,7 +3578,7 @@ def test_solver_can_resolve_for_packages_with_missing_extras(
def test_solver_can_resolve_python_restricted_package_dependencies( def test_solver_can_resolve_python_restricted_package_dependencies(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("futures", {"version": "^3.3.0", "python": "~2.7"}) Factory.create_dependency("futures", {"version": "^3.3.0", "python": "~2.7"})
) )
...@@ -3630,7 +3609,7 @@ def test_solver_can_resolve_python_restricted_package_dependencies( ...@@ -3630,7 +3609,7 @@ def test_solver_can_resolve_python_restricted_package_dependencies(
def test_solver_should_not_raise_errors_for_irrelevant_transitive_python_constraints( def test_solver_should_not_raise_errors_for_irrelevant_transitive_python_constraints(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
package.python_versions = "~2.7 || ^3.5" package.python_versions = "~2.7 || ^3.5"
set_package_python_versions(solver.provider, "~2.7 || ^3.5") set_package_python_versions(solver.provider, "~2.7 || ^3.5")
package.add_dependency(Factory.create_dependency("virtualenv", "^20.4.3")) package.add_dependency(Factory.create_dependency("virtualenv", "^20.4.3"))
...@@ -3685,7 +3664,7 @@ def test_solver_keeps_multiple_locked_dependencies_for_same_package( ...@@ -3685,7 +3664,7 @@ def test_solver_keeps_multiple_locked_dependencies_for_same_package(
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
is_locked: bool, is_locked: bool,
): ) -> None:
package.add_dependency( package.add_dependency(
Factory.create_dependency("A", {"version": "~1.1", "python": "<3.7"}) Factory.create_dependency("A", {"version": "~1.1", "python": "<3.7"})
) )
...@@ -3739,7 +3718,7 @@ def test_solver_does_not_update_ref_of_locked_vcs_package( ...@@ -3739,7 +3718,7 @@ def test_solver_does_not_update_ref_of_locked_vcs_package(
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
is_locked: bool, is_locked: bool,
): ) -> None:
locked_ref = "123456" locked_ref = "123456"
latest_ref = "9cf87a285a2d3fbb0b9fa621997b3acc3631ed24" latest_ref = "9cf87a285a2d3fbb0b9fa621997b3acc3631ed24"
demo_locked = Package( demo_locked = Package(
...@@ -3795,7 +3774,7 @@ def test_solver_does_not_fetch_locked_vcs_package_with_ref( ...@@ -3795,7 +3774,7 @@ def test_solver_does_not_fetch_locked_vcs_package_with_ref(
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
mocker: MockerFixture, mocker: MockerFixture,
): ) -> None:
locked_ref = "123456" locked_ref = "123456"
demo_locked = Package( demo_locked = Package(
"demo", "demo",
...@@ -3824,8 +3803,11 @@ def test_solver_does_not_fetch_locked_vcs_package_with_ref( ...@@ -3824,8 +3803,11 @@ def test_solver_does_not_fetch_locked_vcs_package_with_ref(
def test_solver_direct_origin_dependency_with_extras_requested_by_other_package( def test_solver_direct_origin_dependency_with_extras_requested_by_other_package(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver,
): repo: Repository,
package: ProjectPackage,
fixture_dir: FixtureDirGetter,
) -> None:
""" """
Another package requires the same dependency with extras that is required Another package requires the same dependency with extras that is required
by the project as direct origin dependency without any extras. by the project as direct origin dependency without any extras.
...@@ -3840,14 +3822,7 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package( ...@@ -3840,14 +3822,7 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package(
repo.add_package(pendulum) repo.add_package(pendulum)
repo.add_package(cleo) repo.add_package(cleo)
path = ( path = (fixture_dir("git") / "github.com" / "demo" / "demo").as_posix()
Path(__file__).parent.parent
/ "fixtures"
/ "git"
/ "github.com"
/ "demo"
/ "demo"
).as_posix()
# project requires path dependency of demo while demo-foo requires demo[foo] # project requires path dependency of demo while demo-foo requires demo[foo]
package.add_dependency(Factory.create_dependency("demo", {"path": path})) package.add_dependency(Factory.create_dependency("demo", {"path": path}))
...@@ -3877,7 +3852,7 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package( ...@@ -3877,7 +3852,7 @@ def test_solver_direct_origin_dependency_with_extras_requested_by_other_package(
def test_solver_incompatible_dependency_with_and_without_extras( def test_solver_incompatible_dependency_with_and_without_extras(
solver: Solver, repo: Repository, package: ProjectPackage solver: Solver, repo: Repository, package: ProjectPackage
): ) -> None:
""" """
The solver first encounters a requirement for google-auth and then later an The solver first encounters a requirement for google-auth and then later an
incompatible requirement for google-auth[aiohttp]. incompatible requirement for google-auth[aiohttp].
...@@ -3929,7 +3904,7 @@ def test_solver_incompatible_dependency_with_and_without_extras( ...@@ -3929,7 +3904,7 @@ def test_solver_incompatible_dependency_with_and_without_extras(
def test_update_with_prerelease_and_no_solution( def test_update_with_prerelease_and_no_solution(
package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO package: ProjectPackage, repo: Repository, pool: RepositoryPool, io: NullIO
): ) -> None:
# Locked and installed: cleo which depends on an old version of crashtest. # Locked and installed: cleo which depends on an old version of crashtest.
cleo = get_package("cleo", "1.0.0a5") cleo = get_package("cleo", "1.0.0a5")
crashtest = get_package("crashtest", "0.3.0") crashtest = get_package("crashtest", "0.3.0")
...@@ -4001,7 +3976,7 @@ def test_update_with_use_latest_vs_lock( ...@@ -4001,7 +3976,7 @@ def test_update_with_use_latest_vs_lock(
pool: RepositoryPool, pool: RepositoryPool,
io: NullIO, io: NullIO,
is_locked: bool, is_locked: bool,
): ) -> None:
""" """
A1 depends on B2, A2 and A3 depend on B1. Same for C. A1 depends on B2, A2 and A3 depend on B1. Same for C.
B1 depends on A2/C2, B2 depends on A1/C1. B1 depends on A2/C2, B2 depends on A1/C1.
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -26,8 +25,6 @@ if TYPE_CHECKING: ...@@ -26,8 +25,6 @@ if TYPE_CHECKING:
from poetry.poetry import Poetry from poetry.poetry import Poetry
from tests.types import FixtureDirGetter from tests.types import FixtureDirGetter
fixtures_dir = Path(__file__).parent / "fixtures"
class MyPlugin(Plugin): class MyPlugin(Plugin):
def activate(self, poetry: Poetry, io: IO) -> None: def activate(self, poetry: Poetry, io: IO) -> None:
...@@ -35,8 +32,8 @@ class MyPlugin(Plugin): ...@@ -35,8 +32,8 @@ class MyPlugin(Plugin):
poetry.package.readmes = ("README.md",) poetry.package.readmes = ("README.md",)
def test_create_poetry(): def test_create_poetry(fixture_dir: FixtureDirGetter) -> None:
poetry = Factory().create_poetry(fixtures_dir / "sample_project") poetry = Factory().create_poetry(fixture_dir("sample_project"))
package = poetry.package package = poetry.package
...@@ -48,7 +45,7 @@ def test_create_poetry(): ...@@ -48,7 +45,7 @@ def test_create_poetry():
for readme in package.readmes: for readme in package.readmes:
assert ( assert (
readme.relative_to(fixtures_dir).as_posix() == "sample_project/README.rst" readme.relative_to(fixture_dir("sample_project")).as_posix() == "README.rst"
) )
assert package.homepage == "https://python-poetry.org" assert package.homepage == "https://python-poetry.org"
...@@ -147,8 +144,10 @@ def test_create_poetry(): ...@@ -147,8 +144,10 @@ def test_create_poetry():
("project_with_extras",), ("project_with_extras",),
], ],
) )
def test_create_pyproject_from_package(project: str): def test_create_pyproject_from_package(
poetry = Factory().create_poetry(fixtures_dir / project) project: str, fixture_dir: FixtureDirGetter
) -> None:
poetry = Factory().create_poetry(fixture_dir(project))
package = poetry.package package = poetry.package
pyproject = Factory.create_pyproject_from_package(package) pyproject = Factory.create_pyproject_from_package(package)
...@@ -177,8 +176,10 @@ def test_create_pyproject_from_package(project: str): ...@@ -177,8 +176,10 @@ def test_create_pyproject_from_package(project: str):
assert not DeepDiff(expected, result) assert not DeepDiff(expected, result)
def test_create_poetry_with_packages_and_includes(): def test_create_poetry_with_packages_and_includes(
poetry = Factory().create_poetry(fixtures_dir / "with-include") fixture_dir: FixtureDirGetter,
) -> None:
poetry = Factory().create_poetry(fixture_dir("with-include"))
package = poetry.package package = poetry.package
...@@ -198,9 +199,11 @@ def test_create_poetry_with_packages_and_includes(): ...@@ -198,9 +199,11 @@ def test_create_poetry_with_packages_and_includes():
] ]
def test_create_poetry_with_multi_constraints_dependency(): def test_create_poetry_with_multi_constraints_dependency(
fixture_dir: FixtureDirGetter,
) -> None:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(
fixtures_dir / "project_with_multi_constraints_dependency" fixture_dir("project_with_multi_constraints_dependency")
) )
package = poetry.package package = poetry.package
...@@ -208,30 +211,34 @@ def test_create_poetry_with_multi_constraints_dependency(): ...@@ -208,30 +211,34 @@ def test_create_poetry_with_multi_constraints_dependency():
assert len(package.requires) == 2 assert len(package.requires) == 2
def test_poetry_with_default_source_legacy(with_simple_keyring: None): def test_poetry_with_default_source_legacy(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
io = BufferedIO() io = BufferedIO()
poetry = Factory().create_poetry(fixtures_dir / "with_default_source_legacy", io=io) poetry = Factory().create_poetry(fixture_dir("with_default_source_legacy"), io=io)
assert len(poetry.pool.repositories) == 1 assert len(poetry.pool.repositories) == 1
assert "Found deprecated key" in io.fetch_error() assert "Found deprecated key" in io.fetch_error()
def test_poetry_with_default_source(with_simple_keyring: None): def test_poetry_with_default_source(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
io = BufferedIO() io = BufferedIO()
poetry = Factory().create_poetry(fixtures_dir / "with_default_source", io=io) poetry = Factory().create_poetry(fixture_dir("with_default_source"), io=io)
assert len(poetry.pool.repositories) == 1 assert len(poetry.pool.repositories) == 1
assert io.fetch_error() == "" assert io.fetch_error() == ""
@pytest.mark.parametrize( @pytest.mark.parametrize(
"fixture_filename", "project",
("with_non_default_source_implicit", "with_non_default_source_explicit"), ("with_non_default_source_implicit", "with_non_default_source_explicit"),
) )
def test_poetry_with_non_default_source( def test_poetry_with_non_default_source(
fixture_filename: str, with_simple_keyring: None project: str, fixture_dir: FixtureDirGetter, with_simple_keyring: None
): ) -> None:
poetry = Factory().create_poetry(fixtures_dir / fixture_filename) poetry = Factory().create_poetry(fixture_dir(project))
assert not poetry.pool.has_default() assert not poetry.pool.has_default()
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
...@@ -243,9 +250,11 @@ def test_poetry_with_non_default_source( ...@@ -243,9 +250,11 @@ def test_poetry_with_non_default_source(
assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo"} assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo"}
def test_poetry_with_non_default_secondary_source_legacy(with_simple_keyring: None): def test_poetry_with_non_default_secondary_source_legacy(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(
fixtures_dir / "with_non_default_secondary_source_legacy" fixture_dir("with_non_default_secondary_source_legacy")
) )
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
...@@ -256,8 +265,10 @@ def test_poetry_with_non_default_secondary_source_legacy(with_simple_keyring: No ...@@ -256,8 +265,10 @@ def test_poetry_with_non_default_secondary_source_legacy(with_simple_keyring: No
assert [repo.name for repo in poetry.pool.repositories] == ["PyPI", "foo"] assert [repo.name for repo in poetry.pool.repositories] == ["PyPI", "foo"]
def test_poetry_with_non_default_secondary_source(with_simple_keyring: None): def test_poetry_with_non_default_secondary_source(
poetry = Factory().create_poetry(fixtures_dir / "with_non_default_secondary_source") fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry(fixture_dir("with_non_default_secondary_source"))
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
assert isinstance(poetry.pool.repository("PyPI"), PyPiRepository) assert isinstance(poetry.pool.repository("PyPI"), PyPiRepository)
...@@ -268,10 +279,11 @@ def test_poetry_with_non_default_secondary_source(with_simple_keyring: None): ...@@ -268,10 +279,11 @@ def test_poetry_with_non_default_secondary_source(with_simple_keyring: None):
def test_poetry_with_non_default_multiple_secondary_sources_legacy( def test_poetry_with_non_default_multiple_secondary_sources_legacy(
fixture_dir: FixtureDirGetter,
with_simple_keyring: None, with_simple_keyring: None,
): ) -> None:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(
fixtures_dir / "with_non_default_multiple_secondary_sources_legacy" fixture_dir("with_non_default_multiple_secondary_sources_legacy")
) )
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
...@@ -284,9 +296,11 @@ def test_poetry_with_non_default_multiple_secondary_sources_legacy( ...@@ -284,9 +296,11 @@ def test_poetry_with_non_default_multiple_secondary_sources_legacy(
assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo", "bar"} assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo", "bar"}
def test_poetry_with_non_default_multiple_secondary_sources(with_simple_keyring: None): def test_poetry_with_non_default_multiple_secondary_sources(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(
fixtures_dir / "with_non_default_multiple_secondary_sources" fixture_dir("with_non_default_multiple_secondary_sources")
) )
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
...@@ -299,9 +313,11 @@ def test_poetry_with_non_default_multiple_secondary_sources(with_simple_keyring: ...@@ -299,9 +313,11 @@ def test_poetry_with_non_default_multiple_secondary_sources(with_simple_keyring:
assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo", "bar"} assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "foo", "bar"}
def test_poetry_with_non_default_multiple_sources_legacy(with_simple_keyring: None): def test_poetry_with_non_default_multiple_sources_legacy(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(
fixtures_dir / "with_non_default_multiple_sources_legacy" fixture_dir("with_non_default_multiple_sources_legacy")
) )
assert not poetry.pool.has_default() assert not poetry.pool.has_default()
...@@ -315,8 +331,10 @@ def test_poetry_with_non_default_multiple_sources_legacy(with_simple_keyring: No ...@@ -315,8 +331,10 @@ def test_poetry_with_non_default_multiple_sources_legacy(with_simple_keyring: No
assert {repo.name for repo in poetry.pool.repositories} == {"bar", "PyPI", "foo"} assert {repo.name for repo in poetry.pool.repositories} == {"bar", "PyPI", "foo"}
def test_poetry_with_non_default_multiple_sources(with_simple_keyring: None): def test_poetry_with_non_default_multiple_sources(
poetry = Factory().create_poetry(fixtures_dir / "with_non_default_multiple_sources") fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry(fixture_dir("with_non_default_multiple_sources"))
assert not poetry.pool.has_default() assert not poetry.pool.has_default()
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
...@@ -329,8 +347,8 @@ def test_poetry_with_non_default_multiple_sources(with_simple_keyring: None): ...@@ -329,8 +347,8 @@ def test_poetry_with_non_default_multiple_sources(with_simple_keyring: None):
assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "bar", "foo"} assert {repo.name for repo in poetry.pool.repositories} == {"PyPI", "bar", "foo"}
def test_poetry_with_no_default_source(): def test_poetry_with_no_default_source(fixture_dir: FixtureDirGetter) -> None:
poetry = Factory().create_poetry(fixtures_dir / "sample_project") poetry = Factory().create_poetry(fixture_dir("sample_project"))
assert poetry.pool.has_repository("PyPI") assert poetry.pool.has_repository("PyPI")
assert poetry.pool.get_priority("PyPI") is Priority.DEFAULT assert poetry.pool.get_priority("PyPI") is Priority.DEFAULT
...@@ -338,8 +356,10 @@ def test_poetry_with_no_default_source(): ...@@ -338,8 +356,10 @@ def test_poetry_with_no_default_source():
assert {repo.name for repo in poetry.pool.repositories} == {"PyPI"} assert {repo.name for repo in poetry.pool.repositories} == {"PyPI"}
def test_poetry_with_explicit_source(with_simple_keyring: None) -> None: def test_poetry_with_explicit_source(
poetry = Factory().create_poetry(fixtures_dir / "with_explicit_source") fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
poetry = Factory().create_poetry(fixture_dir("with_explicit_source"))
assert len(poetry.pool.repositories) == 1 assert len(poetry.pool.repositories) == 1
assert len(poetry.pool.all_repositories) == 2 assert len(poetry.pool.all_repositories) == 2
...@@ -351,29 +371,33 @@ def test_poetry_with_explicit_source(with_simple_keyring: None) -> None: ...@@ -351,29 +371,33 @@ def test_poetry_with_explicit_source(with_simple_keyring: None) -> None:
assert [repo.name for repo in poetry.pool.repositories] == ["PyPI"] assert [repo.name for repo in poetry.pool.repositories] == ["PyPI"]
def test_poetry_with_two_default_sources_legacy(with_simple_keyring: None): def test_poetry_with_two_default_sources_legacy(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
with pytest.raises(ValueError) as e: with pytest.raises(ValueError) as e:
Factory().create_poetry(fixtures_dir / "with_two_default_sources_legacy") Factory().create_poetry(fixture_dir("with_two_default_sources_legacy"))
assert str(e.value) == "Only one repository can be the default." assert str(e.value) == "Only one repository can be the default."
def test_poetry_with_two_default_sources(with_simple_keyring: None): def test_poetry_with_two_default_sources(
fixture_dir: FixtureDirGetter, with_simple_keyring: None
) -> None:
with pytest.raises(ValueError) as e: with pytest.raises(ValueError) as e:
Factory().create_poetry(fixtures_dir / "with_two_default_sources") Factory().create_poetry(fixture_dir("with_two_default_sources"))
assert str(e.value) == "Only one repository can be the default." assert str(e.value) == "Only one repository can be the default."
def test_validate(): def test_validate(fixture_dir: FixtureDirGetter) -> None:
complete = TOMLFile(fixtures_dir / "complete.toml") complete = TOMLFile(fixture_dir("complete.toml"))
content = complete.read()["tool"]["poetry"] content = complete.read()["tool"]["poetry"]
assert Factory.validate(content) == {"errors": [], "warnings": []} assert Factory.validate(content) == {"errors": [], "warnings": []}
def test_validate_fails(): def test_validate_fails(fixture_dir: FixtureDirGetter) -> None:
complete = TOMLFile(fixtures_dir / "complete.toml") complete = TOMLFile(fixture_dir("complete.toml"))
content = complete.read()["tool"]["poetry"] content = complete.read()["tool"]["poetry"]
content["this key is not in the schema"] = "" content["this key is not in the schema"] = ""
...@@ -385,11 +409,11 @@ def test_validate_fails(): ...@@ -385,11 +409,11 @@ def test_validate_fails():
assert Factory.validate(content) == {"errors": [expected], "warnings": []} assert Factory.validate(content) == {"errors": [expected], "warnings": []}
def test_create_poetry_fails_on_invalid_configuration(): def test_create_poetry_fails_on_invalid_configuration(
fixture_dir: FixtureDirGetter,
) -> None:
with pytest.raises(RuntimeError) as e: with pytest.raises(RuntimeError) as e:
Factory().create_poetry( Factory().create_poetry(fixture_dir("invalid_pyproject") / "pyproject.toml")
Path(__file__).parent / "fixtures" / "invalid_pyproject" / "pyproject.toml"
)
expected = """\ expected = """\
The Poetry configuration is invalid: The Poetry configuration is invalid:
...@@ -398,7 +422,7 @@ The Poetry configuration is invalid: ...@@ -398,7 +422,7 @@ The Poetry configuration is invalid:
assert str(e.value) == expected assert str(e.value) == expected
def test_create_poetry_with_local_config(fixture_dir: FixtureDirGetter): def test_create_poetry_with_local_config(fixture_dir: FixtureDirGetter) -> None:
poetry = Factory().create_poetry(fixture_dir("with_local_config")) poetry = Factory().create_poetry(fixture_dir("with_local_config"))
assert not poetry.config.get("virtualenvs.in-project") assert not poetry.config.get("virtualenvs.in-project")
...@@ -409,9 +433,11 @@ def test_create_poetry_with_local_config(fixture_dir: FixtureDirGetter): ...@@ -409,9 +433,11 @@ def test_create_poetry_with_local_config(fixture_dir: FixtureDirGetter):
assert not poetry.config.get("virtualenvs.options.system-site-packages") assert not poetry.config.get("virtualenvs.options.system-site-packages")
def test_create_poetry_with_plugins(mocker: MockerFixture): def test_create_poetry_with_plugins(
mocker: MockerFixture, fixture_dir: FixtureDirGetter
) -> None:
mock_metadata_entry_points(mocker, MyPlugin) mock_metadata_entry_points(mocker, MyPlugin)
poetry = Factory().create_poetry(fixtures_dir / "sample_project") poetry = Factory().create_poetry(fixture_dir("sample_project"))
assert poetry.package.readmes == ("README.md",) assert poetry.package.readmes == ("README.md",)
...@@ -42,6 +42,7 @@ if TYPE_CHECKING: ...@@ -42,6 +42,7 @@ if TYPE_CHECKING:
from poetry.poetry import Poetry from poetry.poetry import Poetry
from tests.conftest import Config from tests.conftest import Config
from tests.types import FixtureDirGetter
from tests.types import ProjectFactory from tests.types import ProjectFactory
MINIMAL_SCRIPT = """\ MINIMAL_SCRIPT = """\
...@@ -77,9 +78,8 @@ class MockVirtualEnv(VirtualEnv): ...@@ -77,9 +78,8 @@ class MockVirtualEnv(VirtualEnv):
@pytest.fixture() @pytest.fixture()
def poetry(project_factory: ProjectFactory) -> Poetry: def poetry(project_factory: ProjectFactory, fixture_dir: FixtureDirGetter) -> Poetry:
fixture = Path(__file__).parent.parent / "fixtures" / "simple_project" return project_factory("simple", source=fixture_dir("simple_project"))
return project_factory("simple", source=fixture)
@pytest.fixture() @pytest.fixture()
...@@ -100,7 +100,7 @@ def test_virtualenvs_with_spaces_in_their_path_work_as_expected( ...@@ -100,7 +100,7 @@ def test_virtualenvs_with_spaces_in_their_path_work_as_expected(
@pytest.mark.skipif(sys.platform != "darwin", reason="requires darwin") @pytest.mark.skipif(sys.platform != "darwin", reason="requires darwin")
def test_venv_backup_exclusion(tmp_path: Path, manager: EnvManager): def test_venv_backup_exclusion(tmp_path: Path, manager: EnvManager) -> None:
import xattr import xattr
venv_path = tmp_path / "Virtual Env" venv_path = tmp_path / "Virtual Env"
...@@ -1042,7 +1042,7 @@ def test_check_output_with_called_process_error( ...@@ -1042,7 +1042,7 @@ def test_check_output_with_called_process_error(
@pytest.mark.parametrize("out", ["sys.stdout", "sys.stderr"]) @pytest.mark.parametrize("out", ["sys.stdout", "sys.stderr"])
def test_call_does_not_block_on_full_pipe( def test_call_does_not_block_on_full_pipe(
tmp_path: Path, tmp_venv: VirtualEnv, out: str tmp_path: Path, tmp_venv: VirtualEnv, out: str
): ) -> None:
"""see https://github.com/python-poetry/poetry/issues/7698""" """see https://github.com/python-poetry/poetry/issues/7698"""
script = tmp_path / "script.py" script = tmp_path / "script.py"
script.write_text( script.write_text(
...@@ -1664,10 +1664,8 @@ def test_generate_env_name_uses_real_path( ...@@ -1664,10 +1664,8 @@ def test_generate_env_name_uses_real_path(
@pytest.fixture() @pytest.fixture()
def extended_without_setup_poetry() -> Poetry: def extended_without_setup_poetry(fixture_dir: FixtureDirGetter) -> Poetry:
poetry = Factory().create_poetry( poetry = Factory().create_poetry(fixture_dir("extended_project_without_setup"))
Path(__file__).parent.parent / "fixtures" / "extended_project_without_setup"
)
return poetry return poetry
...@@ -1713,6 +1711,7 @@ def test_build_environment_not_called_without_build_script_specified( ...@@ -1713,6 +1711,7 @@ def test_build_environment_not_called_without_build_script_specified(
def test_create_venv_project_name_empty_sets_correct_prompt( def test_create_venv_project_name_empty_sets_correct_prompt(
fixture_dir: FixtureDirGetter,
project_factory: ProjectFactory, project_factory: ProjectFactory,
config: Config, config: Config,
mocker: MockerFixture, mocker: MockerFixture,
...@@ -1721,8 +1720,7 @@ def test_create_venv_project_name_empty_sets_correct_prompt( ...@@ -1721,8 +1720,7 @@ def test_create_venv_project_name_empty_sets_correct_prompt(
if "VIRTUAL_ENV" in os.environ: if "VIRTUAL_ENV" in os.environ:
del os.environ["VIRTUAL_ENV"] del os.environ["VIRTUAL_ENV"]
fixture = Path(__file__).parent.parent / "fixtures" / "no_name_project" poetry = project_factory("no", source=fixture_dir("no_name_project"))
poetry = project_factory("no", source=fixture)
manager = EnvManager(poetry) manager = EnvManager(poetry)
poetry.package.python_versions = "^3.7" poetry.package.python_versions = "^3.7"
......
from __future__ import annotations from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
import pytest import pytest
...@@ -14,7 +13,7 @@ if TYPE_CHECKING: ...@@ -14,7 +13,7 @@ if TYPE_CHECKING:
from tests.types import FixtureDirGetter from tests.types import FixtureDirGetter
def test_parse_requires(): def test_parse_requires() -> None:
requires = """\ requires = """\
jsonschema>=2.6.0.0,<3.0.0.0 jsonschema>=2.6.0.0,<3.0.0.0
lockfile>=0.12.0.0,<0.13.0.0 lockfile>=0.12.0.0,<0.13.0.0
...@@ -71,10 +70,8 @@ isort@ git+git://github.com/timothycrosley/isort.git@e63ae06ec7d70b06df9e5283576 ...@@ -71,10 +70,8 @@ isort@ git+git://github.com/timothycrosley/isort.git@e63ae06ec7d70b06df9e5283576
def test_default_hash(fixture_dir: FixtureDirGetter) -> None: def test_default_hash(fixture_dir: FixtureDirGetter) -> None:
root_dir = Path(__file__).parent.parent.parent
file_path = root_dir / fixture_dir("distributions/demo-0.1.0.tar.gz")
sha_256 = "9fa123ad707a5c6c944743bf3e11a0e80d86cb518d3cf25320866ca3ef43e2ad" sha_256 = "9fa123ad707a5c6c944743bf3e11a0e80d86cb518d3cf25320866ca3ef43e2ad"
assert get_file_hash(file_path) == sha_256 assert get_file_hash(fixture_dir("distributions") / "demo-0.1.0.tar.gz") == sha_256
try: try:
...@@ -130,6 +127,5 @@ except ImportError: ...@@ -130,6 +127,5 @@ except ImportError:
def test_guaranteed_hash( def test_guaranteed_hash(
hash_name: str, expected: str, fixture_dir: FixtureDirGetter hash_name: str, expected: str, fixture_dir: FixtureDirGetter
) -> None: ) -> None:
root_dir = Path(__file__).parent.parent.parent file_path = fixture_dir("distributions") / "demo-0.1.0.tar.gz"
file_path = root_dir / fixture_dir("distributions/demo-0.1.0.tar.gz")
assert get_file_hash(file_path, hash_name) == expected assert get_file_hash(file_path, hash_name) == expected
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment