Files
site/WESP_REL/tests/test_update_verify.py
T
2026-07-17 12:57:18 +03:00

79 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Tests for update_verify."""
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch
from app.services.update_verify import (
requirements_changed,
run_smoke_test,
wheelhouse_covers_requirements,
)
class UpdateVerifyTests(unittest.TestCase):
def setUp(self) -> None:
self._tmp = tempfile.mkdtemp(prefix="wesp-verify-")
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\n", encoding="utf-8")
def tearDown(self) -> None:
import shutil
shutil.rmtree(self._tmp, ignore_errors=True)
def test_requirements_changed(self) -> None:
old = self.root / "old.txt"
new = self.root / "new.txt"
old.write_text("a\n", encoding="utf-8")
new.write_text("a\n", encoding="utf-8")
self.assertFalse(requirements_changed(old, new))
new.write_text("b\n", encoding="utf-8")
self.assertTrue(requirements_changed(old, new))
def test_wheelhouse_covers_ok(self) -> None:
(self.wheels / "flask-2.3.3-py3-none-any.whl").write_bytes(b"x")
ok, missing = wheelhouse_covers_requirements(self.req, self.wheels)
self.assertTrue(ok)
self.assertEqual(missing, [])
def test_wheelhouse_missing(self) -> None:
ok, missing = wheelhouse_covers_requirements(self.req, self.wheels)
self.assertFalse(ok)
self.assertTrue(missing)
def test_wheelhouse_uses_prod_not_dev_requirements(self) -> None:
"""requirements.txt с -r и pytest не ломает OTA-проверку wheelhouse."""
(self.root / "requirements.txt").write_text(
"-r requirements-prod.txt\npytest>=8.0.0,<9\n",
encoding="utf-8",
)
(self.root / "requirements-prod.txt").write_text("Flask==2.3.3\n", encoding="utf-8")
(self.wheels / "flask-2.3.3-py3-none-any.whl").write_bytes(b"x")
ok, missing = wheelhouse_covers_requirements(self.root / "requirements.txt", self.wheels)
self.assertTrue(ok, missing)
self.assertEqual(missing, [])
@patch("app.services.update_verify.subprocess.run")
def test_smoke_test_ok(self, mock_run) -> None:
mock_run.return_value = unittest.mock.Mock(returncode=0, stdout="", stderr="")
ok, msg = run_smoke_test(self.root)
self.assertTrue(ok)
@patch("app.services.update_verify.subprocess.run")
def test_smoke_test_fail(self, mock_run) -> None:
mock_run.return_value = unittest.mock.Mock(returncode=1, stdout="", stderr="boom")
ok, msg = run_smoke_test(self.root)
self.assertFalse(ok)
self.assertIn("boom", msg)
if __name__ == "__main__":
unittest.main()