use super::support::*;
use super::*;
#[test]
fn bang_prompt_submit_starts_bash_worker_without_provider_auth() {
let temp = tempfile::TempDir::new().unwrap();
let manager = SessionManager::new(temp.path().join("sessions"));
let session = manager.create().unwrap();
let (sender, receiver) = bounded::<TuiEvent>(32);
let mut app = test_app_with_active_session(&temp, sender, Some(session.clone()));
app.state.auth_state = crate::config::AuthState::Missing {
provider: crate::providers::OPENAI_CODEX_PROVIDER.to_string(),
};
let mut ui_state = state::MissionControlState::default();
let accepted = app.submit(
"!printf hi".to_string(),
&mut ui_state,
&receiver,
test_area(),
);
assert!(accepted);
assert_eq!(ui_state.status, "bash-mode: running command…");
assert!(app.active_run);
if let Some(worker) = app.worker.take() {
worker.handle.join().unwrap();
}
let result = drain_tui_events(&receiver, &mut ui_state);
assert!(result.run_finished);
assert!(
!ui_state
.transcript
.iter()
.any(|line| line.starts_with("you: ")),
"transcript: {:?}",
ui_state.transcript
);
assert!(
ui_state
.transcript
.iter()
.any(|line| line == "bash: printf hi"),
"transcript: {:?}",
ui_state.transcript
);
assert!(
ui_state
.transcript
.iter()
.any(|line| line.starts_with("tool: ✓ bash")),
"transcript: {:?}",
ui_state.transcript
);
assert!(
ui_state
.transcript
.iter()
.all(|line| !line.contains("provider not configured"))
);
let events = session.read_events().unwrap();
assert!(events.is_empty(), "events: {events:?}");
}