use super::builder_test::{mark_expected_from, trace_len};
use super::struct_test::msg;
use crate::db::ADb;
use sea_orm::{DatabaseTransaction, DbErr, TransactionTrait};
pub async fn expect_db_error<T>(
db: &ADb,
action: impl AsyncFnOnce(&DatabaseTransaction) -> Result<T, DbErr>,
) -> Result<DbErr, DbErr> {
let start = trace_len();
let savepoint = db.begin().await?;
let attempt = action(&savepoint).await;
savepoint.rollback().await?;
mark_expected_from(start);
match attempt {
Err(refused) => Ok(refused),
Ok(_) => Err(DbErr::Custom(msg("runique_test.not_refused").into_owned())),
}
}