use super::support::*;
use super::*;
#[test]
fn submit_unknown_skill_slash_command_reports_error_and_creates_no_worker() {
let temp = tempfile::TempDir::new().unwrap();
let (sender, receiver) = bounded::<TuiEvent>(4);
let mut app = test_app(&temp, sender);
let mut ui_state = state::MissionControlState::default();
app.submit(
"/skill:review".to_string(),
&mut ui_state,
&receiver,
test_area(),
);
assert_eq!(ui_state.status, "unknown command: /skill:review");
assert!(receiver.try_recv().is_err());
assert!(app.worker.is_none());
assert!(!app.active_run);
}
#[test]
fn submit_skills_opens_modal_and_toggle_persists_for_fresh_load() {
let temp = tempfile::TempDir::new().unwrap();
let (sender, receiver) = bounded::<TuiEvent>(8);
let mut app = test_app(&temp, sender);
let skill_path = temp.path().join("skills/review/SKILL.md");
std::fs::create_dir_all(skill_path.parent().unwrap()).unwrap();
std::fs::write(&skill_path, "# Review\n").unwrap();
let skill = crate::skills::load_skill_descriptor(&skill_path).unwrap();
app.discovered_skills
.skills
.insert("review".to_string(), skill.clone());
app.skills.skills.insert("review".to_string(), skill);
let mut ui_state = state::MissionControlState::default();
app.submit("/skills".to_string(), &mut ui_state, &receiver, test_area());
assert!(ui_state.skills_modal_visible());
assert!(ui_state.modals.skills_modal.as_ref().unwrap().rows[0].enabled);
app.set_skill_enabled("review", false, &mut ui_state);
reap_owned_worker(
&mut app,
&mut ui_state,
MissionControlApp::reap_settings_persistence_worker,
);
assert!(!app.skills.skills.contains_key("review"));
assert_eq!(
crate::config::disabled_skill_names(&app.config.paths).unwrap(),
std::collections::BTreeSet::from(["review".to_string()])
);
let mut fresh_state = state::MissionControlState::default();
app.open_skills_modal(&mut fresh_state, test_area());
assert!(!fresh_state.modals.skills_modal.as_ref().unwrap().rows[0].enabled);
}
#[test]
fn submit_subagents_opens_modal_and_toggle_is_session_scoped() {
let temp = tempfile::TempDir::new().unwrap();
let (sender, receiver) = bounded::<TuiEvent>(8);
let mut app = test_app(&temp, sender);
app.subagent_profile_discovery.profiles.insert(
"review".to_string(),
crate::subagents::profiles::SubagentProfile {
id: "review".to_string(),
name: "review".to_string(),
description: "Code review".to_string(),
model: None,
reasoning: None,
output_schema: None,
disabled_tools: std::collections::HashSet::new(),
path: temp.path().join("review.md"),
prompt: "Review code".to_string(),
},
);
let mut ui_state = state::MissionControlState::default();
app.submit(
"/subagents".to_string(),
&mut ui_state,
&receiver,
test_area(),
);
assert!(ui_state.subagents_modal_visible());
assert!(ui_state.modals.subagents_modal.as_ref().unwrap().rows[0].enabled);
app.set_subagent_profile_enabled("review", false, &mut ui_state);
reap_owned_worker(
&mut app,
&mut ui_state,
MissionControlApp::reap_settings_persistence_worker,
);
assert!(
app.disabled_subagent_profiles
.lock()
.unwrap()
.contains("review")
);
let mut fresh_state = state::MissionControlState::default();
app.open_subagents_modal(&mut fresh_state, test_area());
assert!(!fresh_state.modals.subagents_modal.as_ref().unwrap().rows[0].enabled);
}