use super::*;
use crate::tui::state::{MissionControlState, PrimaryAgentEntry};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
fn key(code: KeyCode, modifiers: KeyModifiers) -> KeyEvent {
KeyEvent::new(code, modifiers)
}
fn entry(id: &str, name: &str) -> PrimaryAgentEntry {
PrimaryAgentEntry {
id: id.to_string(),
name: name.to_string(),
description: String::new(),
prompt: format!("{name} body"),
}
}
#[test]
fn tui_shift_tab_cycles_primary_agent() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha"), entry("zeta", "Zeta")]);
assert_eq!(state.selected_primary_agent_name(), "None");
assert_eq!(
handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
InputAction::PrimaryAgentSelectionChanged(Some("alpha".to_string()))
);
assert_eq!(state.selected_primary_agent_name(), "Alpha");
assert_eq!(
handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
InputAction::PrimaryAgentSelectionChanged(Some("zeta".to_string()))
);
assert_eq!(state.selected_primary_agent_name(), "Zeta");
assert_eq!(
handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
InputAction::PrimaryAgentSelectionChanged(None)
);
assert_eq!(state.selected_primary_agent_name(), "None");
}
#[test]
fn tui_shift_tab_does_not_update_status_recent_action() {
let mut state = MissionControlState {
status: "run complete".to_string(),
..Default::default()
};
state.set_primary_agents(vec![entry("alpha", "Alpha")]);
assert_eq!(
handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state),
InputAction::PrimaryAgentSelectionChanged(Some("alpha".to_string()))
);
assert_eq!(state.selected_primary_agent_name(), "Alpha");
assert_eq!(state.status, "run complete");
}
#[test]
fn tui_tab_does_not_toggle_focus() {
let mut state = MissionControlState {
focus_pane: crate::tui::state::TuiFocusPane::Prompt,
..Default::default()
};
handle_key(key(KeyCode::Tab, KeyModifiers::NONE), &mut state);
assert!(state.is_prompt_focused());
}
#[test]
fn tui_shift_tab_does_not_cycle_primary_agent_while_modal_owns_input() {
let mut state = MissionControlState::default();
state.set_primary_agents(vec![entry("alpha", "Alpha")]);
state.open_system_prompt_modal("modal".to_string());
handle_key(key(KeyCode::BackTab, KeyModifiers::SHIFT), &mut state);
assert_eq!(state.selected_primary_agent_name(), "None");
}
#[test]
fn tui_keybinding_help_mentions_primary_agent_cycle() {
let help = help_text();
assert!(
help.contains("[Shift-Tab] cycles primary agent selection"),
"{help}"
);
}