From 9e3a5c413b5cdeb16b422ff861cae16f8490579e Mon Sep 17 00:00:00 2001 From: lix-2026 Date: Mon, 25 May 2026 04:40:18 +0800 Subject: [PATCH] test: cover tree live polling resync --- .../src/routes/local_folder_events.rs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/rust/crates/mnote-web/src/routes/local_folder_events.rs b/rust/crates/mnote-web/src/routes/local_folder_events.rs index b2b9ed78..c2eb5fc8 100644 --- a/rust/crates/mnote-web/src/routes/local_folder_events.rs +++ b/rust/crates/mnote-web/src/routes/local_folder_events.rs @@ -514,4 +514,38 @@ mod tests { assert!(payload["data"]["dataset"]["kernelFileTreeProjection"].is_object()); assert!(payload["data"]["tree"].is_object()); } + + #[test] + fn tree_live_polling_resync_payload_tracks_revision_changes() { + let root = test_root("tree-live-polling-resync"); + std::fs::write(root.join("README.md"), "# Initial\n").expect("write initial"); + let root_uri = format!("file://{}", root.display()); + let workspace_id = + local_workspace_id_from_root_uri(&root_uri).expect("resolve local workspace id"); + let initial_revision = local_folder_watch_revision(&root_uri) + .expect("initial revision") + .revision; + + assert!( + tree_live_polling_resync_payload(&root_uri, &workspace_id, &initial_revision).is_none(), + "revision 未变化时不应发送 resync" + ); + + std::fs::create_dir_all(root.join("docs")).expect("create docs"); + std::fs::write(root.join("docs/new.md"), "# New\n").expect("write new markdown"); + let (next_revision, payload) = + tree_live_polling_resync_payload(&root_uri, &workspace_id, &initial_revision) + .expect("revision change should build resync payload"); + + assert_ne!(next_revision, initial_revision); + assert_eq!(payload["kind"], "resync"); + assert_eq!(payload["sourceKind"], "local_folder"); + assert_eq!(payload["rootUri"], root_uri); + assert_eq!(payload["workspaceId"], workspace_id); + assert_eq!(payload["revision"], next_revision); + assert!(payload["data"]["dataset"]["kernel_sidebar_projection"].is_object()); + assert!(payload["data"]["dataset"]["kernel_file_tree_projection"].is_object()); + + let _ = std::fs::remove_dir_all(root); + } }