Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions adiuvare/tui/screens/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
13 changes: 13 additions & 0 deletions tests/test_tui.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Loading