use super::*;
use crate::tui::{
state::{MissionControlState, PrimaryAgentEntry},
theme::MissionControlTheme,
};
use ratatui::{backend::TestBackend, layout::Rect, style::Modifier};
use super::test_support::find_text;
fn rendered(state: &MissionControlState) -> String {
let backend = TestBackend::new(100, 20);
let mut terminal = ratatui::Terminal::new(backend).unwrap();
terminal.draw(|frame| draw(frame, state)).unwrap();
terminal
.backend()
.buffer()
.content()
.iter()
.map(|cell| cell.symbol())
.collect::<String>()
}
#[test]
fn render_prompt_places_agent_alone_on_top_right_border() {
let state = MissionControlState {
focus_pane: crate::tui::state::TuiFocusPane::Prompt,
..Default::default()
};
let backend = TestBackend::new(100, 20);
let mut terminal = ratatui::Terminal::new(backend).unwrap();
terminal.draw(|frame| draw(frame, &state)).unwrap();
let buffer = terminal.backend().buffer();
let layout = layout_for(Rect::new(0, 0, 100, 20), &state);
let agent = find_text(buffer, "[Shift-Tab] Agent: None").expect("agent title");
let prompt = find_text(buffer, "Session: 0(in)").expect("session usage footer");
assert_eq!(agent.1, layout.prompt.y);
assert!(agent.0 > layout.prompt.x + layout.prompt.width / 2);
assert_eq!(prompt.1, layout.prompt.y + layout.prompt.height - 1);
assert!(find_text(buffer, "Prompt [Alt-P]").is_none());
}
#[test]
fn render_prompt_shows_selected_primary_agent_name() {
let mut state = MissionControlState {
focus_pane: crate::tui::state::TuiFocusPane::Prompt,
..Default::default()
};
state.set_primary_agents(vec![PrimaryAgentEntry {
id: "tars".to_string(),
name: "TARS".to_string(),
description: String::new(),
prompt: String::new(),
}]);
state.cycle_primary_agent();
assert!(rendered(&state).contains("[Shift-Tab] Agent: TARS"));
}
#[test]
fn render_prompt_agent_label_uses_muted_non_bold_style() {
let state = MissionControlState {
focus_pane: crate::tui::state::TuiFocusPane::Prompt,
..Default::default()
};
let backend = TestBackend::new(100, 20);
let mut terminal = ratatui::Terminal::new(backend).unwrap();
terminal.draw(|frame| draw(frame, &state)).unwrap();
let buffer = terminal.backend().buffer();
let prompt = find_text(buffer, "Session: 0(in)").unwrap();
let agent = find_text(buffer, "[Shift-Tab]").unwrap();
assert_eq!(
Some(buffer[prompt].fg),
MissionControlTheme::default()
.muted(state.is_prompt_focused())
.fg
);
assert!(!buffer[prompt].modifier.contains(Modifier::BOLD));
assert_eq!(buffer[agent].fg, MissionControlTheme::default().text_dim());
assert_eq!(
buffer[agent].bg,
MissionControlTheme::default().surface_background()
);
assert!(!buffer[agent].modifier.contains(Modifier::BOLD));
}