test: add tests to catalog.for_each, set FnMut requirement for predicate
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
use crate::*;
|
||||
|
||||
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
|
||||
T: EAV,
|
||||
F: Fn(&T) -> (),
|
||||
F: FnMut(&T),
|
||||
{
|
||||
self.with_items(|items| {
|
||||
Ok(items
|
||||
items
|
||||
.values()
|
||||
.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::*;
|
||||
|
||||
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
|
||||
T: EAV,
|
||||
F: Fn(&mut T) -> (),
|
||||
F: FnMut(&mut T),
|
||||
{
|
||||
self.on_items(|items| {
|
||||
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_for_each;
|
||||
pub mod catalog_get;
|
||||
pub mod catalog_get_by;
|
||||
pub mod catalog_init;
|
||||
|
||||
Reference in New Issue
Block a user