Files
Elydora-Open-Source/sdks/python/tests/test_package_metadata.py
T

81 lines
2.7 KiB
Python

from pathlib import Path
from packaging.requirements import Requirement
from packaging.version import Version
import tomlkit
PROJECT_ROOT = Path(__file__).resolve().parents[1]
def _pyproject() -> dict[str, object]:
return tomlkit.parse((PROJECT_ROOT / "pyproject.toml").read_text(encoding="utf-8"))
def _project_metadata() -> dict[str, object]:
return _pyproject()["project"]
def _requirements(entries: object) -> dict[str, Requirement]:
assert isinstance(entries, list)
requirements = (Requirement(str(entry)) for entry in entries)
return {requirement.name: requirement for requirement in requirements}
def _assert_safe_floor(
requirement: Requirement,
vulnerable: str,
fixed: str,
) -> None:
assert Version(vulnerable) not in requirement.specifier
assert Version(fixed) in requirement.specifier
def test_python_support_matches_maintained_runtime_line() -> None:
project = _project_metadata()
assert project["requires-python"] == ">=3.10"
assert "Programming Language :: Python :: 3.9" not in project["classifiers"]
assert "Programming Language :: Python :: 3.14" in project["classifiers"]
def test_license_uses_current_packaging_metadata() -> None:
document = _pyproject()
project = document["project"]
assert isinstance(project, dict)
build_system = document["build-system"]
assert isinstance(build_system, dict)
build_requirements = _requirements(build_system["requires"])
assert project["license"] == "MIT"
assert all(
not str(classifier).startswith("License ::")
for classifier in project["classifiers"]
)
assert Version("77.0.3") in build_requirements["setuptools"].specifier
def test_dependency_floors_exclude_known_vulnerable_releases() -> None:
project = _project_metadata()
runtime = _requirements(project["dependencies"])
optional = project["optional-dependencies"]
assert isinstance(optional, dict)
development = _requirements(optional["dev"])
_assert_safe_floor(runtime["requests"], "2.32.5", "2.33.0")
_assert_safe_floor(runtime["aiohttp"], "3.13.5", "3.14.1")
_assert_safe_floor(runtime["urllib3"], "2.6.3", "2.7.0")
_assert_safe_floor(runtime["cryptography"], "41.0.0", "48.0.1")
_assert_safe_floor(development["pytest"], "8.4.2", "9.0.3")
def test_async_test_runner_supports_pytest_nine() -> None:
project = _project_metadata()
optional = project["optional-dependencies"]
assert isinstance(optional, dict)
development = _requirements(optional["dev"])
requirement = development["pytest-asyncio"]
assert Version("1.3.0") not in requirement.specifier
assert Version("1.4.0") in requirement.specifier