79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
"""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()
|