@@ -0,0 +1,78 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user