sessions : registre des sessions + commande am sessions (issue #5) - lifecycle agent/repl, reconciliation des sessions interrompues, compteur sessions_count, filtres agent/projet/statut, show avec extrait de log
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
//! sessions command and session registry: lifecycle, counter, reconciliation
|
||||
//! and CLI parsing.
|
||||
|
||||
mod common;
|
||||
|
||||
use agent_manager::cli::{Cli, Command};
|
||||
use agent_manager::commands::sessions_cmd;
|
||||
use agent_manager::sessions;
|
||||
use clap::Parser;
|
||||
|
||||
#[test]
|
||||
fn cli_parses_sessions() {
|
||||
let cli = Cli::parse_from(["am", "sessions", "--status", "failed", "--show", "abc"]);
|
||||
match &cli.command {
|
||||
Some(Command::Sessions {
|
||||
agent,
|
||||
status,
|
||||
show,
|
||||
..
|
||||
}) => {
|
||||
assert!(agent.is_none());
|
||||
assert_eq!(status.as_deref(), Some("failed"));
|
||||
assert_eq!(show.as_deref(), Some("abc"));
|
||||
}
|
||||
other => panic!("unexpected command: {other:?}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn agent_session_roundtrip_and_counter() {
|
||||
let app = common::test_app("sess", &["sessions"]);
|
||||
let id = sessions::start_agent(
|
||||
&app,
|
||||
"claude-code",
|
||||
4242,
|
||||
Some("/tmp".to_string()),
|
||||
vec![],
|
||||
vec![],
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
let sf = sessions::load(&app).unwrap();
|
||||
let r = sf.sessions.get(&id).unwrap();
|
||||
assert_eq!(r.status, "running");
|
||||
assert_eq!(r.agent.as_deref(), Some("claude-code"));
|
||||
assert_eq!(app.state.load().unwrap().sessions_count, 1);
|
||||
|
||||
sessions::finish_agent(&app, "claude-code", Some(4242), 0, true).unwrap();
|
||||
let sf = sessions::load(&app).unwrap();
|
||||
let r = sf.sessions.get(&id).unwrap();
|
||||
assert_eq!(r.status, "stopped");
|
||||
assert_eq!(r.exit_code, Some(0));
|
||||
assert!(r.ended_at.is_some());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn command_lists_sessions() {
|
||||
let app = common::test_app("sesscmd", &["sessions"]);
|
||||
sessions::start_agent(&app, "aider", 4242, None, vec![], vec![], None).unwrap();
|
||||
let code = sessions_cmd::run(&app, None, None, None, None).unwrap();
|
||||
assert_eq!(code, 0);
|
||||
// --json path returns the row set without error.
|
||||
sessions::finish_agent(&app, "aider", Some(4242), 0, true).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn show_one_accepts_known_id() {
|
||||
let app = common::test_app("sessshow", &["sessions"]);
|
||||
let id = sessions::start_agent(&app, "jcode", 99, None, vec![], vec![], None).unwrap();
|
||||
let code = sessions_cmd::run(&app, None, None, None, Some(&id)).unwrap();
|
||||
assert_eq!(code, 0);
|
||||
}
|
||||
Reference in New Issue
Block a user