tangle


git clone https://radroots.dev/git/tangle.git
Log | Files | Refs | README | LICENSE

commit 60eab9d6947a9cdfc7e11f6e8d97cf5d130e6604
parent 9721af957951dce0e785de5cc4878c136965ba2e
Author: triesap <tyson@radroots.org>
Date:   Mon, 15 Jun 2026 04:42:13 -0700

tests: extend Pocket store parity

- cover mismatch screening without redaction markers
- prove all-mismatch screens materialize no events
- assert duplicate event writes fail deterministically
- prove duplicate writes do not create duplicate scan or query results

Diffstat:
Mcrates/tangle_store_pocket/src/lib.rs | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+), 0 deletions(-)

diff --git a/crates/tangle_store_pocket/src/lib.rs b/crates/tangle_store_pocket/src/lib.rs @@ -753,6 +753,67 @@ mod tests { assert_eq!(screened.events().len(), 1); assert_eq!(screened.events()[0].id(), visible.id()); + let mismatched = handle + .find_events_with_screen(&filter, PocketQueryConfig::default(), |event| { + if event.id() == visible.id() { + ScreenResult::Match + } else { + ScreenResult::Mismatch + } + }) + .expect("mismatched"); + + assert!(!mismatched.redacted()); + assert_eq!(mismatched.events().len(), 1); + assert_eq!(mismatched.events()[0].id(), visible.id()); + + let hidden = handle + .find_events_with_screen(&filter, PocketQueryConfig::default(), |_| { + ScreenResult::Mismatch + }) + .expect("hidden"); + + assert!(!hidden.redacted()); + assert!(hidden.events().is_empty()); + + let _ = std::fs::remove_dir_all(root); + } + + #[test] + fn pocket_store_handle_rejects_duplicate_event_writes_without_duplicate_materialization() { + let root = temp_root("tangle-pocket-duplicate"); + let config = PocketStoreConfig::new(root.join("pocket"), PocketSyncPolicy::FlushOnShutdown) + .expect("config"); + let handle = PocketStoreHandle::open(&config).expect("open"); + let event = parse_pocket_event_json(event_json().as_bytes()).expect("event"); + let filter = parse_pocket_filter_json(filter_json().as_bytes()).expect("filter"); + + let first_offset = handle.store_event(&event).expect("store first"); + let duplicate_error = handle.store_event(&event).expect_err("duplicate"); + let by_id = handle + .event_by_id(event.id()) + .expect("lookup") + .expect("event"); + let by_offset = handle.event_by_offset(first_offset).expect("offset"); + let found = handle + .find_events(&filter, PocketQueryConfig::default()) + .expect("find"); + let scanned = handle.scan_events().expect("scan"); + + assert!( + duplicate_error + .message() + .to_lowercase() + .contains("duplicate") + ); + assert_eq!(by_id.id(), event.id()); + assert_eq!(by_offset.id(), event.id()); + assert_eq!(found.len(), 1); + assert_eq!(found[0].id(), event.id()); + assert_eq!(scanned.len(), 1); + assert_eq!(scanned[0].store_offset(), first_offset); + assert_eq!(scanned[0].event().id(), event.id()); + let _ = std::fs::remove_dir_all(root); }