zapretgui/tests/test_python_dependency_sources.py
loop-uh e46abeedc8
All checks were successful
Zapret source guards / validate (push) Successful in 3s
Перевести ZapretGUI с GitHub на Forgejo
2026-08-07 02:36:48 +03:00

62 lines
2.3 KiB
Python

from __future__ import annotations
import re
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
ROLE_FILES = (
"requirements-runtime.txt",
"requirements-build.txt",
"requirements-publish.txt",
"requirements-dev.txt",
)
def _package_lines(path: Path) -> list[str]:
return [
line.strip()
for line in path.read_text(encoding="utf-8").splitlines()
if line.strip() and not line.lstrip().startswith(("#", "-r "))
]
class PythonDependencySourcesTests(unittest.TestCase):
def test_full_environment_includes_each_dependency_role_once(self) -> None:
full_requirements = (ROOT / "requirements.txt").read_text(encoding="utf-8")
for filename in ("requirements-build.txt", "requirements-publish.txt", "requirements-dev.txt"):
self.assertEqual(full_requirements.count(f"-r {filename}"), 1)
def test_direct_dependency_versions_are_exact_and_not_duplicated(self) -> None:
seen: dict[str, str] = {}
for filename in ROLE_FILES:
for requirement in _package_lines(ROOT / filename):
self.assertRegex(
requirement,
r"^[A-Za-z0-9_.-]+==[A-Za-z0-9_.!+-]+$",
msg=f"{filename}: версия должна быть закреплена точно: {requirement}",
)
package = re.split(r"==", requirement, maxsplit=1)[0].replace("_", "-").casefold()
self.assertNotIn(
package,
seen,
msg=f"{package} одновременно задан в {seen.get(package)} и {filename}",
)
seen[package] = filename
def test_forgejo_guards_do_not_duplicate_local_windows_build_environment(self) -> None:
workflow = (ROOT / ".forgejo" / "workflows" / "source-guards.yml").read_text(
encoding="utf-8"
)
self.assertFalse((ROOT / ".forgejo" / "workflows" / "windows-release.yml").exists())
self.assertFalse((ROOT / ".github" / "workflows" / "windows-release.yml").exists())
for package in ("PyQt6", "Nuitka", "PyInstaller", "TgCrypto"):
self.assertNotRegex(workflow, rf"pip install[^\n]*\b{package}\b")
if __name__ == "__main__":
unittest.main()