1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
from argparse import Namespace
from pathlib import Path
import pytest
from validate_pyproject import _tomllib as tomllib
from validate_pyproject.repo_review import repo_review_checks, repo_review_families
DIR = Path(__file__).parent.resolve()
EXAMPLES = DIR / "examples"
INVALID_EXAMPLES = DIR / "invalid-examples"
@pytest.fixture
def repo_review_processor():
try:
from repo_review import processor
return processor
except ImportError:
class _Double: # just for the sake of Python < 3.10 coverage
@staticmethod
def process(file: Path):
pyproject = (file / "pyproject.toml").read_text(encoding="utf-8")
opts = tomllib.loads(pyproject)
checks = (
checker.check(opts) == "" # No errors
for checker in repo_review_checks().values()
)
return Namespace(
families=repo_review_families(opts),
results=[Namespace(result=check) for check in checks],
)
return _Double
@pytest.mark.parametrize("name", ["atoml", "flit", "pdm", "pep_text", "trampolim"])
def test_valid_example(repo_review_processor, name: str) -> None:
processed = repo_review_processor.process(EXAMPLES / name)
assert all(r.result for r in processed.results), f"{processed.results}"
@pytest.mark.parametrize("name", ["pdm/invalid-version", "pdm/redefining-as-dynamic"])
def test_invalid_example(repo_review_processor, name: str) -> None:
processed = repo_review_processor.process(INVALID_EXAMPLES / name)
assert any(not r.result and r.result is not None for r in processed.results), (
f"{processed.results}"
)
def test_no_distutils(repo_review_processor) -> None:
processed = repo_review_processor.process(EXAMPLES / "pep_text")
family = processed.families["validate-pyproject"]
assert "[tool.setuptools]" in family["description"]
assert "[tool.distutils]" not in family["description"]
def test_has_distutils(repo_review_processor, tmp_path: Path) -> None:
d = tmp_path / "no-distutils"
d.mkdir()
d.joinpath("pyproject.toml").write_text("[tool.distutils]")
processed = repo_review_processor.process(d)
family = processed.families["validate-pyproject"]
assert "[tool.setuptools]" in family["description"]
assert "[tool.distutils]" in family["description"]
|