use super::*;
#[test]
fn tools_modal_open_toggle_clamp_and_close() {
let mut state = MissionControlState::default();
state.open_tools_modal(
vec![
ToolToggleRow {
name: "bash".to_string(),
kind: "built-in".to_string(),
enabled: true,
},
ToolToggleRow {
name: "mcp__mock__echo".to_string(),
kind: "mcp:mock".to_string(),
enabled: false,
},
],
1,
);
assert!(state.tools_modal_visible());
assert!(state.tools_modal_down(1));
assert_eq!(
state.toggle_selected_tool(),
Some(("mcp__mock__echo".to_string(), true))
);
state.set_tool_row_enabled("mcp__mock__echo", false);
assert!(!state.modals.tools_modal.as_ref().unwrap().rows[1].enabled);
assert!(state.close_tools_modal());
state.open_tools_modal(Vec::new(), 1);
assert_eq!(state.toggle_selected_tool(), None);
assert_eq!(state.modals.tools_modal.as_ref().unwrap().selected, 0);
}
#[test]
fn system_prompt_modal_open_scroll_and_close_preserves_unrelated_state() {
let mut state = MissionControlState {
input: "draft".to_string(),
prompt_cursor: 5,
transcript: vec!["transcript".to_string()].into(),
provider: "provider".to_string(),
model: "model".to_string(),
provider_ready: true,
footer_session: "sess".to_string(),
footer_session_id: Some("sess".to_string()),
footer_cwd: "/tmp".to_string(),
..Default::default()
};
state.set_scroll_offset(&state.scroll_views.prompt, 2);
state.set_scroll_offset(&state.scroll_views.transcript, 3);
state.set_scroll_offset(&state.scroll_views.activity_tree, 4);
state.set_scroll_offset(&state.scroll_views.detail, 5);
state.open_system_prompt_modal("one two three four five six".to_string());
assert_eq!(state.scroll_offset(&state.scroll_views.system_prompt), 0);
state.scroll_system_prompt_down_by(10, 1, 5);
assert!(state.scroll_offset(&state.scroll_views.system_prompt) > 0);
state.scroll_system_prompt_up_by(u16::MAX, 1, 5);
assert_eq!(state.scroll_offset(&state.scroll_views.system_prompt), 0);
assert!(state.close_system_prompt_modal());
assert_eq!(state.input, "draft");
assert_eq!(state.prompt_cursor, 5);
assert_eq!(state.prompt_offset(), 2);
assert_eq!(state.transcript, vec!["transcript"]);
assert_eq!(state.transcript_scroll_offset(), 3);
assert_eq!(state.activity_scroll_offset(), 4);
assert_eq!(state.detail_offset(), 5);
assert_eq!(state.provider, "provider");
assert_eq!(state.model, "model");
assert!(state.provider_ready);
assert_eq!(state.footer_session, "sess");
assert_eq!(state.footer_cwd, "/tmp");
}