Test case
This commit is contained in:
parent
a2ec6cd351
commit
eb87b7c2ce
@ -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![]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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::{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user