feat: initialize ERP base platform (extracted from HMS)
- Stripped 11 business crates (health, ai, dialysis, plugins) - Cleaned AppState, AppConfig, main.rs from business coupling - Reduced migrations from 169 to 53 (base-only) - Removed health_provider trait from erp-core - Removed business integration tests - Removed gateway rate limiting middleware - Base capabilities: auth, RBAC, JWT, config, workflow, message, plugin, audit, crypto, RLS, multi-tenant Cargo check: OK Cargo test: OK
This commit is contained in:
37
crates/erp-core/src/test_helpers.rs
Normal file
37
crates/erp-core/src/test_helpers.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
//! 测试基础设施 — 事务回滚模式解决并行化问题
|
||||
//!
|
||||
//! 每个测试在独立事务中执行,测试结束自动回滚,无数据残留。
|
||||
//! 多个测试共享同一个数据库连接池,无连接竞争。
|
||||
|
||||
use sea_orm::{
|
||||
ConnectOptions, Database, DatabaseConnection, DatabaseTransaction, TransactionTrait,
|
||||
};
|
||||
use std::sync::OnceLock;
|
||||
use tokio::sync::OnceCell;
|
||||
|
||||
static DB_POOL: OnceCell<DatabaseConnection> = OnceCell::const_new();
|
||||
static DB_URL: OnceLock<String> = OnceLock::new();
|
||||
|
||||
fn db_url() -> String {
|
||||
DB_URL
|
||||
.get_or_init(|| {
|
||||
std::env::var("TEST_DATABASE_URL")
|
||||
.unwrap_or_else(|_| "postgres://erp:erp@localhost:5432/erp_test".into())
|
||||
})
|
||||
.clone()
|
||||
}
|
||||
|
||||
async fn db_pool() -> &'static DatabaseConnection {
|
||||
DB_POOL
|
||||
.get_or_init(|| async {
|
||||
let opt = ConnectOptions::new(db_url()).max_connections(5).to_owned();
|
||||
Database::connect(opt).await.expect("测试数据库连接失败")
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
/// 创建测试用事务。测试结束自动回滚,无数据残留。
|
||||
pub async fn test_txn() -> DatabaseTransaction {
|
||||
let pool = db_pool().await;
|
||||
pool.begin().await.expect("测试事务创建失败")
|
||||
}
|
||||
Reference in New Issue
Block a user