test: align mnote-web local-first assertions

This commit is contained in:
lix-2026
2026-05-20 12:17:44 +08:00
parent dd5578c28e
commit cfc91320be
5 changed files with 21 additions and 15 deletions
+4 -3
View File
@@ -2107,8 +2107,9 @@ mod tests {
.await
.expect("body");
let html = String::from_utf8(body.to_vec()).expect("utf8");
assert!(html
.contains(r#"<body data-mnote-web-owner="mnote-web" data-mnote-shell="workspace">"#));
assert!(html.contains(r#"<body data-mnote-web-owner="mnote-web""#));
assert!(html.contains(r#"data-mnote-shell="workspace""#));
assert!(html.contains(r#"data-mnote-actor-id="user_real""#));
assert!(html.contains(r#"data-testid="wolai-sidebar""#));
assert!(html.contains(r#"data-testid="wolai-topbar""#));
assert!(html.contains(r#"data-testid="wolai-floating-ai""#));
@@ -2270,7 +2271,7 @@ mod tests {
let response = app_with_config("http://127.0.0.1:3100".into(), false)
.oneshot(
Request::builder()
.uri("/")
.uri("/?workspaceId=ws_demo")
.header("cookie", "mnote_recent_page_id=page_child")
.header("x-mnote-workspace-id", "ws_demo")
.header("x-mnote-actor-id", "user_real")
@@ -5925,7 +5925,7 @@ mod tests {
}
#[tokio::test]
async fn hermes_client_session_create_does_not_require_upstream_or_store_chat() {
async fn hermes_client_session_create_uses_control_plane_store_without_storing_chat() {
let response = app()
.oneshot(
Request::builder()
@@ -5953,8 +5953,7 @@ mod tests {
let payload: Value = serde_json::from_slice(&body).expect("json");
assert_eq!(payload["ok"], true);
assert_eq!(payload["sessionId"], "mnote_doc_1_trace_1");
assert_eq!(payload["persistence"], "local_ai_session_jsonl");
assert_eq!(payload["sessionStorage"], "local_private");
assert_eq!(payload["persistence"], "convex_acp_runtime_store");
assert!(payload.get("messages").is_none());
}
@@ -7303,6 +7302,7 @@ mod tests {
let _runtime_guard = runtime_lock().lock().expect("runtime lock");
clear_runtime_registry();
clear_run_queue();
std::env::set_var("MNOTE_WEB_ENABLE_HERMES_HTTP_PROXY", "1");
let stop_hits = Arc::new(AtomicUsize::new(0));
let run_hits = Arc::new(AtomicUsize::new(0));
@@ -7402,6 +7402,7 @@ mod tests {
assert_eq!(runtime["status"], "running");
std::env::remove_var("MNOTE_WEB_HERMES_UPSTREAM_URL");
std::env::remove_var("MNOTE_WEB_ENABLE_HERMES_HTTP_PROXY");
}
#[test]
@@ -4093,7 +4093,7 @@ mod tests {
assert!(html.contains("expectedFileVersion: session.conflictDetectionKey"));
assert!(html.contains("node?.attrs?.mnoteBlockType === 'mindmap'"));
assert!(html.contains("blockType: 'mindmap'"));
assert!(html.contains("props: mindmapPropsFromAttrs(node?.attrs, blockId)"));
assert!(html.contains("...mindmapPropsFromAttrs(node?.attrs, blockId)"));
assert!(html.contains("mindmapPropsFromAttrs(block.props || {}, block.blockId)"));
assert!(html.contains("mnoteBlockType: 'mindmap'"));
assert!(html.contains("block.blockType === 'mindmap'"));
+11 -7
View File
@@ -8959,7 +8959,7 @@ mod tests {
assert!(SIDEBAR_TREE_JS.contains("upsert_documents"));
assert!(SIDEBAR_TREE_JS.contains("setTreeLiveApplyError"));
assert!(!SIDEBAR_TREE_JS.contains("scheduleProjectionRefresh"));
assert!(!SIDEBAR_TREE_JS.contains("/api/tree/projections/sidebar"));
assert!(SIDEBAR_TREE_JS.contains("/api/tree/projections/sidebar"));
assert!(SIDEBAR_TREE_JS.contains("/api/tree/projections/file"));
}
@@ -8991,12 +8991,16 @@ mod tests {
#[test]
fn sidebar_tree_delete_to_trash_dispatches_archive_not_purge() {
assert!(SIDEBAR_TREE_JS.contains(
"if (action === 'delete-trash' && documentId) {\n if (!window.confirm('确定要将“' + title + '”删除到垃圾桶吗?')) return;\n void dispatchTreeCommand(trigger || document.body, {\n action: 'archive',"
));
assert!(!SIDEBAR_TREE_JS.contains(
"if (action === 'delete-trash' && documentId) {\n if (!window.confirm('确定要将“' + title + '”删除到垃圾桶吗?')) return;\n void dispatchTreeCommand(trigger || document.body, {\n action: 'purge',"
));
let delete_trash_start = SIDEBAR_TREE_JS
.find("if (action === 'delete-trash'")
.expect("delete-trash branch");
let delete_trash_end = SIDEBAR_TREE_JS[delete_trash_start..]
.find("function appendTreeContextMenuButton")
.map(|offset| delete_trash_start + offset)
.expect("delete-trash branch end");
let delete_trash_branch = &SIDEBAR_TREE_JS[delete_trash_start..delete_trash_end];
assert!(delete_trash_branch.contains("action: 'archive'"));
assert!(!delete_trash_branch.contains("action: 'purge'"));
}
#[test]
+1 -1
View File
@@ -4076,6 +4076,6 @@ mod tests {
// 至少 2000 字符才能包含完整样式
assert!(MNOTE_CSS.len() > 2000);
// 当前整合了工作区壳、编辑器样式、树菜单、页面 AI 和双 pane 布局,仍保持在单文件可审阅范围内。
assert!(MNOTE_CSS.len() < 90000);
assert!(MNOTE_CSS.len() < 100000);
}
}