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