mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-28 00:35:32 +08:00
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.
This commit is contained in:
@@ -63,6 +63,22 @@ impl Database {
|
||||
Ok(db)
|
||||
}
|
||||
|
||||
/// 创建内存数据库(用于测试)
|
||||
pub fn memory() -> Result<Self, AppError> {
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user