impl IntoMockRow

This commit is contained in:
Chris Tsang 2021-06-19 02:47:36 +08:00
parent f4611c4939
commit 820bbad9de
3 changed files with 24 additions and 66 deletions

View File

@ -1,6 +1,7 @@
use crate::{
Database, DatabaseConnection, ExecErr, ExecResult, ExecResultHolder, MockDatabaseConnection,
MockDatabaseTrait, QueryErr, QueryResult, QueryResultRow, Statement, TypeErr,
Database, DatabaseConnection, EntityTrait, ExecErr, ExecResult, ExecResultHolder, Iden,
Iterable, MockDatabaseConnection, MockDatabaseTrait, ModelTrait, QueryErr, QueryResult,
QueryResultRow, Statement, TypeErr,
};
use sea_query::{Value, ValueType};
use std::collections::BTreeMap;
@ -23,6 +24,23 @@ pub struct MockRow {
values: BTreeMap<String, Value>,
}
pub trait IntoMockRow {
fn into_mock_row(self) -> MockRow;
}
impl<M> IntoMockRow for M
where
M: ModelTrait,
{
fn into_mock_row(self) -> MockRow {
let mut values = BTreeMap::new();
for col in <<M::Entity as EntityTrait>::Column>::iter() {
values.insert(col.to_string(), self.get(col));
}
MockRow { values }
}
}
impl MockDatabase {
pub fn new() -> Self {
Default::default()
@ -101,23 +119,10 @@ impl MockRow {
}
}
impl From<BTreeMap<&str, Value>> for MockRow {
fn from(values: BTreeMap<&str, Value>) -> Self {
Self {
values: values.into_iter().map(|(k, v)| (k.to_owned(), v)).collect(),
impl IntoMockRow for BTreeMap<&str, Value> {
fn into_mock_row(self) -> MockRow {
MockRow {
values: self.into_iter().map(|(k, v)| (k.to_owned(), v)).collect(),
}
}
}
pub trait IntoMockRow {
fn into_mock_row(self) -> MockRow;
}
impl<T> IntoMockRow for T
where
T: Into<MockRow>,
{
fn into_mock_row(self) -> MockRow {
self.into()
}
}

View File

@ -4,7 +4,3 @@ pub mod cake;
pub mod cake_filling;
pub mod filling;
pub mod fruit;
#[cfg(test)]
#[cfg(feature = "mock")]
pub mod util;

View File

@ -1,43 +0,0 @@
use crate::{tests_cfg::*, IntoMockRow, MockRow};
use sea_query::Value;
impl From<cake_filling::Model> for MockRow {
fn from(model: cake_filling::Model) -> Self {
let map = maplit::btreemap! {
"cake_id" => Into::<Value>::into(model.cake_id),
"filling_id" => Into::<Value>::into(model.filling_id),
};
map.into_mock_row()
}
}
impl From<cake::Model> for MockRow {
fn from(model: cake::Model) -> Self {
let map = maplit::btreemap! {
"id" => Into::<Value>::into(model.id),
"name" => Into::<Value>::into(model.name),
};
map.into_mock_row()
}
}
impl From<filling::Model> for MockRow {
fn from(model: filling::Model) -> Self {
let map = maplit::btreemap! {
"id" => Into::<Value>::into(model.id),
"name" => Into::<Value>::into(model.name),
};
map.into_mock_row()
}
}
impl From<fruit::Model> for MockRow {
fn from(model: fruit::Model) -> Self {
let map = maplit::btreemap! {
"id" => Into::<Value>::into(model.id),
"name" => Into::<Value>::into(model.name),
"cake_id" => Into::<Value>::into(model.cake_id),
};
map.into_mock_row()
}
}