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) { fn commit(&mut self) {
if self.transaction.is_some() { if self.transaction.is_some() {
let transaction = self.transaction.take().unwrap(); let transaction = self.transaction.take().unwrap();
self.transaction_log self.transaction_log.push(transaction.into_transaction());
.push(transaction.into_transaction());
} else { } else {
panic!("There is no open transaction to commit"); panic!("There is no open transaction to commit");
} }
@ -238,15 +237,15 @@ impl OpenTransaction {
#[cfg(feature = "mock")] #[cfg(feature = "mock")]
mod tests { mod tests {
use crate::{ use crate::{
entity::*, tests_cfg::*, ConnectionTrait, DbBackend, DbErr, MockDatabase, Transaction, entity::*, tests_cfg::*, ConnectionTrait, DbBackend, DbErr, MockDatabase, Statement,
Statement, Transaction, TransactionError,
}; };
#[smol_potat::test] #[smol_potat::test]
async fn test_transaction_1() { async fn test_transaction_1() {
let db = MockDatabase::new(DbBackend::Postgres).into_connection(); let db = MockDatabase::new(DbBackend::Postgres).into_connection();
db.transaction::<_, _, DbErr>(|txn| { db.transaction::<_, (), DbErr>(|txn| {
Box::pin(async move { Box::pin(async move {
let _1 = cake::Entity::find().one(txn).await; let _1 = cake::Entity::find().one(txn).await;
let _2 = fruit::Entity::find().all(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::{ use crate::{
debug_print, error::*, DatabaseConnection, DbBackend, ExecResult, MockDatabase, debug_print, error::*, DatabaseConnection, DbBackend, ExecResult, MockDatabase, QueryResult,
Transaction, QueryResult, Statement, Statement, Transaction,
}; };
use futures::Stream; use futures::Stream;
use std::{ use std::{