From 58a9566fa99421ac6844551486c059ddee71f1d7 Mon Sep 17 00:00:00 2001 From: Tomáš Hrnčiar Date: Nov 08 2022 15:55:01 +0000 Subject: Backport upstream patch to fix some failing tests Some tests are failing with permission error because they were writing to the Poetry test runtime environment rather than a mocked local directory. --- diff --git a/fix-remove-side-effects-from-tests.patch b/fix-remove-side-effects-from-tests.patch new file mode 100644 index 0000000..da535e2 --- /dev/null +++ b/fix-remove-side-effects-from-tests.patch @@ -0,0 +1,218 @@ +From 560ecaf5442aef825cb3cdecf46a677f3bfe12f4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= +Date: Tue, 8 Nov 2022 14:21:29 +0100 +Subject: [PATCH] fix: remove side effects from tests + +--- + tests/installation/test_installer.py | 7 ++-- + tests/installation/test_installer_old.py | 7 ++-- + tests/installation/test_pip_installer.py | 42 +++++++++---------- + .../masonry/builders/test_editable_builder.py | 14 ++++++- + 4 files changed, 41 insertions(+), 29 deletions(-) + +diff --git a/tests/installation/test_installer.py b/tests/installation/test_installer.py +index 1b8938d..3db0d33 100644 +--- a/tests/installation/test_installer.py ++++ b/tests/installation/test_installer.py +@@ -174,8 +174,8 @@ def locker(project_root: Path) -> Locker: + + + @pytest.fixture() +-def env() -> NullEnv: +- return NullEnv() ++def env(tmp_path: Path) -> NullEnv: ++ return NullEnv(path=tmp_path) + + + @pytest.fixture() +@@ -1151,12 +1151,13 @@ def test_installer_with_pypi_repository( + locker: Locker, + installed: CustomInstalledRepository, + config: Config, ++ env: NullEnv, + ): + pool = Pool() + pool.add_repository(MockRepository()) + + installer = Installer( +- NullIO(), NullEnv(), package, locker, pool, config, installed=installed ++ NullIO(), env, package, locker, pool, config, installed=installed + ) + + package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"])) +diff --git a/tests/installation/test_installer_old.py b/tests/installation/test_installer_old.py +index baa5964..5bb28fd 100644 +--- a/tests/installation/test_installer_old.py ++++ b/tests/installation/test_installer_old.py +@@ -126,8 +126,8 @@ def locker(project_root: Path) -> Locker: + + + @pytest.fixture() +-def env() -> NullEnv: +- return NullEnv() ++def env(tmp_path: Path) -> NullEnv: ++ return NullEnv(path=tmp_path) + + + @pytest.fixture() +@@ -819,12 +819,13 @@ def test_installer_with_pypi_repository( + locker: Locker, + installed: CustomInstalledRepository, + config: Config, ++ env: NullEnv, + ): + pool = Pool() + pool.add_repository(MockRepository()) + + installer = Installer( +- NullIO(), NullEnv(), package, locker, pool, config, installed=installed ++ NullIO(), env, package, locker, pool, config, installed=installed + ) + + package.add_dependency(Factory.create_dependency("pytest", "^3.5", groups=["dev"])) +diff --git a/tests/installation/test_pip_installer.py b/tests/installation/test_pip_installer.py +index 62624b6..a556fd6 100644 +--- a/tests/installation/test_pip_installer.py ++++ b/tests/installation/test_pip_installer.py +@@ -57,9 +57,14 @@ def pool() -> Pool: + return Pool() + + ++@pytest.fixture() ++def env(tmp_path: Path) -> NullEnv: ++ return NullEnv(path=tmp_path) ++ ++ + @pytest.fixture +-def installer(pool: Pool) -> PipInstaller: +- return PipInstaller(NullEnv(), NullIO(), pool) ++def installer(pool: RepositoryPool, env: NullEnv) -> PipInstaller: ++ return PipInstaller(env, NullIO(), pool) + + + def test_requirement(installer: PipInstaller): +@@ -83,8 +88,8 @@ def test_requirement(installer: PipInstaller): + assert result == expected + + +-def test_requirement_source_type_url(): +- installer = PipInstaller(NullEnv(), NullIO(), Pool()) ++def test_requirement_source_type_url(env: NullEnv): ++ installer = PipInstaller(env, NullIO(), Pool()) + + foo = Package( + "foo", +@@ -100,10 +105,9 @@ def test_requirement_source_type_url(): + + + def test_requirement_git_subdirectory( +- pool: Pool, package_git_with_subdirectory: Package ++ pool: RepositoryPool, package_git_with_subdirectory: Package, env: NullEnv + ) -> None: +- null_env = NullEnv() +- installer = PipInstaller(null_env, NullIO(), pool) ++ installer = PipInstaller(env, NullIO(), pool) + result = installer.requirement(package_git_with_subdirectory) + expected = ( + "git+https://github.com/demo/subdirectories.git" +@@ -112,8 +116,8 @@ def test_requirement_git_subdirectory( + + assert result == expected + installer.install(package_git_with_subdirectory) +- assert len(null_env.executed) == 1 +- cmd = null_env.executed[0] ++ assert len(env.executed) == 1 ++ cmd = env.executed[0] + assert Path(cmd[-1]).parts[-3:] == ("demo", "subdirectories", "two") + + +@@ -158,7 +162,7 @@ def test_install_with_non_pypi_default_repository(pool: Pool, installer: PipInst + ("cert", "cert"), + ], + ) +-def test_install_with_certs(mocker: MockerFixture, key: str, option: str): ++def test_install_with_certs(mocker: MockerFixture, key: str, option: str, env: NullEnv): + client_path = "path/to/client.pem" + mocker.patch( + "poetry.utils.authenticator.Authenticator.get_certs_for_url", +@@ -169,9 +173,7 @@ def test_install_with_certs(mocker: MockerFixture, key: str, option: str): + pool = Pool() + pool.add_repository(default, default=True) + +- null_env = NullEnv() +- +- installer = PipInstaller(null_env, NullIO(), pool) ++ installer = PipInstaller(env, NullIO(), pool) + + foo = Package( + "foo", +@@ -183,8 +185,8 @@ def test_install_with_certs(mocker: MockerFixture, key: str, option: str): + + installer.install(foo) + +- assert len(null_env.executed) == 1 +- cmd = null_env.executed[0] ++ assert len(env.executed) == 1 ++ cmd = env.executed[0] + assert f"--{option}" in cmd + cert_index = cmd.index(f"--{option}") + # Need to do the str(Path()) bit because Windows paths get modified by Path +@@ -240,16 +242,14 @@ def test_uninstall_git_package_nspkg_pth_cleanup( + assert not re.match(rf"Error processing line 1 of .*{pth_file}", output) + + +-def test_install_with_trusted_host(config: Config): ++def test_install_with_trusted_host(config: Config, env: NullEnv): + config.merge({"certificates": {"default": {"cert": False}}}) + + default = LegacyRepository("default", "https://foo.bar") + pool = Pool() + pool.add_repository(default, default=True) + +- null_env = NullEnv() +- +- installer = PipInstaller(null_env, NullIO(), pool) ++ installer = PipInstaller(env, NullIO(), pool) + + foo = Package( + "foo", +@@ -261,8 +261,8 @@ def test_install_with_trusted_host(config: Config): + + installer.install(foo) + +- assert len(null_env.executed) == 1 +- cmd = null_env.executed[0] ++ assert len(env.executed) == 1 ++ cmd = env.executed[0] + assert "--trusted-host" in cmd + cert_index = cmd.index("--trusted-host") + assert cmd[cert_index + 1] == "foo.bar" +diff --git a/tests/masonry/builders/test_editable_builder.py b/tests/masonry/builders/test_editable_builder.py +index effefb4..13abe59 100644 +--- a/tests/masonry/builders/test_editable_builder.py ++++ b/tests/masonry/builders/test_editable_builder.py +@@ -288,9 +288,19 @@ def test_builder_installs_proper_files_when_packages_configured( + + + def test_builder_should_execute_build_scripts( +- mocker: MockerFixture, extended_without_setup_poetry: Poetry, tmp_dir: str ++ mocker: MockerFixture, extended_without_setup_poetry: Poetry, tmp_path: Path + ): +- env = MockEnv(path=Path(tmp_dir) / "foo") ++ env = MockEnv(path=tmp_path / "foo") ++ site_packages_dir = tmp_path / "site-packages" ++ site_packages_dir.mkdir(parents=True, exist_ok=True) ++ mocker.patch.object( ++ env, ++ "get_paths", ++ return_value={ ++ "purelib": str(site_packages_dir), ++ "platlib": str(site_packages_dir), ++ }, ++ ) + mocker.patch( + "poetry.masonry.builders.editable.build_environment" + ).return_value.__enter__.return_value = env +-- +2.37.3 + diff --git a/poetry.spec b/poetry.spec index db12201..0ee6f65 100644 --- a/poetry.spec +++ b/poetry.spec @@ -24,6 +24,10 @@ Source0: https://github.com/python-poetry/poetry/archive/%{version}/poetr # get_system_wheels_paths() from virtualenv. # TODO get rid of this patch by talking to virtualenv and poetry upstream about a better solution. Patch: Patch-get_embedded_wheel-to-return-system-wheels-fro.patch +# Some tests are failing with permission error because they were writing to the Poetry test +# runtime environment rather than a mocked local directory. +# Merged upstream: https://github.com/python-poetry/poetry/pull/6929.patch +Patch: fix-remove-side-effects-from-tests.patch BuildArch: noarch @@ -118,6 +122,7 @@ not editable_builder" %changelog * Tue Nov 08 2022 Tomáš Hrnčiar - 1.2.1-4 - Add patch to return correct wheels +- Backport upstream patch to fix some failing tests * Sun Oct 30 2022 Miro Hrončok - 1.2.1-3 - Allow newer requests-toolbelt version