#![cfg(any(feature = "sqlite", feature = "postgresql", feature = "mysql"))]
mod _test_common;
define_test_user_for_simple_txn!(CommitUser, "simple_transaction_commit_1");
define_test_user_for_simple_txn!(RollbackUser, "simple_transaction_rollback_1");
async fn test_simple_transaction_commit_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
#[cfg(feature = "postgresql")]
if matches!(config.0, ormer::DbType::PostgreSQL) {
println!("Skipping PostgreSQL test (known issue with Option<i64> primary key)");
return Ok(());
}
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<CommitUser>().execute().await;
println!("[COMMIT] Creating table...");
db.create_table::<CommitUser>().execute().await?;
println!("[COMMIT] Table created");
let mut txn = db.begin().await?;
let user = CommitUser {
id: None,
name: "Test User".to_string(),
};
txn.insert(&user)
.execute()
.await?;
txn.commit().await?;
let users: Vec<CommitUser> = db
.select::<CommitUser>()
.collect::<Vec<CommitUser>>()
.await?;
assert_eq!(users.len(), 1);
assert_eq!(users[0].name, "Test User");
println!("✓ Transaction commit test passed");
db.drop_table::<CommitUser>().execute().await?;
Ok(())
}
async fn test_simple_transaction_rollback_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
#[cfg(feature = "postgresql")]
if matches!(config.0, ormer::DbType::PostgreSQL) {
println!("Skipping PostgreSQL test (known issue with Option<i64> primary key)");
return Ok(());
}
let db = _test_common::create_db_connection(config).await?;
let _ = db.drop_table::<RollbackUser>().execute().await;
println!("[ROLLBACK] Creating table...");
db.create_table::<RollbackUser>().execute().await?;
println!("[ROLLBACK] Table created");
let mut txn = db.begin().await?;
let user = RollbackUser {
id: None,
name: "Should Rollback".to_string(),
};
txn.insert(&user)
.execute()
.await?;
txn.rollback().await?;
let users: Vec<RollbackUser> = db
.select::<RollbackUser>()
.collect::<Vec<RollbackUser>>()
.await?;
assert_eq!(users.len(), 0);
println!("✓ Transaction rollback test passed");
db.drop_table::<RollbackUser>().execute().await?;
Ok(())
}
test_on_all_dbs_result!(test_simple_transaction_commit_impl);
test_on_all_dbs_result!(test_simple_transaction_rollback_impl);