From a230088467e66ccc554f84af3c7b72dde2dd63fd Mon Sep 17 00:00:00 2001 From: Ashwin Nair Date: Sat, 8 Oct 2022 23:31:05 +0400 Subject: [PATCH] Add more tests --- tests/installation/test_pip_installer.py | 35 +++++++ tests/packages/test_locker.py | 95 +++++++++++++++++++ .../METADATA | 6 ++ .../direct_url.json | 5 + .../repositories/test_installed_repository.py | 19 ++++ tests/utils/test_dependency_specification.py | 8 ++ 6 files changed, 168 insertions(+) create mode 100644 tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/METADATA create mode 100644 tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/direct_url.json diff --git a/tests/installation/test_pip_installer.py b/tests/installation/test_pip_installer.py index eab8303cba3..81cfef0268a 100644 --- a/tests/installation/test_pip_installer.py +++ b/tests/installation/test_pip_installer.py @@ -10,6 +10,7 @@ from cleo.io.null_io import NullIO from poetry.core.packages.package import Package +from poetry.core.packages.utils.link import Link from poetry.installation.pip_installer import PipInstaller from poetry.repositories.legacy_repository import LegacyRepository @@ -52,6 +53,19 @@ def package_git_with_subdirectory() -> Package: return package +@pytest.fixture +def package_url_zip_with_subdirectory() -> Package: + package = Package( + "subdirectories", + "2.0.0", + source_type="url", + source_url="https://github.com/demo/subdirectories.zip", + source_subdirectory="two", + ) + + return package + + @pytest.fixture def pool() -> Pool: return Pool() @@ -117,6 +131,27 @@ def test_requirement_git_subdirectory( assert Path(cmd[-1]).parts[-3:] == ("demo", "subdirectories", "two") +def test_requirement_url_zip_subdirectory( + pool: Pool, package_url_zip_with_subdirectory: Package +) -> None: + null_env = NullEnv() + installer = PipInstaller(null_env, NullIO(), pool) + result = installer.requirement(package_url_zip_with_subdirectory) + expected = ( + "https://github.com/demo/subdirectories.zip#egg=subdirectories&subdirectory=two" + ) + + assert result == expected + installer.install(package_url_zip_with_subdirectory) + assert len(null_env.executed) == 1 + cmd = null_env.executed[0] + + link = Link(cmd[-1]) + assert link.filename == "subdirectories.zip" + assert link.subdirectory_fragment == "two" + assert link.is_sdist + + def test_requirement_git_develop_false(installer: PipInstaller, package_git: Package): package_git.develop = False result = installer.requirement(package_git) diff --git a/tests/packages/test_locker.py b/tests/packages/test_locker.py index 9da6c422f7c..897325078c2 100644 --- a/tests/packages/test_locker.py +++ b/tests/packages/test_locker.py @@ -79,6 +79,13 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): source_type="url", source_url="https://example.org/url-package-1.0-cp39-win_amd64.whl", ) + package_url_zip = Package( + "url-zip-subdir", + "1.0", + source_type="url", + source_url="https://example.org/archive/1.0.zip", + source_subdirectory="subdir", + ) packages = [ package_a2, package_a, @@ -87,6 +94,7 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): package_git_with_subdirectory, package_url_win32, package_url_linux, + package_url_zip, ] locker.set_lock_data(root, packages) @@ -191,6 +199,20 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): type = "url" url = "https://example.org/url-package-1.0-cp39-win_amd64.whl" +[[package]] +name = "url-zip-subdir" +version = "1.0" +description = "" +category = "main" +optional = false +python-versions = "*" +files = [] + +[package.source] +type = "url" +url = "https://example.org/archive/1.0.zip" +subdirectory = "subdir" + [metadata] lock-version = "2.0" python-versions = "*" @@ -411,6 +433,39 @@ def test_locker_properly_loads_subdir(locker: Locker) -> None: assert package.source_subdirectory == "subdir" +def test_locker_properly_loads_url_zip_with_subdir(locker: Locker) -> None: + content = """\ +[[package]] +name = "url-zip-subdir" +version = "1.2.0" +description = "" +category = "main" +optional = false +python-versions = "*" +files = [] + +[package.source] +type = "url" +url = "https://github.com/python-poetry/archive/1.2.0.zip" +subdirectory = "subdir" + +[metadata] +lock-version = "2.0" +python-versions = "*" +content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" +""" + locker.lock.write(tomlkit.parse(content)) + + repository = locker.locked_repository() + assert len(repository.packages) == 1 + + packages = repository.find_packages(get_dependency("url-zip-subdir", "1.2.0")) + assert len(packages) == 1 + + package = packages[0] + assert package.source_subdirectory == "subdir" + + def test_locker_properly_assigns_metadata_files(locker: Locker) -> None: """ For multiple constraints dependencies, there is only one common entry in @@ -895,6 +950,46 @@ def test_locker_dumps_subdir(locker: Locker, root: ProjectPackage) -> None: assert content == expected +def test_locker_dumps_url_zip_with_subdir(locker: Locker, root: ProjectPackage) -> None: + package_git_with_subdirectory = Package( + "url-zip-subdir", + "1.2.0", + source_type="url", + source_url="https://github.com/python-poetry/archive/1.2.0.zip", + source_subdirectory="subdir", + ) + + locker.set_lock_data(root, [package_git_with_subdirectory]) + + with locker.lock.open(encoding="utf-8") as f: + content = f.read() + + expected = f"""\ +# {GENERATED_COMMENT} + +[[package]] +name = "url-zip-subdir" +version = "1.2.0" +description = "" +category = "main" +optional = false +python-versions = "*" +files = [] + +[package.source] +type = "url" +url = "https://github.com/python-poetry/archive/1.2.0.zip" +subdirectory = "subdir" + +[metadata] +lock-version = "2.0" +python-versions = "*" +content-hash = "115cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8" +""" # noqa: E800 + + assert content == expected + + def test_locker_dumps_dependency_extras_in_correct_order( locker: Locker, root: ProjectPackage ): diff --git a/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/METADATA b/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/METADATA new file mode 100644 index 00000000000..bb09c280747 --- /dev/null +++ b/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/METADATA @@ -0,0 +1,6 @@ +Metadata-Version: 2.1 +Name: url-pep-610-subdirectory +Version: 1.2.3 +Summary: Foo +License: MIT +Requires-Python: >=3.6 diff --git a/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/direct_url.json b/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/direct_url.json new file mode 100644 index 00000000000..f716ac1e346 --- /dev/null +++ b/tests/repositories/fixtures/installed/lib/python3.7/site-packages/url_pep_610_subdirectory-1.2.3.dist-info/direct_url.json @@ -0,0 +1,5 @@ +{ + "url": "https://python-poetry.org/distributions/url-pep-610-subdirectory-1.2.3.zip", + "subdirectory": "subdir", + "archive_info": {} +} diff --git a/tests/repositories/test_installed_repository.py b/tests/repositories/test_installed_repository.py index 87dfe183c8a..05f7c5a017e 100644 --- a/tests/repositories/test_installed_repository.py +++ b/tests/repositories/test_installed_repository.py @@ -43,6 +43,9 @@ SITE_PURELIB / "git_pep_610_subdirectory-1.2.3.dist-info" ), metadata.PathDistribution(SITE_PURELIB / "url_pep_610-1.2.3.dist-info"), + metadata.PathDistribution( + SITE_PURELIB / "url_pep_610_subdirectory-1.2.3.dist-info" + ), metadata.PathDistribution(SITE_PURELIB / "file_pep_610-1.2.3.dist-info"), metadata.PathDistribution(SITE_PURELIB / "directory_pep_610-1.2.3.dist-info"), metadata.PathDistribution( @@ -268,6 +271,22 @@ def test_load_pep_610_compliant_url_packages(repository: InstalledRepository): ) +def test_load_pep_610_compliant_url_packages_with_subdirectory( + repository: InstalledRepository, +): + package = get_package_from_repository("url-pep-610-subdirectory", repository) + + assert package is not None + assert package.name == "url-pep-610-subdirectory" + assert package.version.text == "1.2.3" + assert package.source_type == "url" + assert package.source_subdirectory == "subdir" + assert ( + package.source_url + == "https://python-poetry.org/distributions/url-pep-610-subdirectory-1.2.3.zip" + ) + + def test_load_pep_610_compliant_file_packages(repository: InstalledRepository): package = get_package_from_repository("file-pep-610", repository) diff --git a/tests/utils/test_dependency_specification.py b/tests/utils/test_dependency_specification.py index 8b1c1dfd1b1..ff990a7f0c0 100644 --- a/tests/utils/test_dependency_specification.py +++ b/tests/utils/test_dependency_specification.py @@ -44,6 +44,14 @@ "subdirectory": "two", }, ), + ( + "https://python-poetry.org/distributions/demo-0.1.0.zip#subdirectory=pkg", + { + "url": "https://python-poetry.org/distributions/demo-0.1.0.zip", + "name": "demo", + "subdirectory": "pkg", + }, + ), ("demo", {"name": "demo"}), ("demo@1.0.0", {"name": "demo", "version": "1.0.0"}), ("demo@^1.0.0", {"name": "demo", "version": "^1.0.0"}),