zapret-kvn/tests/test_singbox_editor_check.py
loop-uh 308f6da16a
Some checks failed
Windows project source guards / test (push) Failing after 38s
Маршрутизация: структурный редактор sing-box по схеме ядра
Раздел «Маршрутизация» с подпунктами (Обзор, Правила, Наборы правил, DNS,
Исходящие, Система, JSON) редактирует тот же активный native JSON.
Формы строятся из JSON Schema закреплённого ядра (sing-box schema),
своей модели маршрутизации нет; неизвестные ключи и форма Listable
сохраняются. «Проверить» запускает sing-box check в фоне.

DNS больше не перезаписывается принудительно: при обновлении шаблонов
нетронутые верхние секции следуют за стоком, изменённые остаются.
Сброс к стоку — вручную, целиком или по разделу.
2026-09-26 20:30:17 +03:00

46 lines
1.8 KiB
Python

from __future__ import annotations
from pathlib import Path
import tempfile
import unittest
from unittest import mock
from xray_fluent.application.singbox_editor_check import CHECK_FILE_NAME, SingboxEditorCheck
class EditorCheckTests(unittest.TestCase):
def setUp(self) -> None:
self.temp = tempfile.TemporaryDirectory()
self.runtime = Path(self.temp.name)
self.checker = SingboxEditorCheck(runtime_dir=self.runtime)
def tearDown(self) -> None:
self.checker.shutdown()
self.temp.cleanup()
def test_missing_core_is_a_warning_not_success(self) -> None:
level, message = self.checker.check_blocking(self.runtime / "absent.exe", "{}")
self.assertEqual(level, "warning")
self.assertIn("не выполнена", message)
def test_core_verdict_is_reported_and_temp_file_removed(self) -> None:
exe = self.runtime / "sing-box.exe"
exe.write_bytes(b"")
seen: list[str] = []
def fake_check(_exe, path):
seen.append(path.read_text(encoding="utf-8"))
return False, "Ядро не приняло конфигурацию: bad"
with mock.patch("xray_fluent.application.singbox_editor_check.check_config", fake_check):
level, message = self.checker.check_blocking(exe, '{"log": {}}')
self.assertEqual((level, message), ("error", "Ядро не приняло конфигурацию: bad"))
self.assertEqual(seen, ['{"log": {}}'])
self.assertFalse((self.runtime / CHECK_FILE_NAME).exists())
with mock.patch("xray_fluent.application.singbox_editor_check.check_config", lambda *_: (True, "")):
self.assertEqual(self.checker.check_blocking(exe, "{}")[0], "success")
if __name__ == "__main__":
unittest.main()