"""Тесты настройки Pi (wesp.env + systemd).""" from __future__ import annotations import tempfile import unittest from pathlib import Path from unittest.mock import patch from app.services.pi_platform_setup_service import ( _merge_env_file, apply_pi_platform_setup, get_pi_platform_setup_status, ) class PiPlatformSetupTests(unittest.TestCase): def test_merge_env_creates_file(self) -> None: with tempfile.TemporaryDirectory() as tmp: home = Path(tmp) / "wesp" home.mkdir() (home / "install").mkdir() (home / "install" / "wesp.env.example").write_text( "WESP_CONFIG=production\n", encoding="utf-8", ) env = Path(tmp) / "wesp.env" venv = Path(tmp) / "wes" defaults = {"WESP_SYSTEMD_UNIT": "myscript", "WESP_VENV": str(venv)} added, _ = _merge_env_file(env, defaults, home=home, venv=venv) self.assertTrue(env.is_file()) self.assertIn("WESP_SYSTEMD_UNIT", env.read_text(encoding="utf-8")) self.assertTrue(added) @patch( "app.services.pi_platform_setup_service.get_pi_platform_setup_status", return_value={"platform_ready": True, "running_as_root": True}, ) @patch("app.services.pi_platform_setup_service._is_root", return_value=True) @patch("app.services.pi_platform_setup_service._install_systemd_unit") @patch("app.services.pi_platform_setup_service.schedule_service_restart") @patch("app.services.pi_platform_setup_service._merge_env_file") def test_apply_ok( self, mock_merge: object, mock_restart: object, mock_unit: object, _root: object, _status: object, ) -> None: mock_merge.return_value = (["WESP_SYSTEMD_UNIT"], []) mock_unit.return_value = (True, "ok", Path("/etc/systemd/system/myscript.service")) mock_restart.return_value = {"scheduled": True, "message": "restart"} cfg = {"BASE_DIR": "/opt/wesp", "WESP_SYSTEMD_UNIT": "myscript"} r = apply_pi_platform_setup(cfg) self.assertTrue(r.get("ok")) def test_apply_requires_root(self) -> None: with patch("app.services.pi_platform_setup_service._is_root", return_value=False): r = apply_pi_platform_setup({"BASE_DIR": "/opt/wesp"}) self.assertFalse(r.get("ok")) if __name__ == "__main__": unittest.main()