Improve local filetree view state and sidebar performance
This commit is contained in:
@@ -2966,6 +2966,89 @@ mod tests {
|
||||
let _ = fs::remove_dir_all(&audit_dir);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn hermes_tools_update_options_local_folder_stores_ui_preferences_in_sqlite() {
|
||||
let root = std::env::temp_dir().join(format!(
|
||||
"mnote-page-options-local-folder-{}",
|
||||
std::process::id()
|
||||
));
|
||||
let _ = fs::remove_dir_all(&root);
|
||||
fs::create_dir_all(root.join(".mnote")).expect("metadata");
|
||||
fs::write(
|
||||
root.join(".mnote").join("workspace.json"),
|
||||
r#"{"workspaceId":"local-ws-user-1","ownerId":"user_1","createdAt":"2026-05-18T00:00:00Z","capabilities":["local_files"]}"#,
|
||||
)
|
||||
.expect("manifest");
|
||||
fs::write(root.join("README.md"), "# Old\n\n旧正文\n").expect("markdown");
|
||||
let root_uri = format!("file://{}", root.display());
|
||||
|
||||
let response = app()
|
||||
.oneshot(
|
||||
Request::builder()
|
||||
.method("POST")
|
||||
.uri("/api/hermes/tools/mnote/call")
|
||||
.header("content-type", "application/json")
|
||||
.header("x-mnote-actor-id", "user_1")
|
||||
.header("x-mnote-actor-type", "user")
|
||||
.body(Body::from(
|
||||
json!({
|
||||
"toolName": "mnote.page.update_options",
|
||||
"workspaceId": "local-ws-user-1",
|
||||
"documentId": "local-md:README.md",
|
||||
"sourceKind": "local_folder",
|
||||
"rootUri": root_uri,
|
||||
"sessionId": "sess_page_options_local",
|
||||
"runId": "run_page_options_local",
|
||||
"toolCallId": "call_page_options_local",
|
||||
"traceId": "trace_page_options_local",
|
||||
"idempotencyKey": "idem_page_options_local",
|
||||
"dryRun": false,
|
||||
"args": {
|
||||
"options": {
|
||||
"wideLayout": true,
|
||||
"showHeadingNumbers": true,
|
||||
"hideTitleHeader": false
|
||||
}
|
||||
}
|
||||
})
|
||||
.to_string(),
|
||||
))
|
||||
.expect("request"),
|
||||
)
|
||||
.await
|
||||
.expect("response");
|
||||
|
||||
let status = response.status();
|
||||
let body = to_bytes(response.into_body(), usize::MAX)
|
||||
.await
|
||||
.expect("body");
|
||||
let text = String::from_utf8(body.to_vec()).expect("utf8");
|
||||
assert_eq!(status, StatusCode::OK, "{text}");
|
||||
let payload: Value = serde_json::from_str(&text).expect("json");
|
||||
assert_eq!(payload["result"]["source"], "local_folder");
|
||||
assert_eq!(
|
||||
payload["result"]["commandName"],
|
||||
"page.layout.updateOptions"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["result"]["result"]["pageOptions"]["wideLayout"],
|
||||
true
|
||||
);
|
||||
assert_eq!(
|
||||
payload["result"]["result"]["pageOptions"]["showHeadingNumbers"],
|
||||
true
|
||||
);
|
||||
assert_eq!(
|
||||
payload["result"]["result"]["pageOptions"]["hideTitleHeader"],
|
||||
false
|
||||
);
|
||||
assert!(
|
||||
!root.join(".mnote").join("page-options.json").exists(),
|
||||
"AI 页面设置工具不应继续写入 .mnote/page-options.json"
|
||||
);
|
||||
let _ = fs::remove_dir_all(&root);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn hermes_tools_page_save_dry_run_returns_diff_without_write() {
|
||||
let response = app()
|
||||
|
||||
Reference in New Issue
Block a user