From 0e1c634f7da9702ea5539ce513fad03dfab2d3b6 Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Tue, 23 May 2023 21:38:18 +0200 Subject: [PATCH 1/2] test(solver): comprehensive dependencies and repos --- tests/puzzle/test_solver.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/puzzle/test_solver.py b/tests/puzzle/test_solver.py index 1044a25c684..f69e28f8611 100644 --- a/tests/puzzle/test_solver.py +++ b/tests/puzzle/test_solver.py @@ -3084,22 +3084,27 @@ def test_solver_chooses_direct_dependency_from_explicit_if_explicit( def test_solver_ignores_explicit_repo_for_transient_dependencies( package: ProjectPackage, + repo: Repository, io: NullIO, ) -> None: - # clikit depends on pylev, which is in MockPyPIRepository (explicit) but not in - # MockLegacyRepository - package.python_versions = "^3.7" + # dependency of root with explicit source package.add_dependency( - Factory.create_dependency("clikit", {"version": "^0.2.0", "source": "PyPI"}) + Factory.create_dependency("demo", {"version": "*", "source": "repo"}) ) + demo = Package("demo", "0.1.2") + repo.add_package(demo) + + # transient dependency of demo with explicit source + # not specified as dependency of root + demo.add_dependency(Factory.create_dependency("pendulum", "*")) + pendulum = get_package("pendulum", "2.0.3") + repo.add_package(pendulum) pool = RepositoryPool() - pool.add_repository(MockPyPIRepository(), priority=Priority.EXPLICIT) - pool.add_repository(MockLegacyRepository()) + pool.add_repository(repo, priority=Priority.EXPLICIT) solver = Solver(package, pool, [], [], io) - - with pytest.raises(SolverProblemError): + with pytest.raises(SolverProblemError, match="no versions of pendulum match"): solver.solve() From 2f7692bbfa54a5b2cd2496784fc38d89b9ddcb5b Mon Sep 17 00:00:00 2001 From: Bart Kamphorst Date: Tue, 23 May 2023 21:58:15 +0200 Subject: [PATCH 2/2] test(solver): inter-dependent dependencies with explicit source --- tests/puzzle/test_solver.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/puzzle/test_solver.py b/tests/puzzle/test_solver.py index f69e28f8611..61301244f8f 100644 --- a/tests/puzzle/test_solver.py +++ b/tests/puzzle/test_solver.py @@ -3108,6 +3108,42 @@ def test_solver_ignores_explicit_repo_for_transient_dependencies( solver.solve() +def test_solver_finds_inter_dependencies_in_explicit_repo( + package: ProjectPackage, + repo: Repository, + io: NullIO, +) -> None: + # dependency of root with explicit source + package.add_dependency( + Factory.create_dependency("demo", {"version": "*", "source": "repo"}) + ) + demo = Package("demo", "0.1.2") + repo.add_package(demo) + + # transient dependency of demo with explicit source + # also specified as dependency of root with explicit source + package.add_dependency( + Factory.create_dependency("pendulum", {"version": "*", "source": "repo"}) + ) + demo.add_dependency(Factory.create_dependency("pendulum", "*")) + pendulum = get_package("pendulum", "2.0.3") + repo.add_package(pendulum) + + pool = RepositoryPool() + pool.add_repository(repo, priority=Priority.EXPLICIT) + + solver = Solver(package, pool, [], [], io) + transaction = solver.solve() + + check_solver_result( + transaction, + [ + {"job": "install", "package": pendulum, "skipped": False}, + {"job": "install", "package": demo, "skipped": False}, + ], + ) + + def test_solver_discards_packages_with_empty_markers( package: ProjectPackage, repo: Repository,