Ctrl K
ComunidadGuías…

tests/test_readme_contracts.py

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""README 的安装要求、双语入口与下载直链版本。"""
from pathlib import Path
import tempfile
import unittest

from scripts.check_readme_impact import READMES, installation_contracts
from scripts.version_bump import README_FILES, readme_link_problems

ROOT = Path(__file__).resolve().parents[1]


class ReadmeContractsTests(unittest.TestCase):
    def test_repository_readmes_satisfy_installation_contracts(self):
        self.assertEqual(set(README_FILES), READMES)
        self.assertEqual(installation_contracts(ROOT), [])
        self.assertEqual(readme_link_problems(ROOT), [])

    def test_download_links_may_trail_by_one_release_but_no_more(self):
        """`--ship` 等制品齐了才换直链:定版后、换链前指向上一版是正常的,更旧就是漏换了。"""
        link = 'https://github.com/o/p/releases/download/v{0}/Peach-{0}-windows-x64-setup.exe'
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            (root / 'src/peach').mkdir(parents=True)
            (root / 'src/peach/__init__.py').write_text('__version__ = "0.8.0"\n', encoding='utf-8')
            (root / 'CHANGELOG.md').write_text('## [未发布]\n\n## [0.8.0] - 2026-11-08\n\n'
                                               '## [0.7.9] - 2026-11-01\n\n## [0.7.8] - 2026-10-20\n',
                                               encoding='utf-8')
            for version, problems in (('0.8.0', 0), ('0.7.9', 0), ('0.7.8', 2)):
                for name in READMES:
                    (root / name).write_text(f'[Installer]({link.format(version)})\n', encoding='utf-8')
                with self.subTest(version=version):
                    self.assertEqual(len(readme_link_problems(root)), problems)
            (root / 'README.md').write_text(f'[A]({link.format("0.8.0")}) [B]({link.format("0.7.9")})\n',
                                            encoding='utf-8')
            (root / 'README.zh-CN.md').write_text('没有直链\n', encoding='utf-8')
            self.assertEqual([problem.split(':')[0] for problem in readme_link_problems(root)],
                             ['README.md', 'README.zh-CN.md'])

    def test_installation_check_accepts_equivalent_floor_notation_and_reports_missing_links(self):
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory).resolve()
            (root / 'pyproject.toml').write_text('[project]\nrequires-python = ">=3.14"\n', encoding='utf-8')
            for suffix in ('+', ' or newer', ' 或更高'):
                for name in READMES:
                    counterpart, = READMES - {name}
                    (root / name).write_text(f'Python 3.14{suffix}\n[Language]({counterpart})\n', encoding='utf-8')
                self.assertEqual(installation_contracts(root), [])
            (root / 'README.md').write_text('Python 3.13+\n', encoding='utf-8')
            self.assertEqual(installation_contracts(root), ['README.md: Python 下限须为 3.14',
                                                           'README.md: 缺少语言入口 README.zh-CN.md'])