From 53d9ad653a12f7e12fbe156715eb9c9235fc0a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=95=D0=BC=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D1=8F=D0=BD=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 10 Sep 2026 13:30:42 +0300 Subject: [PATCH] tests: full-screen coverage + input blocking --- tests/test_tui.py | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/tests/test_tui.py b/tests/test_tui.py index 3c3570f..d5fa67b 100644 --- a/tests/test_tui.py +++ b/tests/test_tui.py @@ -319,8 +319,6 @@ async def test_dog_loader_hidden_when_idle(tmp_path) -> None: assert not loader.has_class("visible") assert loader.display is False assert not loader.running - line = app.screen.query_one("#progress-line", Static) - assert str(line.render()) == "" # встроенный loading Textual не должен активироваться (иначе — точки) assert app.screen.loading is False @@ -344,16 +342,43 @@ async def test_dog_loader_shown_during_refresh(tmp_path) -> None: assert loader.has_class("visible") assert loader.display is True assert loader.running - line = app.screen.query_one("#progress-line", Static) - assert "обновляет статистику" in str(line.render()) assert app.screen.loading is False + # overlay покрывает весь экран + assert loader.region == app.screen.region release.set() await pilot.pause(0.1) assert not loader.has_class("visible") assert loader.display is False assert not loader.running - assert str(line.render()) == "" + + +async def test_input_blocked_during_refresh(tmp_path) -> None: + release = asyncio.Event() + settings = Settings(refresh_interval=3600) + creds = Credentials(static_token="tok") + storage = Storage(tmp_path / "cache.db") + service = BlockingService(_dashboard_data(), release) + app = SelectelMLTUI( + settings=settings, + credentials=creds, + storage=storage, + service=service, # type: ignore[arg-type] + ) + async with app.run_test() as pilot: + await service.started.wait() + await pilot.pause() + # во время загрузки горячие клавиши заблокированы + await pilot.press("h") + await pilot.pause() + assert app.screen.__class__.__name__ == "DashboardScreen" + + release.set() + await pilot.pause(0.1) + # после загрузки навигация снова работает + await pilot.press("h") + await pilot.pause() + assert app.screen.__class__.__name__ == "HistoryScreen" async def test_dog_loader_animates(tmp_path) -> None: