From c83604d8f82b6c67a64e3cee6f5c012ee4a10fc1 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 31 Oct 2026 19:03:15 +0100 Subject: tests write through document::testing helpers --- src/document/store.rs | 70 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 16 deletions(-) (limited to 'src/document/store.rs') diff --git a/src/document/store.rs b/src/document/store.rs index dff0cfb..c6c428c 100644 --- a/src/document/store.rs +++ b/src/document/store.rs @@ -1071,6 +1071,7 @@ fn nested( #[cfg(test)] mod tests { use super::*; + use crate::document::testing::try_change; use serde_json::json; fn path(at: &str) -> Vec { @@ -1080,7 +1081,10 @@ mod tests { #[test] fn paths_go_through_lists() { let mut doc = AutoCommit::new(); - write_path(&mut doc, &path("list"), &json!(["b", {"k": 1}, "d"])).unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list"), &json!(["b", {"k": 1}, "d"])) + }) + .unwrap(); assert_eq!(read_path(&doc, &path("list/0")).unwrap(), Some(json!("b"))); assert_eq!(read_path(&doc, &path("list/1/k")).unwrap(), Some(json!(1))); // Not an index, or past the end: nothing. @@ -1088,18 +1092,27 @@ mod tests { assert_eq!(read_path(&doc, &path(missing)).unwrap(), None, "{missing}"); } // Replaced, and appended at the end; past it, nothing. - write_path(&mut doc, &path("list/0"), &json!("a")).unwrap(); - write_path(&mut doc, &path("list/3"), &json!("e")).unwrap(); - write_path(&mut doc, &path("list/1/k"), &json!(2)).unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list/0"), &json!("a")) + }) + .unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list/3"), &json!("e")) + }) + .unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list/1/k"), &json!(2)) + }) + .unwrap(); assert!(matches!( - write_path(&mut doc, &path("list/9"), &json!(0)), + try_change(&mut doc, |doc| write_path(doc, &path("list/9"), &json!(0))), Err(StoreError::NotFound) )); assert_eq!( read_path(&doc, &path("list")).unwrap(), Some(json!(["a", {"k": 2}, "d", "e"])) ); - delete_path(&mut doc, &path("list/2"), false).unwrap(); + try_change(&mut doc, |doc| delete_path(doc, &path("list/2"), false)).unwrap(); assert_eq!( read_path(&doc, &path("list")).unwrap(), Some(json!(["a", {"k": 2}, "e"])) @@ -1113,8 +1126,14 @@ mod tests { #[test] fn negative_indexes_count_from_the_end() { let mut doc = AutoCommit::new(); - write_path(&mut doc, &path("list"), &json!(["a", "b"])).unwrap(); - write_path(&mut doc, &path("map"), &json!({"-1": "a key"})).unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list"), &json!(["a", "b"])) + }) + .unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("map"), &json!({"-1": "a key"})) + }) + .unwrap(); assert_eq!( positive_path(&doc, &path("list/-1"), false).unwrap(), Some(path("list/1")) @@ -1135,28 +1154,47 @@ mod tests { #[test] fn inserts_into_lists() { let mut doc = AutoCommit::new(); - write_path(&mut doc, &path("list"), &json!(["b", "d"])).unwrap(); - insert_path(&mut doc, &path("list/0"), &json!("a")).unwrap(); - insert_path(&mut doc, &path("list/2"), &json!("c")).unwrap(); - insert_path(&mut doc, &path("list/4"), &json!({"e": 5})).unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("list"), &json!(["b", "d"])) + }) + .unwrap(); + try_change(&mut doc, |doc| { + insert_path(doc, &path("list/0"), &json!("a")) + }) + .unwrap(); + try_change(&mut doc, |doc| { + insert_path(doc, &path("list/2"), &json!("c")) + }) + .unwrap(); + try_change(&mut doc, |doc| { + insert_path(doc, &path("list/4"), &json!({"e": 5})) + }) + .unwrap(); assert_eq!( read_path(&doc, &path("list")).unwrap(), Some(json!(["a", "b", "c", "d", {"e": 5}])) ); assert!(matches!( - insert_path(&mut doc, &path("list/6"), &json!(1)), + try_change(&mut doc, |doc| insert_path(doc, &path("list/6"), &json!(1))), Err(StoreError::PastTheEnd { index: 6, length: 5 }) )); - write_path(&mut doc, &path("map"), &json!({"k": 1})).unwrap(); + try_change(&mut doc, |doc| { + write_path(doc, &path("map"), &json!({"k": 1})) + }) + .unwrap(); assert!(matches!( - insert_path(&mut doc, &path("map/0"), &json!(1)), + try_change(&mut doc, |doc| insert_path(doc, &path("map/0"), &json!(1))), Err(StoreError::NotAList) )); assert!(matches!( - insert_path(&mut doc, &path("nothing/0"), &json!(1)), + try_change(&mut doc, |doc| insert_path( + doc, + &path("nothing/0"), + &json!(1) + )), Err(StoreError::NotFound) )); } -- cgit v1.3.1