|
10 | 10 | import pytest
|
11 | 11 | import requests
|
12 | 12 |
|
| 13 | +from packaging.tags import Tag |
13 | 14 | from packaging.utils import canonicalize_name
|
14 | 15 | from poetry.core.packages.dependency import Dependency
|
15 | 16 | from poetry.core.semver.version import Version
|
16 | 17 |
|
17 | 18 | from poetry.factory import Factory
|
| 19 | +from poetry.inspection.info import PackageInfo |
18 | 20 | from poetry.repositories.exceptions import PackageNotFound
|
19 | 21 | from poetry.repositories.exceptions import RepositoryError
|
20 | 22 | from poetry.repositories.legacy_repository import LegacyRepository
|
|
30 | 32 | import httpretty
|
31 | 33 |
|
32 | 34 | from _pytest.monkeypatch import MonkeyPatch
|
| 35 | + from pytest_mock import MockerFixture |
33 | 36 |
|
34 | 37 | from poetry.config.config import Config
|
35 | 38 |
|
@@ -246,6 +249,45 @@ def test_find_packages_yanked(constraint: str, expected: list[str]) -> None:
|
246 | 249 | assert [str(p.version) for p in packages] == expected
|
247 | 250 |
|
248 | 251 |
|
| 252 | +@pytest.mark.parametrize( |
| 253 | + "tags,bdist", |
| 254 | + [ |
| 255 | + (("cp37", "cp37m", "win32"), True), |
| 256 | + (("cp310", "cp310", "manylinux_2_7_x86_64"), False), |
| 257 | + ], |
| 258 | +) |
| 259 | +def test_get_package_dependencies_with_sdist_and_bdist_platform_compatible( |
| 260 | + tags: tuple[str, str, str], bdist: bool, mocker: MockerFixture |
| 261 | +) -> None: |
| 262 | + get_info_from_wheel = mocker.patch( |
| 263 | + "poetry.repositories.legacy_repository.LegacyRepository._get_info_from_wheel" |
| 264 | + ) |
| 265 | + get_info_from_sdist = mocker.patch( |
| 266 | + "poetry.repositories.legacy_repository.LegacyRepository._get_info_from_sdist" |
| 267 | + ) |
| 268 | + name, version = "pyyaml", "3.13" |
| 269 | + get_info_from_wheel.return_value = PackageInfo(name=name, version=version) |
| 270 | + get_info_from_sdist.return_value = PackageInfo(name=name, version=version) |
| 271 | + |
| 272 | + sys_tags = mocker.patch("poetry.repositories.http.sys_tags") |
| 273 | + sys_tags.return_value = [Tag(*tags)] |
| 274 | + |
| 275 | + name, version = "pyyaml", "3.13" |
| 276 | + |
| 277 | + repo = MockRepository() |
| 278 | + package = repo.package(name, Version.parse(version)) |
| 279 | + |
| 280 | + assert package.name == name |
| 281 | + assert package.version.text == version |
| 282 | + |
| 283 | + if bdist: |
| 284 | + assert get_info_from_wheel.called |
| 285 | + assert not get_info_from_sdist.called |
| 286 | + else: |
| 287 | + assert not get_info_from_wheel.called |
| 288 | + assert get_info_from_sdist.called |
| 289 | + |
| 290 | + |
249 | 291 | def test_get_package_information_chooses_correct_distribution() -> None:
|
250 | 292 | repo = MockRepository()
|
251 | 293 |
|
|
0 commit comments