Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 49 additions & 8 deletions tests/puzzle/test_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -3084,25 +3084,66 @@ 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()


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,
Expand Down