Refactor
This commit is contained in:
parent
62fb43c605
commit
f4611c4939
@ -1,4 +1,4 @@
|
||||
use crate::{ExecErr, ExecResult, QueryErr, QueryResult, Statement};
|
||||
use crate::{ExecErr, ExecResult, MockDatabaseConnection, QueryErr, QueryResult, Statement};
|
||||
use sea_query::{
|
||||
DeleteStatement, InsertStatement, MysqlQueryBuilder, PostgresQueryBuilder, SelectStatement,
|
||||
UpdateStatement,
|
||||
@ -91,6 +91,13 @@ impl DatabaseConnection {
|
||||
DatabaseConnection::Disconnected => panic!("Disconnected"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_mock_connection(&self) -> &MockDatabaseConnection {
|
||||
match self {
|
||||
DatabaseConnection::MockDatabaseConnection(mock_conn) => mock_conn,
|
||||
_ => panic!("not mock connection"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl QueryBuilderBackend {
|
||||
|
@ -51,10 +51,6 @@ impl MockDatabase {
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
pub fn into_transaction_log(self) -> Vec<Statement> {
|
||||
self.transaction_log
|
||||
}
|
||||
}
|
||||
|
||||
impl MockDatabaseTrait for MockDatabase {
|
||||
@ -87,18 +83,9 @@ impl MockDatabaseTrait for MockDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
fn into_transaction_log(&mut self) -> Vec<Statement> {
|
||||
fn drain_transaction_log(&mut self) -> Vec<Statement> {
|
||||
std::mem::take(&mut self.transaction_log)
|
||||
}
|
||||
|
||||
fn assert_transaction_log(&mut self, stmts: Vec<Statement>) {
|
||||
for stmt in stmts.iter() {
|
||||
assert!(!self.transaction_log.is_empty());
|
||||
let log = self.transaction_log.first().unwrap();
|
||||
assert_eq!(log.to_string(), stmt.to_string());
|
||||
self.transaction_log = self.transaction_log.drain(1..).collect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl MockRow {
|
||||
|
@ -1,7 +1,7 @@
|
||||
use sea_query::{inject_parameters, MySqlQueryBuilder, Values};
|
||||
use std::fmt;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct Statement {
|
||||
pub sql: String,
|
||||
pub values: Option<Values>,
|
||||
|
@ -10,8 +10,8 @@ use std::sync::{
|
||||
pub struct MockDatabaseConnector;
|
||||
|
||||
pub struct MockDatabaseConnection {
|
||||
pub(crate) counter: AtomicUsize,
|
||||
pub(crate) mocker: Mutex<Box<dyn MockDatabaseTrait>>,
|
||||
counter: AtomicUsize,
|
||||
mocker: Mutex<Box<dyn MockDatabaseTrait>>,
|
||||
}
|
||||
|
||||
pub trait MockDatabaseTrait: Send {
|
||||
@ -19,9 +19,7 @@ pub trait MockDatabaseTrait: Send {
|
||||
|
||||
fn query(&mut self, counter: usize, stmt: Statement) -> Result<Vec<QueryResult>, QueryErr>;
|
||||
|
||||
fn into_transaction_log(&mut self) -> Vec<Statement>;
|
||||
|
||||
fn assert_transaction_log(&mut self, stmts: Vec<Statement>);
|
||||
fn drain_transaction_log(&mut self) -> Vec<Statement>;
|
||||
}
|
||||
|
||||
impl MockDatabaseConnector {
|
||||
@ -46,9 +44,11 @@ impl MockDatabaseConnection {
|
||||
mocker: Mutex::new(Box::new(m)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_mocker_mutex(&self) -> &Mutex<Box<dyn MockDatabaseTrait>> {
|
||||
&self.mocker
|
||||
}
|
||||
|
||||
impl MockDatabaseConnection {
|
||||
pub async fn execute(&self, statement: Statement) -> Result<ExecResult, ExecErr> {
|
||||
debug_print!("{}", statement);
|
||||
let counter = self.counter.fetch_add(1, Ordering::SeqCst);
|
||||
|
@ -104,7 +104,7 @@ where
|
||||
#[cfg(feature = "mock")]
|
||||
mod tests {
|
||||
use crate::entity::prelude::*;
|
||||
use crate::tests_cfg::{util::*, *};
|
||||
use crate::tests_cfg::*;
|
||||
use crate::{Database, MockDatabase, QueryErr};
|
||||
use futures::TryStreamExt;
|
||||
use sea_query::{Alias, Expr, SelectStatement, Value};
|
||||
@ -174,8 +174,13 @@ mod tests {
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||
];
|
||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
||||
mocker.assert_transaction_log(stmts);
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
.get_mocker_mutex()
|
||||
.lock()
|
||||
.unwrap();
|
||||
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -209,8 +214,13 @@ mod tests {
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||
];
|
||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
||||
mocker.assert_transaction_log(stmts);
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
.get_mocker_mutex()
|
||||
.lock()
|
||||
.unwrap();
|
||||
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -242,8 +252,13 @@ mod tests {
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![query_builder.build_select_statement(&select)];
|
||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
||||
mocker.assert_transaction_log(stmts);
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
.get_mocker_mutex()
|
||||
.lock()
|
||||
.unwrap();
|
||||
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -295,8 +310,13 @@ mod tests {
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||
];
|
||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
||||
mocker.assert_transaction_log(stmts);
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
.get_mocker_mutex()
|
||||
.lock()
|
||||
.unwrap();
|
||||
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@ -328,9 +348,13 @@ mod tests {
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||
];
|
||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
||||
mocker.assert_transaction_log(stmts[0..1].to_vec());
|
||||
mocker.assert_transaction_log(stmts[1..].to_vec());
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
.get_mocker_mutex()
|
||||
.lock()
|
||||
.unwrap();
|
||||
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
use crate::{
|
||||
tests_cfg::*, Database, DatabaseConnection, IntoMockRow, MockDatabaseConnection, MockRow,
|
||||
};
|
||||
use crate::{tests_cfg::*, IntoMockRow, MockRow};
|
||||
use sea_query::Value;
|
||||
|
||||
impl From<cake_filling::Model> for MockRow {
|
||||
@ -43,10 +41,3 @@ impl From<fruit::Model> for MockRow {
|
||||
map.into_mock_row()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_mock_db_connection(db: &Database) -> &MockDatabaseConnection {
|
||||
match db.get_connection() {
|
||||
DatabaseConnection::MockDatabaseConnection(mock_conn) => mock_conn,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user