test: add tests to catalog.for_each, set FnMut requirement for predicate
This commit is contained in:
@@ -1,16 +1,17 @@
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
impl Catalog {
|
impl Catalog {
|
||||||
pub fn for_each<T, F>(&self, predicate: F) -> Result<(), FailedTo>
|
pub fn for_each<T, F>(&self, mut predicate: F) -> Result<(), FailedTo>
|
||||||
where
|
where
|
||||||
T: EAV,
|
T: EAV,
|
||||||
F: Fn(&T) -> (),
|
F: FnMut(&T),
|
||||||
{
|
{
|
||||||
self.with_items(|items| {
|
self.with_items(|items| {
|
||||||
Ok(items
|
items
|
||||||
.values()
|
.values()
|
||||||
.flat_map(|entity| T::try_from(entity.clone()).map_err(|_| FailedTo::ConvertEntity))
|
.flat_map(|entity| T::try_from(entity.clone()).map_err(|_| FailedTo::ConvertEntity))
|
||||||
.for_each(|item| predicate(&item)))
|
.for_each(|item| predicate(&item));
|
||||||
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
|
||||||
impl Catalog {
|
impl Catalog {
|
||||||
pub fn for_each_mut<T, F>(&self, predicate: F) -> Result<(), FailedTo>
|
pub fn for_each_mut<T, F>(&self, mut predicate: F) -> Result<(), FailedTo>
|
||||||
where
|
where
|
||||||
T: EAV,
|
T: EAV,
|
||||||
F: Fn(&mut T) -> (),
|
F: FnMut(&mut T),
|
||||||
{
|
{
|
||||||
self.on_items(|items| {
|
self.on_items(|items| {
|
||||||
for entity in items.values_mut() {
|
for entity in items.values_mut() {
|
||||||
|
|||||||
40
01.workspace/heave/src/tst/catalog_for_each.rs
Normal file
40
01.workspace/heave/src/tst/catalog_for_each.rs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::*;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
#[test]
|
||||||
|
fn for_each_should_iterate_over_all_items() {
|
||||||
|
let catalog = Catalog::new("test.db");
|
||||||
|
let item1 = Item {
|
||||||
|
id: "1".to_string(),
|
||||||
|
name: "Item 1".to_string(),
|
||||||
|
price: 10,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let item2 = Item {
|
||||||
|
id: "2".to_string(),
|
||||||
|
name: "Item 2".to_string(),
|
||||||
|
price: 20,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let item3 = Item {
|
||||||
|
id: "3".to_string(),
|
||||||
|
name: "Item 3".to_string(),
|
||||||
|
price: 30,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let _ = catalog.upsert(item1.clone());
|
||||||
|
let _ = catalog.upsert(item2.clone());
|
||||||
|
let _ = catalog.upsert(item3.clone());
|
||||||
|
let mut collected_items = HashMap::new();
|
||||||
|
catalog
|
||||||
|
.for_each::<Item, _>(|item| {
|
||||||
|
collected_items.insert(item.id.clone(), item.clone());
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(collected_items.len(), 3);
|
||||||
|
assert_eq!(collected_items.get("1").unwrap(), &item1);
|
||||||
|
assert_eq!(collected_items.get("2").unwrap(), &item2);
|
||||||
|
assert_eq!(collected_items.get("3").unwrap(), &item3);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
pub mod catalog_delete;
|
pub mod catalog_delete;
|
||||||
|
pub mod catalog_for_each;
|
||||||
pub mod catalog_get;
|
pub mod catalog_get;
|
||||||
pub mod catalog_get_by;
|
pub mod catalog_get_by;
|
||||||
pub mod catalog_init;
|
pub mod catalog_init;
|
||||||
|
|||||||
Reference in New Issue
Block a user