tests/test_readme_contracts.py
Rama master · réplica de lectura del repositorio original.
"""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'])