From b20e12101324af0097d7b2277a190652a763255e Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Mon, 24 Nov 2025 22:37:15 +0800 Subject: [PATCH] feat(backend): add in-memory database mode for testing Add support for creating in-memory SQLite database instances to improve test isolation and performance. Changes: - Add Database::memory() constructor for in-memory database - Enable foreign key constraints for data integrity - Export Database type from lib.rs for test usage - Initialize tables automatically on memory database creation This enables unit tests to run without filesystem dependencies and provides faster test execution with proper cleanup. --- src-tauri/src/database.rs | 16 ++++++++++++++++ src-tauri/src/lib.rs | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src-tauri/src/database.rs b/src-tauri/src/database.rs index 486d72833..64ef59997 100644 --- a/src-tauri/src/database.rs +++ b/src-tauri/src/database.rs @@ -63,6 +63,22 @@ impl Database { Ok(db) } + /// 创建内存数据库(用于测试) + pub fn memory() -> Result { + let conn = Connection::open_in_memory().map_err(|e| AppError::Database(e.to_string()))?; + + // 启用外键约束 + conn.execute("PRAGMA foreign_keys = ON;", []) + .map_err(|e| AppError::Database(e.to_string()))?; + + let db = Self { + conn: Mutex::new(conn), + }; + db.create_tables()?; + + Ok(db) + } + fn create_tables(&self) -> Result<(), AppError> { let conn = lock_conn!(self.conn); Self::create_tables_on_conn(&conn) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index f9fa2d5bc..caef786a4 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -26,6 +26,7 @@ pub use app_config::{AppType, McpApps, McpServer, MultiAppConfig}; pub use codex_config::{get_codex_auth_path, get_codex_config_path, write_codex_live_atomic}; pub use commands::*; pub use config::{get_claude_mcp_path, get_claude_settings_path, read_json_file}; +pub use database::Database; pub use deeplink::{import_provider_from_deeplink, parse_deeplink_url, DeepLinkImportRequest}; pub use error::AppError; pub use mcp::{ @@ -314,7 +315,7 @@ fn handle_deeplink_url( match crate::deeplink::parse_deeplink_url(url_str) { Ok(request) => { log::info!( - "✓ Successfully parsed deep link: resource={}, app={}, name={}", + "✓ Successfully parsed deep link: resource={}, app={:?}, name={:?}", request.resource, request.app, request.name @@ -840,6 +841,7 @@ pub fn run() { commands::parse_deeplink, commands::merge_deeplink_config, commands::import_from_deeplink, + commands::import_from_deeplink_unified, update_tray_menu, // Environment variable management commands::check_env_conflicts, @@ -889,7 +891,7 @@ pub fn run() { match crate::deeplink::parse_deeplink_url(&url_str) { Ok(request) => { log::info!( - "Successfully parsed deep link from RunEvent::Opened: resource={}, app={}", + "Successfully parsed deep link from RunEvent::Opened: resource={}, app={:?}", request.resource, request.app );