"""Тесты verify_release_deps.py.""" from __future__ import annotations import subprocess import sys import tempfile import unittest from pathlib import Path ROOT = Path(__file__).resolve().parent.parent SCRIPTS = ROOT / "scripts" class VerifyReleaseDepsTests(unittest.TestCase): def setUp(self) -> None: self._tmp = tempfile.mkdtemp(prefix="wesp-verify-deps-") self.root = Path(self._tmp) self.req = self.root / "requirements.txt" self.wheels = self.root / "vendor" / "wheels" self.wheels.mkdir(parents=True) self.req.write_text("Flask==2.3.3\nwaitress==2.1.2\n", encoding="utf-8") def tearDown(self) -> None: import shutil shutil.rmtree(self._tmp, ignore_errors=True) def _run(self, *extra: str) -> subprocess.CompletedProcess: cmd = [ sys.executable, str(SCRIPTS / "verify_release_deps.py"), "--req", str(self.req), "--wheels", str(self.wheels), *extra, ] return subprocess.run(cmd, capture_output=True, text=True, cwd=str(ROOT)) def test_pass_with_matching_wheels(self) -> None: (self.wheels / "flask-2.3.3-py3-none-any.whl").write_bytes(b"1") (self.wheels / "waitress-2.1.2-py3-none-any.whl").write_bytes(b"1") r = self._run() self.assertEqual(r.returncode, 0, r.stderr) def test_fail_missing_wheel(self) -> None: (self.wheels / "flask-2.3.3-py3-none-any.whl").write_bytes(b"1") r = self._run() self.assertEqual(r.returncode, 1) self.assertIn("waitress", r.stderr.lower()) def test_fail_empty_wheelhouse(self) -> None: r = self._run() self.assertEqual(r.returncode, 1) self.assertIn("wheelhouse", r.stderr.lower()) def test_write_manifest(self) -> None: (self.wheels / "flask-2.3.3-py3-none-any.whl").write_bytes(b"1") (self.wheels / "waitress-2.1.2-py3-none-any.whl").write_bytes(b"1") r = self._run("--write-manifest") self.assertEqual(r.returncode, 0) manifest = self.wheels / "manifest.json" self.assertTrue(manifest.is_file()) if __name__ == "__main__": unittest.main()