use super::*;
#[test]
fn undo_list_empty_shows_helpful_message() -> Result<()> {
let dir = setup_undo_repo()?;
let task = make_test_task("RQ-0001", "Test task", TaskStatus::Todo);
write_queue(dir.path(), &[task])?;
let (status, stdout, stderr) = run_in_dir(dir.path(), &["undo", "--list"]);
anyhow::ensure!(
status.success(),
"undo --list should succeed even with no snapshots\nstderr:\n{stderr}"
);
anyhow::ensure!(
stdout.contains("No continuation checkpoints are available"),
"expected continuation checkpoint message, got:\n{stdout}"
);
anyhow::ensure!(
stdout.contains("ralph task mutate --dry-run")
|| stdout.contains("checkpoint")
|| stdout.contains("queue writes"),
"expected helpful continuation guidance, got:\n{stdout}"
);
Ok(())
}
#[test]
fn undo_list_shows_snapshots_after_task_done() -> Result<()> {
let dir = setup_undo_repo()?;
let task = make_test_task("RQ-0001", "Test task", TaskStatus::Todo);
write_queue(dir.path(), &[task])?;
write_done(dir.path(), &[])?;
let (status, _stdout, stderr) = run_in_dir(dir.path(), &["task", "done", "RQ-0001"]);
anyhow::ensure!(status.success(), "task done failed\nstderr:\n{stderr}");
let (status, stdout, stderr) = run_in_dir(dir.path(), &["undo", "--list"]);
anyhow::ensure!(status.success(), "undo --list failed\nstderr:\n{stderr}");
anyhow::ensure!(
stdout.contains("Available continuation checkpoints"),
"expected continuation checkpoint header, got:\n{stdout}"
);
anyhow::ensure!(
stdout.contains("complete_task") || stdout.contains("RQ-0001"),
"expected operation description in output, got:\n{stdout}"
);
Ok(())
}