mirror of
https://github.com/danieldemus/pyp2spec.git
synced 2026-07-27 21:00:37 +02:00
When specified on command line, a compat package for a given version will be created. pyp2spec will create a specfile for the latest version matching the compat one, e.g. for `pytest --compat 7` it will create specfile for version 7.4.4; for `pytest --compat 7.2` - 7.2.2. It is possible to specify both compat and specific version, e.g.: `pytest --compat 7 --version 7.3.0`
63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
"""Test the functionality of functions getting the data from PyPI.
|
|
The data is downloaded and stored in betamax cassettes
|
|
to prevent loading from the internet on each request.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from pyp2spec.pypi_loaders import load_from_pypi, load_core_metadata_from_pypi
|
|
from pyp2spec.pypi_loaders import PackageNotFoundError, CompatibleVersionNotFoundError
|
|
from pyp2spec.pypi_loaders import _find_available_versions, _find_compatible_version
|
|
|
|
|
|
def test_load_from_pypi_no_version_given(betamax_session):
|
|
result = load_from_pypi("Sphinx", session=betamax_session)
|
|
assert result["info"]["version"] == "8.1.3"
|
|
|
|
|
|
def test_load_from_pypi_particular_version(betamax_session):
|
|
result = load_from_pypi("Sphinx", version="7.3.7", session=betamax_session)
|
|
assert result["info"]["version"] == "7.3.7"
|
|
|
|
|
|
def test_load_from_pypi_package_not_found(betamax_session):
|
|
package = "non-existent-package"
|
|
with pytest.raises(PackageNotFoundError):
|
|
load_from_pypi(package, session=betamax_session)
|
|
|
|
|
|
def test_load_core_metadata(betamax_session):
|
|
pypi_pkg_data = load_from_pypi("Sphinx", session=betamax_session)
|
|
result = load_core_metadata_from_pypi(pypi_pkg_data, betamax_session)
|
|
assert result["name"] == "Sphinx"
|
|
assert result["version"] == "8.1.3"
|
|
assert result["provides_extra"] == ["docs", "lint", "test"]
|
|
|
|
|
|
|
|
{"2.0.0":["..."],"2.0.1":["..."],"3.0.0":["..."],"6.0.1":["..."],"2.1.0":["..."],"2.1.1":["..."]}
|
|
def test_find_available_versions():
|
|
releases = {
|
|
"2.0.0":["..."],"2.0.1":["..."],"3.0.0":["..."],
|
|
"6.0.1":["..."],"2.1.0":["..."],"2.1.1":["..."]
|
|
}
|
|
expected = ["2.0.0", "2.0.1", "3.0.0", "6.0.1", "2.1.0", "2.1.1"]
|
|
assert _find_available_versions(releases) == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("compat", "available_versions", "expected"), [
|
|
("7", ["6.0.0", "7.0.0", "7.9.1"], "7.9.1"),
|
|
("7.4", ["7.4.2", "6.0.0", "7.4.3", "7.0.0", "7.0.1"], "7.4.3"),
|
|
("7.2", ["7.4.2", "7.2.3", "7.4.3", "6.0.0", "7.0.1"], "7.2.3"),
|
|
("7.4.2", ["7.4.2", "7.2.3", "7.4.3", "6.0.0", "7.0.1"], "7.4.2"),
|
|
]
|
|
)
|
|
def test_find_compatible_version(compat, available_versions, expected):
|
|
assert _find_compatible_version(compat, available_versions) == expected
|
|
|
|
|
|
def test_no_compatible_version_available():
|
|
with pytest.raises(CompatibleVersionNotFoundError):
|
|
_find_compatible_version("9", ["6.0.0", "7.0.0", "7.9.1"])
|