|
12 | 12 |
|
13 | 13 | from poetry.factory import Factory
|
14 | 14 | from poetry.masonry.builders.editable import EditableBuilder
|
| 15 | +from poetry.repositories.installed_repository import InstalledRepository |
| 16 | +from poetry.utils.env import EnvCommandError |
15 | 17 | from poetry.utils.env import EnvManager
|
16 | 18 | from poetry.utils.env import MockEnv
|
17 | 19 | from poetry.utils.env import VirtualEnv
|
| 20 | +from poetry.utils.env import ephemeral_environment |
18 | 21 |
|
19 | 22 |
|
20 | 23 | if TYPE_CHECKING:
|
@@ -203,6 +206,41 @@ def test_builder_falls_back_on_setup_and_pip_for_packages_with_build_scripts(
|
203 | 206 | assert [] == env.executed
|
204 | 207 |
|
205 | 208 |
|
| 209 | +def test_builder_setup_generation_runs_with_pip_editable(tmp_dir: str): |
| 210 | + # create an isolated copy of the project |
| 211 | + fixture = Path(__file__).parent.parent.parent / "fixtures" / "extended_project" |
| 212 | + extended_project = Path(tmp_dir) / "extended_project" |
| 213 | + |
| 214 | + shutil.copytree(fixture, extended_project) |
| 215 | + assert extended_project.exists() |
| 216 | + |
| 217 | + poetry = Factory().create_poetry(extended_project) |
| 218 | + |
| 219 | + # we need a venv with setuptools since we are verifying setup.py builds |
| 220 | + with ephemeral_environment(flags={"no-setuptools": False}) as venv: |
| 221 | + builder = EditableBuilder(poetry, venv, NullIO()) |
| 222 | + builder.build() |
| 223 | + |
| 224 | + # is the package installed? |
| 225 | + repository = InstalledRepository.load(venv) |
| 226 | + assert repository.package("extended-project", "1.2.3") |
| 227 | + |
| 228 | + # check for the module built by build.py |
| 229 | + try: |
| 230 | + output = venv.run_python_script( |
| 231 | + "from extended_project import built; print(built.__file__)" |
| 232 | + ).strip() |
| 233 | + except EnvCommandError: |
| 234 | + pytest.fail("Unable to import built module") |
| 235 | + else: |
| 236 | + built_py = Path(output).resolve() |
| 237 | + |
| 238 | + expected = extended_project / "extended_project" / "built.py" |
| 239 | + |
| 240 | + # ensure the package was installed as editable |
| 241 | + assert built_py == expected.resolve() |
| 242 | + |
| 243 | + |
206 | 244 | def test_builder_installs_proper_files_when_packages_configured(
|
207 | 245 | project_with_include: Poetry, tmp_venv: VirtualEnv
|
208 | 246 | ):
|
|
0 commit comments