Test case

This commit is contained in:
Chris Tsang 2021-10-08 16:52:38 +08:00
parent a2ec6cd351
commit eb87b7c2ce
2 changed files with 40 additions and 7 deletions

View File

@ -118,8 +118,7 @@ impl MockDatabaseTrait for MockDatabase {
fn commit(&mut self) {
if self.transaction.is_some() {
let transaction = self.transaction.take().unwrap();
self.transaction_log
.push(transaction.into_transaction());
self.transaction_log.push(transaction.into_transaction());
} else {
panic!("There is no open transaction to commit");
}
@ -238,15 +237,15 @@ impl OpenTransaction {
#[cfg(feature = "mock")]
mod tests {
use crate::{
entity::*, tests_cfg::*, ConnectionTrait, DbBackend, DbErr, MockDatabase, Transaction,
Statement,
entity::*, tests_cfg::*, ConnectionTrait, DbBackend, DbErr, MockDatabase, Statement,
Transaction, TransactionError,
};
#[smol_potat::test]
async fn test_transaction_1() {
let db = MockDatabase::new(DbBackend::Postgres).into_connection();
db.transaction::<_, _, DbErr>(|txn| {
db.transaction::<_, (), DbErr>(|txn| {
Box::pin(async move {
let _1 = cake::Entity::find().one(txn).await;
let _2 = fruit::Entity::find().all(txn).await;
@ -282,4 +281,38 @@ mod tests {
]
);
}
#[smol_potat::test]
async fn test_transaction_2() {
let db = MockDatabase::new(DbBackend::Postgres).into_connection();
#[derive(Debug, PartialEq)]
pub struct MyErr(String);
impl std::error::Error for MyErr {}
impl std::fmt::Display for MyErr {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0.as_str())
}
}
let result = db
.transaction::<_, (), MyErr>(|txn| {
Box::pin(async move {
let _ = cake::Entity::find().one(txn).await;
Err(MyErr("test".to_owned()))
})
})
.await;
match result {
Err(TransactionError::Transaction(err)) => {
assert_eq!(err, MyErr("test".to_owned()))
}
_ => panic!(),
}
assert_eq!(db.into_transaction_log(), vec![]);
}
}

View File

@ -1,6 +1,6 @@
use crate::{
debug_print, error::*, DatabaseConnection, DbBackend, ExecResult, MockDatabase,
Transaction, QueryResult, Statement,
debug_print, error::*, DatabaseConnection, DbBackend, ExecResult, MockDatabase, QueryResult,
Statement, Transaction,
};
use futures::Stream;
use std::{