diff --git a/adiuvare/tui/screens/events.py b/adiuvare/tui/screens/events.py index d79a0a8..a1820ab 100644 --- a/adiuvare/tui/screens/events.py +++ b/adiuvare/tui/screens/events.py @@ -277,6 +277,35 @@ def _action_states(self, event: dict | None) -> dict[str, ActionAvailability]: "events-export": ActionAvailability(has, select_first), } + return { + "events-confirm": runtime( + ActionAvailability( + has and verdict != "block", + select_first if not has else "Already blocked", + ), + connected, + ), + "events-whitelist": runtime(ActionAvailability(has, select_first), connected), + "events-monitor": runtime(ActionAvailability(has, select_first), connected), + "events-unmonitor": runtime(ActionAvailability(has, select_first), connected), + "events-unblock-monitor": runtime( + ActionAvailability( + has and verdict == "block", + select_first if not has else "Only for blocked events", + ), + connected, + ), + "events-ban-ip": runtime( + ActionAvailability(has and has_ip, select_first if not has else "No IP on event"), + connected, + ), + "events-unban-ip": runtime( + ActionAvailability(has and has_ip, select_first if not has else "No IP on event"), + connected, + ), + "events-export": ActionAvailability(has, select_first), + } + def _update_action_status(self) -> None: event = self._selected states = self._action_states(event) diff --git a/tests/test_tui.py b/tests/test_tui.py index 9b8be83..4d93a91 100644 --- a/tests/test_tui.py +++ b/tests/test_tui.py @@ -282,6 +282,10 @@ async def test_events_disabled_actions_show_reasons(app): unblock = app.query_one("#events-unblock-monitor", Button) whitelist = app.query_one("#events-whitelist", Button) export_btn = app.query_one("#events-export", Button) + monitor = app.query_one("#events-monitor", Button) + unmonitor = app.query_one("#events-unmonitor", Button) + ban_ip = app.query_one("#events-ban-ip", Button) + unban_ip = app.query_one("#events-unban-ip", Button) status = app.query_one("#events-action-status", Static) assert confirm.disabled is True @@ -290,6 +294,15 @@ async def test_events_disabled_actions_show_reasons(app): assert unblock.disabled is True assert "Requires live runtime connection" in (unblock.tooltip or "") assert whitelist.disabled is True + assert monitor.disabled is True + assert unmonitor.disabled is True + assert ban_ip.disabled is True + assert unban_ip.disabled is True + + assert "Requires live runtime connection" in (monitor.tooltip or "") + assert "Requires live runtime connection" in (unmonitor.tooltip or "") + assert "Requires live runtime connection" in (ban_ip.tooltip or "") + assert "Requires live runtime connection" in (unban_ip.tooltip or "") assert export_btn.disabled is False status_text = str(status.render()) assert "Disconnected" in status_text