#[cfg(test)]
pub mod utils {
use std::path::Path;
use tokio::sync::OnceCell;
static INIT: OnceCell<()> = OnceCell::const_new();
pub async fn setup_test_db() -> anyhow::Result<()> {
INIT.get_or_init(|| async {
let db_dir = std::env::temp_dir().join("actrix_test_db");
std::fs::create_dir_all(&db_dir).expect("Failed to create test database directory");
let db_file = db_dir.join("actrix.db");
if db_file.exists() {
let _ = std::fs::remove_file(&db_file);
}
let db_dir_str = db_dir
.to_str()
.expect("Failed to convert DB directory path to string");
match crate::storage::db::set_db_path(Path::new(db_dir_str)).await {
Ok(()) => {}
Err(e) => {
let err_msg = e.to_string();
if !err_msg.contains("already initialized")
&& !err_msg.contains("Database already")
{
panic!("Failed to initialize test database: {e}");
}
}
}
})
.await;
Ok(())
}
}