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

124 lines
4.4 KiB
Python

"""Тесты автозапуска Chromium (kiosk boot)."""
from __future__ import annotations
import json
import os
import tempfile
import unittest
from pathlib import Path
from app.services.kiosk_boot_service import (
_DESKTOP_ENTRY_NAME,
_LABWC_MARKER,
_chromium_flag_list,
_kiosk_launch_url,
_kiosk_target_url,
build_chromium_desktop_content,
build_labwc_autostart_content,
get_kiosk_boot_status,
set_kiosk_boot,
)
class KioskBootServiceTests(unittest.TestCase):
def test_chromium_flags_disable_translate(self) -> None:
home = Path("/home/komton")
flags = " ".join(_chromium_flag_list({}, home=home))
self.assertIn("Translate,", flags)
self.assertIn("--host-rules=", flags)
self.assertIn("translate.googleapis.com", flags)
self.assertIn("--user-data-dir=", flags)
self.assertIn("wesp-kiosk-chromium", flags)
self.assertNotIn("--incognito", flags)
def test_launch_url_startup_dark(self) -> None:
cfg = {"WESP_KIOSK_TARGET_URL": "http://localhost/scales"}
url = _kiosk_launch_url(cfg)
self.assertIn("/starting?", url)
self.assertIn("next=/scales", url)
self.assertIn("theme=dark", url)
self.assertEqual(_kiosk_target_url(cfg), "http://localhost/scales")
def test_build_desktop_contains_url_and_kiosk(self) -> None:
home = Path("/home/komton")
cfg = {}
text = build_chromium_desktop_content(
chromium="/usr/bin/chromium",
url="http://localhost/starting?next=/scales",
app_config=cfg,
home=home,
)
self.assertIn("--kiosk", text)
self.assertIn("/starting", text)
def test_build_labwc_minimal(self) -> None:
home = Path("/home/komton")
text = build_labwc_autostart_content(
chromium="/usr/bin/chromium",
url="http://localhost/starting?next=/scales&theme=dark",
app_config={},
home=home,
)
self.assertIn(_LABWC_MARKER, text)
self.assertIn("/usr/bin/kanshi", text)
self.assertNotIn("pcmanfm", text)
self.assertIn("curl", text)
self.assertIn("127.0.0.1/starting", text)
self.assertIn("--app=", text)
def test_system_labwc_patch_roundtrip(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
home = Path(tmp) / "komton"
home.mkdir()
system = Path(tmp) / "labwc-autostart"
system.write_text(
"/usr/bin/lwrespawn /usr/bin/pcmanfm-pi &\n",
encoding="utf-8",
)
system.chmod(0o755)
policy = Path(tmp) / "policy.json"
fake_chromium = Path(tmp) / "chromium"
fake_chromium.write_text("#!/bin/sh\n", encoding="utf-8")
fake_chromium.chmod(0o755)
cfg = {
"WESP_KIOSK_GUI_USER": "komton",
"WESP_KIOSK_TARGET_URL": "http://localhost/scales",
"WESP_KIOSK_CHROMIUM": str(fake_chromium),
"WESP_KIOSK_SYSTEM_LABWC_AUTOSTART": str(system),
"WESP_KIOSK_CHROMIUM_POLICY_PATH": str(policy),
}
import app.services.kiosk_boot_service as mod
orig_home = mod._home_dir
mod._home_dir = lambda _user: home # type: ignore[assignment]
try:
res = set_kiosk_boot(True, cfg, hide_desktop=True)
self.assertTrue(res.get("ok"), res)
body = system.read_text(encoding="utf-8")
self.assertIn(_LABWC_MARKER, body)
self.assertIn("/starting", body)
self.assertIn("user-data-dir", body)
prefs = home / ".config" / "wesp-kiosk-chromium" / "Default" / "Preferences"
self.assertTrue(prefs.is_file())
prefs_data = json.loads(prefs.read_text(encoding="utf-8"))
self.assertFalse(prefs_data["translate"]["enabled"])
self.assertTrue(policy.is_file())
st = get_kiosk_boot_status(cfg)
self.assertEqual(st["kiosk_mode"], "system_labwc")
res2 = set_kiosk_boot(False, cfg)
self.assertTrue(res2.get("ok"))
self.assertIn("pcmanfm", system.read_text(encoding="utf-8"))
finally:
mod._home_dir = orig_home
if __name__ == "__main__":
unittest.main()