use ormer::Model;
mod _test_common;
#[derive(Model, Debug, Clone)]
#[table = "simple_users"]
struct SimpleUser {
#[primary]
id: Option<i64>,
name: String,
}
async fn test_simple_transaction_commit_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
db.create_table::<SimpleUser>().await?;
let mut txn = db.begin().await?;
let user = SimpleUser {
id: None,
name: "Test User".to_string(),
};
txn.insert(&user).await?;
txn.commit().await?;
let users: Vec<SimpleUser> = db
.select::<SimpleUser>()
.collect::<Vec<SimpleUser>>()
.await?;
assert_eq!(users.len(), 1);
assert_eq!(users[0].name, "Test User");
println!("✓ Transaction commit test passed");
db.drop_table::<SimpleUser>().await?;
Ok(())
}
async fn test_simple_transaction_rollback_impl(
config: &_test_common::DbConfig,
) -> Result<(), Box<dyn std::error::Error>> {
let db = _test_common::create_db_connection(config).await?;
db.create_table::<SimpleUser>().await?;
let mut txn = db.begin().await?;
let user = SimpleUser {
id: None,
name: "Should Rollback".to_string(),
};
txn.insert(&user).await?;
txn.rollback().await?;
let users: Vec<SimpleUser> = db
.select::<SimpleUser>()
.collect::<Vec<SimpleUser>>()
.await?;
assert_eq!(users.len(), 0);
println!("✓ Transaction rollback test passed");
db.drop_table::<SimpleUser>().await?;
Ok(())
}
test_on_all_dbs_result!(test_simple_transaction_commit_impl);
test_on_all_dbs_result!(test_simple_transaction_rollback_impl);