Skip to content

Commit

Permalink
tests: ensure forward compatibility with python-poetry/poetry-core#402 (
Browse files Browse the repository at this point in the history
  • Loading branch information
radoering authored May 8, 2023
1 parent 1af8929 commit a27d35e
Showing 1 changed file with 105 additions and 51 deletions.
156 changes: 105 additions & 51 deletions tests/utils/test_dependency_specification.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,102 +11,153 @@


if TYPE_CHECKING:
from collections.abc import Collection

from pytest_mock import MockerFixture

from poetry.utils.cache import ArtifactCache
from poetry.utils.dependency_specification import DependencySpec


@pytest.mark.parametrize(
("requirement", "specification"),
("requirement", "expected_variants"),
[
(
"git+https://github.com/demo/demo.git",
{"git": "https://github.com/demo/demo.git", "name": "demo"},
({"git": "https://github.com/demo/demo.git", "name": "demo"},),
),
(
"git+ssh://github.com/demo/demo.git",
{"git": "ssh://github.com/demo/demo.git", "name": "demo"},
({"git": "ssh://github.com/demo/demo.git", "name": "demo"},),
),
(
"git+https://github.com/demo/demo.git#main",
{"git": "https://github.com/demo/demo.git", "name": "demo", "rev": "main"},
(
{
"git": "https://github.com/demo/demo.git",
"name": "demo",
"rev": "main",
},
),
),
(
"git+https://github.com/demo/demo.git@main",
{"git": "https://github.com/demo/demo.git", "name": "demo", "rev": "main"},
(
{
"git": "https://github.com/demo/demo.git",
"name": "demo",
"rev": "main",
},
),
),
(
"git+https://github.com/demo/subdirectories.git@main#subdirectory=two",
{
"git": "https://github.com/demo/subdirectories.git",
"name": "two",
"rev": "main",
"subdirectory": "two",
},
(
{
"git": "https://github.com/demo/subdirectories.git",
"name": "two",
"rev": "main",
"subdirectory": "two",
},
),
),
("demo", ({"name": "demo"},)),
("demo@1.0.0", ({"name": "demo", "version": "1.0.0"},)),
("demo@^1.0.0", ({"name": "demo", "version": "^1.0.0"},)),
("demo@==1.0.0", ({"name": "demo", "version": "==1.0.0"},)),
("demo@!=1.0.0", ({"name": "demo", "version": "!=1.0.0"},)),
("demo@~1.0.0", ({"name": "demo", "version": "~1.0.0"},)),
(
"demo[a,b]@1.0.0",
({"name": "demo", "version": "1.0.0", "extras": ["a", "b"]},),
),
("demo", {"name": "demo"}),
("demo@1.0.0", {"name": "demo", "version": "1.0.0"}),
("demo@^1.0.0", {"name": "demo", "version": "^1.0.0"}),
("demo@==1.0.0", {"name": "demo", "version": "==1.0.0"}),
("demo@!=1.0.0", {"name": "demo", "version": "!=1.0.0"}),
("demo@~1.0.0", {"name": "demo", "version": "~1.0.0"}),
("demo[a,b]@1.0.0", {"name": "demo", "version": "1.0.0", "extras": ["a", "b"]}),
("demo[a,b]", {"name": "demo", "extras": ["a", "b"]}),
("../demo", {"name": "demo", "path": "../demo"}),
("../demo/demo.whl", {"name": "demo", "path": "../demo/demo.whl"}),
("demo[a,b]", ({"name": "demo", "extras": ["a", "b"]},)),
("../demo", ({"name": "demo", "path": "../demo"},)),
("../demo/demo.whl", ({"name": "demo", "path": "../demo/demo.whl"},)),
(
"https://example.com/distributions/demo-0.1.0.tar.gz",
{
"name": "demo",
"url": "https://example.com/distributions/demo-0.1.0.tar.gz",
},
(
{
"name": "demo",
"url": "https://example.com/distributions/demo-0.1.0.tar.gz",
},
),
),
# PEP 508 inputs
(
"poetry-core (>=1.0.7,<1.1.0)",
{"name": "poetry-core", "version": ">=1.0.7,<1.1.0"},
({"name": "poetry-core", "version": ">=1.0.7,<1.1.0"},),
),
(
'requests [security,tests] >= 2.8.1, == 2.8.* ; python_version < "2.7"',
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0",
"extras": ["security", "tests"],
},
( # allow several equivalent versions to make test more robust
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.dev0",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0.dev0",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,==2.8.*",
"extras": ["security", "tests"],
},
),
),
("name (>=3,<4)", {"name": "name", "version": ">=3,<4"}),
("name (>=3,<4)", ({"name": "name", "version": ">=3,<4"},)),
(
"name@http://foo.com",
{"name": "name", "url": "http://foo.com"},
({"name": "name", "url": "http://foo.com"},),
),
(
"name [fred,bar] @ http://foo.com ; python_version=='2.7'",
{
"name": "name",
"markers": 'python_version == "2.7"',
"url": "http://foo.com",
"extras": ["fred", "bar"],
},
(
{
"name": "name",
"markers": 'python_version == "2.7"',
"url": "http://foo.com",
"extras": ["fred", "bar"],
},
),
),
(
(
'cachecontrol[filecache] (>=0.12.9,<0.13.0); python_version >= "3.6"'
' and python_version < "4.0"'
),
{
"version": ">=0.12.9,<0.13.0",
"markers": 'python_version >= "3.6" and python_version < "4.0"',
"extras": ["filecache"],
"name": "cachecontrol",
},
(
{
"version": ">=0.12.9,<0.13.0",
"markers": 'python_version >= "3.6" and python_version < "4.0"',
"extras": ["filecache"],
"name": "cachecontrol",
},
),
),
],
)
def test_parse_dependency_specification(
requirement: str,
specification: DependencySpec,
expected_variants: Collection[DependencySpec],
mocker: MockerFixture,
artifact_cache: ArtifactCache,
) -> None:
Expand All @@ -119,8 +170,11 @@ def _mock(self: Path) -> bool:

mocker.patch("pathlib.Path.exists", _mock)

assert not DeepDiff(
RequirementsParser(artifact_cache=artifact_cache).parse(requirement),
specification,
ignore_order=True,
assert any(
not DeepDiff(
RequirementsParser(artifact_cache=artifact_cache).parse(requirement),
specification,
ignore_order=True,
)
for specification in expected_variants
)

0 comments on commit a27d35e

Please sign in to comment.