//! Integration test for the event journal: parses the replayable //! fixture shipped with the repository and exercises the append path. use agent_manager::events::{self, Event, EventKind}; use std::path::PathBuf; fn fixture() -> PathBuf { PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/events-sample.jsonl") } #[test] fn fixture_parses_valid_lines_and_skips_corrupt_ones() { let events = events::parse_file(&fixture()); assert_eq!(events.len(), 2, "the corrupt line must be skipped"); assert_eq!(events[0].kind, EventKind::Start); assert_eq!(events[0].agent.as_deref(), Some("claude-code")); assert_eq!(events[0].pid, Some(1234)); assert_eq!(events[0].env_keys, vec!["OPENAI_KEY".to_string()]); assert_eq!(events[1].kind, EventKind::Stop); assert_eq!(events[1].duration_s, Some(1364)); assert_eq!(events[1].exit_code, Some(0)); assert_eq!(events[1].reason.as_deref(), Some("signal")); } #[test] fn append_then_read_back_through_read_events() { let dir = tempfile::tempdir().unwrap(); let mut log = events::EventLog::new(dir.path()); log.append( &Event::now(EventKind::Run) .with_agent("jcode") .with_cwd("/tmp/demo") .with_exit_code(0), ) .unwrap(); let all: Vec = events::read_events(dir.path(), 10); assert_eq!(all.len(), 1); assert_eq!(all[0].agent.as_deref(), Some("jcode")); assert_eq!(all[0].cwd.as_deref(), Some("/tmp/demo")); assert_eq!(all[0].exit_code, Some(0)); }