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::{
|
use sea_query::{
|
||||||
DeleteStatement, InsertStatement, MysqlQueryBuilder, PostgresQueryBuilder, SelectStatement,
|
DeleteStatement, InsertStatement, MysqlQueryBuilder, PostgresQueryBuilder, SelectStatement,
|
||||||
UpdateStatement,
|
UpdateStatement,
|
||||||
@ -91,6 +91,13 @@ impl DatabaseConnection {
|
|||||||
DatabaseConnection::Disconnected => panic!("Disconnected"),
|
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 {
|
impl QueryBuilderBackend {
|
||||||
|
@ -51,10 +51,6 @@ impl MockDatabase {
|
|||||||
}
|
}
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn into_transaction_log(self) -> Vec<Statement> {
|
|
||||||
self.transaction_log
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MockDatabaseTrait for MockDatabase {
|
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)
|
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 {
|
impl MockRow {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use sea_query::{inject_parameters, MySqlQueryBuilder, Values};
|
use sea_query::{inject_parameters, MySqlQueryBuilder, Values};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub struct Statement {
|
pub struct Statement {
|
||||||
pub sql: String,
|
pub sql: String,
|
||||||
pub values: Option<Values>,
|
pub values: Option<Values>,
|
||||||
|
@ -10,8 +10,8 @@ use std::sync::{
|
|||||||
pub struct MockDatabaseConnector;
|
pub struct MockDatabaseConnector;
|
||||||
|
|
||||||
pub struct MockDatabaseConnection {
|
pub struct MockDatabaseConnection {
|
||||||
pub(crate) counter: AtomicUsize,
|
counter: AtomicUsize,
|
||||||
pub(crate) mocker: Mutex<Box<dyn MockDatabaseTrait>>,
|
mocker: Mutex<Box<dyn MockDatabaseTrait>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait MockDatabaseTrait: Send {
|
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 query(&mut self, counter: usize, stmt: Statement) -> Result<Vec<QueryResult>, QueryErr>;
|
||||||
|
|
||||||
fn into_transaction_log(&mut self) -> Vec<Statement>;
|
fn drain_transaction_log(&mut self) -> Vec<Statement>;
|
||||||
|
|
||||||
fn assert_transaction_log(&mut self, stmts: Vec<Statement>);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MockDatabaseConnector {
|
impl MockDatabaseConnector {
|
||||||
@ -46,9 +44,11 @@ impl MockDatabaseConnection {
|
|||||||
mocker: Mutex::new(Box::new(m)),
|
mocker: Mutex::new(Box::new(m)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl MockDatabaseConnection {
|
pub fn get_mocker_mutex(&self) -> &Mutex<Box<dyn MockDatabaseTrait>> {
|
||||||
|
&self.mocker
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn execute(&self, statement: Statement) -> Result<ExecResult, ExecErr> {
|
pub async fn execute(&self, statement: Statement) -> Result<ExecResult, ExecErr> {
|
||||||
debug_print!("{}", statement);
|
debug_print!("{}", statement);
|
||||||
let counter = self.counter.fetch_add(1, Ordering::SeqCst);
|
let counter = self.counter.fetch_add(1, Ordering::SeqCst);
|
||||||
|
@ -104,7 +104,7 @@ where
|
|||||||
#[cfg(feature = "mock")]
|
#[cfg(feature = "mock")]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::entity::prelude::*;
|
use crate::entity::prelude::*;
|
||||||
use crate::tests_cfg::{util::*, *};
|
use crate::tests_cfg::*;
|
||||||
use crate::{Database, MockDatabase, QueryErr};
|
use crate::{Database, MockDatabase, QueryErr};
|
||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
use sea_query::{Alias, Expr, SelectStatement, Value};
|
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(2).limit(2)),
|
||||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||||
];
|
];
|
||||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
let mut mocker = db
|
||||||
mocker.assert_transaction_log(stmts);
|
.get_connection()
|
||||||
|
.as_mock_connection()
|
||||||
|
.get_mocker_mutex()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||||
|
|
||||||
Ok(())
|
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(2).limit(2)),
|
||||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||||
];
|
];
|
||||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
let mut mocker = db
|
||||||
mocker.assert_transaction_log(stmts);
|
.get_connection()
|
||||||
|
.as_mock_connection()
|
||||||
|
.get_mocker_mutex()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -242,8 +252,13 @@ mod tests {
|
|||||||
|
|
||||||
let query_builder = db.get_query_builder_backend();
|
let query_builder = db.get_query_builder_backend();
|
||||||
let stmts = vec![query_builder.build_select_statement(&select)];
|
let stmts = vec![query_builder.build_select_statement(&select)];
|
||||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
let mut mocker = db
|
||||||
mocker.assert_transaction_log(stmts);
|
.get_connection()
|
||||||
|
.as_mock_connection()
|
||||||
|
.get_mocker_mutex()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||||
|
|
||||||
Ok(())
|
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(2).limit(2)),
|
||||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||||
];
|
];
|
||||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
let mut mocker = db
|
||||||
mocker.assert_transaction_log(stmts);
|
.get_connection()
|
||||||
|
.as_mock_connection()
|
||||||
|
.get_mocker_mutex()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||||
|
|
||||||
Ok(())
|
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(2).limit(2)),
|
||||||
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
query_builder.build_select_statement(select.clone().offset(4).limit(2)),
|
||||||
];
|
];
|
||||||
let mut mocker = get_mock_db_connection(&db).mocker.lock().unwrap();
|
let mut mocker = db
|
||||||
mocker.assert_transaction_log(stmts[0..1].to_vec());
|
.get_connection()
|
||||||
mocker.assert_transaction_log(stmts[1..].to_vec());
|
.as_mock_connection()
|
||||||
|
.get_mocker_mutex()
|
||||||
|
.lock()
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(mocker.drain_transaction_log(), stmts);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
use crate::{
|
use crate::{tests_cfg::*, IntoMockRow, MockRow};
|
||||||
tests_cfg::*, Database, DatabaseConnection, IntoMockRow, MockDatabaseConnection, MockRow,
|
|
||||||
};
|
|
||||||
use sea_query::Value;
|
use sea_query::Value;
|
||||||
|
|
||||||
impl From<cake_filling::Model> for MockRow {
|
impl From<cake_filling::Model> for MockRow {
|
||||||
@ -43,10 +41,3 @@ impl From<fruit::Model> for MockRow {
|
|||||||
map.into_mock_row()
|
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