1import os 2 3import pytest 4 5from .constants import PACKAGES_PATH 6 7from piptools.repositories import PyPIRepository 8 9 10class MockedPyPIRepository(PyPIRepository): 11 def get_dependencies(self, ireq): 12 # "mock" everything but editable reqs to avoid disk and network I/O 13 # when possible 14 if not ireq.editable: 15 return set() 16 17 return super(MockedPyPIRepository, self).get_dependencies(ireq) 18 19 20@pytest.fixture 21def mocked_repository(tmpdir): 22 return MockedPyPIRepository(["--no-index"], cache_dir=str(tmpdir / "pypi-repo")) 23 24 25def test_editable_top_level_deps_preserved( 26 base_resolver, mocked_repository, from_editable 27): 28 package_path = os.path.join(PACKAGES_PATH, "small_fake_with_deps") 29 ireqs = [from_editable(package_path)] 30 output = base_resolver( 31 ireqs, prereleases=False, repository=mocked_repository 32 ).resolve() 33 34 output = {p.name for p in output} 35 36 # sanity check that we're expecting something 37 assert output != set() 38 assert "small-fake-a" in output 39