refactor: encapsulate review identity changes

This commit is contained in:
Valdemar Lorenzen
2026-10-16 18:03:15 +02:00
parent 8174e81c5c
commit befa432095
3 changed files with 128 additions and 46 deletions
+56
View File
@@ -3217,6 +3217,62 @@ fn local_review_native_composition_roundtrip_and_draft_lifecycle() {
);
}
#[test]
fn review_identity_changes_retire_drafts_before_reusing_comment_ids() {
for sqlite in [false, true] {
let directory = Directory::new();
let root = directory.0.canonicalize().unwrap();
let mut editor = editor();
if sqlite {
editor.set_review_directory(root.join("data"));
}
historical_diff(&mut editor, &root, vec!["old".into()], vec!["new".into()]);
editor.execute("diff.comment");
type_text(&mut editor, "iOriginal feedback");
editor.handle(Input::Escape);
editor.execute("diff.review.summary");
type_text(&mut editor, "iKeep summary");
editor.handle(Input::Escape);
let original = root.join("original.json");
editor.execute(&format!("diff.review.save {}", original.display()));
editor.execute("diff.review.delete 1");
editor.execute("diff.comment");
assert_eq!(editor.context().text, "");
type_text(&mut editor, "iFresh feedback");
editor.handle(Input::Escape);
let fresh = root.join("fresh.json");
editor.execute(&format!("diff.review.save {}", fresh.display()));
let document = crate::review::Review::load(&fresh, &root).unwrap();
assert_eq!(document.comments[0].id, 1);
assert_eq!(document.comments[0].body, "Fresh feedback");
assert_eq!(document.summary, "Keep summary");
editor.execute(&format!("diff.review.open {}", original.display()));
editor.execute("diff.review.edit 1");
assert_eq!(editor.context().text, "Original feedback");
editor.execute("diff.review.summary");
assert_eq!(editor.context().text, "Keep summary");
let restored = root.join("restored.json");
editor.execute(&format!("diff.review.save {}", restored.display()));
assert_eq!(
crate::review::Review::load(&restored, &root).unwrap().comments[0].body,
"Original feedback"
);
editor.execute("diff.review.new");
editor.execute("diff.comment");
assert_eq!(editor.context().text, "");
type_text(&mut editor, "iSeparate review");
editor.handle(Input::Escape);
let separate = root.join("separate.json");
editor.execute(&format!("diff.review.save {}", separate.display()));
let document = crate::review::Review::load(&separate, &root).unwrap();
assert_eq!(document.comments[0].body, "Separate review");
assert_eq!(document.summary, "");
}
}
#[test]
fn precise_review_ranges_capture_graphemes_and_navigate_to_their_start() {
for focus in [Focus::Before, Focus::After] {