feat: persist diff file review checkmarks

This commit is contained in:
2026-10-19 18:48:44 +02:00
parent fe039e75c8
commit ea04e30072
11 changed files with 655 additions and 61 deletions
+71
View File
@@ -3206,6 +3206,73 @@ fn review_metadata_autosaves_do_not_commit_hidden_comment_or_summary_drafts() {
assert!(!editor.local_reviews_dirty());
}
#[test]
fn reviewed_file_marks_autosave_restore_and_stay_with_the_selected_review() {
use crate::review::{Review, Store};
let directory = Directory::new();
let root = directory.0.canonicalize().unwrap();
let storage = root.join("data");
let mut first = editor();
first.set_review_directory(storage.clone());
historical_diff(&mut first, &root, vec!["old".into()], vec!["new".into()]);
first.execute("diff.review.toggle");
let store = Store::open(&storage).unwrap();
let saved = store.list(&root).unwrap().pop().unwrap();
let id = saved.storage_id.unwrap();
assert_eq!(saved.reviewed_files[0].path, Path::new("file.txt"));
let export = root.join("review.json");
first.execute(&format!("diff.review.save {}", export.display()));
assert_eq!(
Review::load(&export, &root).unwrap().reviewed_files,
saved.reviewed_files
);
first.execute("diff.review.summary");
type_text(&mut first, "iUnsaved summary");
first.handle(Input::Escape);
first.execute("diff.review.toggle");
assert!(store.load(&root, id).unwrap().reviewed_files.is_empty());
assert_eq!(store.load(&root, id).unwrap().summary, "");
first.execute("diff.review.toggle");
drop(first);
let mut reopened = editor();
reopened.set_review_directory(storage.clone());
historical_diff(&mut reopened, &root, vec!["old".into()], vec!["new".into()]);
assert_eq!(
reopened.workspace_diff().unwrap().reviewed_files,
BTreeSet::from([0])
);
reopened.execute("diff.review.new");
assert!(reopened.workspace_diff().unwrap().reviewed_files.is_empty());
reopened.execute(&format!("diff.review.open {id}"));
assert_eq!(
reopened.workspace_diff().unwrap().reviewed_files,
BTreeSet::from([0])
);
reopened.handle(Input::Escape);
reopened.execute("diff.review.toggle");
assert!(store.load(&root, id).unwrap().reviewed_files.is_empty());
}
#[test]
fn editing_a_reviewed_working_file_persists_its_invalidation() {
let directory = Directory::new();
let root = directory.0.canonicalize().unwrap();
fs::write(root.join("file.txt"), "original\n").unwrap();
let storage = root.join("data");
let mut editor = editor();
editor.set_review_directory(storage.clone());
working_diff(&mut editor, &root, &["file.txt"]);
editor.handle(Input::Enter);
editor.execute("diff.review.toggle");
let store = crate::review::Store::open(&storage).unwrap();
let id = store.list(&root).unwrap()[0].storage_id.unwrap();
assert_eq!(store.load(&root, id).unwrap().reviewed_files.len(), 1);
type_text(&mut editor, "iEdited ");
editor.handle(Input::Escape);
assert!(editor.workspace_diff().unwrap().reviewed_files.is_empty());
assert!(store.load(&root, id).unwrap().reviewed_files.is_empty());
}
#[test]
fn sqlite_reviews_autosave_restore_select_and_keep_exports_independent() {
use crate::review::{Review, Store, Verdict};
@@ -5276,6 +5343,10 @@ fn diff_review_actions_preserve_readonly_text_history_and_parked_tabs() {
editor.execute("tab.previous");
assert_eq!(editor.tab_id(), first_tab);
assert_eq!(editor.diff().unwrap().reviewed_files, BTreeSet::from([0]));
editor.execute(&format!(
"diff.review.save {}",
directory.path("review.json").display()
));
editor.execute("diff.close");
historical_diff(
&mut editor,