zapret-kvn/tests/test_pending_state.py
loop-uh 6ce5d7367a
Some checks failed
Windows project source guards / test (push) Failing after 37s
Системный прокси: переключатель показывает выбор, а не старое состояние
Запись в реестр теперь идёт асинхронной очередью, а переключатель
показывал смесь флага настроек и снимка реестра: после клика «выкл»
флаг уже выключен, реестр ещё нет — переключатель откатывался в «Вкл»,
и второй клик включал обратно. Снимок реестра к тому же обновлялся
только при смене настроек/подключения.

- Контроллер: сигнал system_proxy_state_changed — свежий снимок реестра
  после каждой операции очереди прокси (из шагов переходов и фоновых).
- ui/pending_state.PendingValue: намерение пользователя поверх факта;
  пока изменение применяется — «Выкл…»/«Вкл…» без отката, догнал —
  обычная подпись, таймаут 15 с — показывается правда.
- Подключено: фактом считается реестр Windows; без подключения — настройка.
2026-09-26 18:56:54 +03:00

46 lines
1.5 KiB
Python

"""Намерение пользователя поверх наблюдаемого состояния (ui/pending_state.py)."""
from __future__ import annotations
import unittest
from xray_fluent.ui.pending_state import PendingValue
class _Clock:
def __init__(self) -> None:
self.now = 100.0
def __call__(self) -> float:
return self.now
class PendingValueTests(unittest.TestCase):
def setUp(self) -> None:
self.clock = _Clock()
self.value: PendingValue[bool] = PendingValue(timeout_s=10, clock=self.clock)
def test_shows_intent_until_observed_catches_up(self) -> None:
self.value.request(False)
self.assertFalse(self.value.display(True)) # факт ещё «вкл» — показываем выбор
self.assertTrue(self.value.pending)
self.assertFalse(self.value.display(False)) # догнал
self.assertFalse(self.value.pending)
self.assertTrue(self.value.display(True)) # дальше — чистый факт
def test_timeout_falls_back_to_truth(self) -> None:
self.value.request(False)
self.clock.now += 11
self.assertTrue(self.value.display(True))
self.assertFalse(self.value.pending)
def test_new_request_replaces_old(self) -> None:
self.value.request(False)
self.value.request(True)
self.assertTrue(self.value.display(False))
self.assertTrue(self.value.display(True))
self.assertFalse(self.value.pending)
if __name__ == "__main__":
unittest.main()