File: test_repo_review.py

package info (click to toggle)
python-validate-pyproject 0.24.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,340 kB
  • sloc: python: 3,053; makefile: 46; sh: 25
file content (67 lines) | stat: -rw-r--r-- 2,440 bytes parent folder | download
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"]