fix: make catalog.delete coherent with other methods propagating errors
This commit is contained in:
@@ -16,13 +16,13 @@ impl Catalog {
|
|||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
/// * `id` - The ID of the entity to mark for deletion.
|
/// * `id` - The ID of the entity to mark for deletion.
|
||||||
pub fn delete(&self, id: &str) {
|
pub fn delete(&self, id: &str) -> Result<(), FailedTo> {
|
||||||
let _ = self.on_items(|items| {
|
self.on_items(|items| {
|
||||||
let entity = items.get_mut(id);
|
let entity = items.get_mut(id);
|
||||||
if let Some(entity) = entity {
|
if let Some(entity) = entity {
|
||||||
entity.state = EntityState::ToDelete;
|
entity.state = EntityState::ToDelete;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
let item_id = item.id.clone();
|
let item_id = item.id.clone();
|
||||||
let _ = catalog.upsert(item);
|
let _ = catalog.upsert(item);
|
||||||
catalog.delete(&item_id);
|
catalog.delete(&item_id).unwrap();
|
||||||
let is_deleted = catalog
|
let is_deleted = catalog
|
||||||
.with_items(|items| {
|
.with_items(|items| {
|
||||||
let entity = items.get(&item_id).unwrap();
|
let entity = items.get(&item_id).unwrap();
|
||||||
@@ -38,7 +38,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
let _ = catalog.upsert(item);
|
let _ = catalog.upsert(item);
|
||||||
// Attempt to delete a non-existent entity, which should not panic or change anything.
|
// Attempt to delete a non-existent entity, which should not panic or change anything.
|
||||||
catalog.delete("nonexistent-id");
|
catalog.delete("nonexistent-id").unwrap();
|
||||||
let not_deleted = catalog
|
let not_deleted = catalog
|
||||||
.with_items(|items| {
|
.with_items(|items| {
|
||||||
let entity = items.get("item-123").unwrap();
|
let entity = items.get("item-123").unwrap();
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ mod tests {
|
|||||||
catalog2.load_by_id("item-to-delete").unwrap();
|
catalog2.load_by_id("item-to-delete").unwrap();
|
||||||
assert!(catalog2.get::<Item>("item-to-delete").unwrap().is_some());
|
assert!(catalog2.get::<Item>("item-to-delete").unwrap().is_some());
|
||||||
// 3. 'delete' -> 'persist'
|
// 3. 'delete' -> 'persist'
|
||||||
catalog2.delete("item-to-delete");
|
catalog2.delete("item-to-delete").unwrap();
|
||||||
catalog2.persist().unwrap();
|
catalog2.persist().unwrap();
|
||||||
// 4. 'load_by_id' should now return nothing
|
// 4. 'load_by_id' should now return nothing
|
||||||
let catalog3 = Catalog::new(db_path);
|
let catalog3 = Catalog::new(db_path);
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ mod tests {
|
|||||||
let _ = catalog1.upsert(item1.clone());
|
let _ = catalog1.upsert(item1.clone());
|
||||||
assert!(catalog1.persist().is_ok());
|
assert!(catalog1.persist().is_ok());
|
||||||
// 2. Mark the item for deletion and persist again.
|
// 2. Mark the item for deletion and persist again.
|
||||||
catalog1.delete(&item1.id);
|
catalog1.delete(&item1.id).unwrap();
|
||||||
assert!(catalog1.persist().is_ok());
|
assert!(catalog1.persist().is_ok());
|
||||||
// 3. Create a new catalog and try to load the deleted item.
|
// 3. Create a new catalog and try to load the deleted item.
|
||||||
let catalog2 = Catalog::new(db_path);
|
let catalog2 = Catalog::new(db_path);
|
||||||
@@ -191,7 +191,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
let _ = catalog_ops.upsert(item_to_update_new.clone()); // State: Updated
|
let _ = catalog_ops.upsert(item_to_update_new.clone()); // State: Updated
|
||||||
// An item to be deleted.
|
// An item to be deleted.
|
||||||
catalog_ops.delete("delete-me"); // State: ToDelete
|
catalog_ops.delete("delete-me").unwrap(); // State: ToDelete
|
||||||
// item_to_keep is left untouched (State: Synced after load)
|
// item_to_keep is left untouched (State: Synced after load)
|
||||||
// 3. Execution: Persist all the changes in one go.
|
// 3. Execution: Persist all the changes in one go.
|
||||||
catalog_ops.persist().unwrap();
|
catalog_ops.persist().unwrap();
|
||||||
@@ -320,7 +320,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
let _ = catalog.upsert(item_updated.clone()); // State: Updated
|
let _ = catalog.upsert(item_updated.clone()); // State: Updated
|
||||||
// An item to be deleted.
|
// An item to be deleted.
|
||||||
catalog.delete("delete-me"); // State: ToDelete
|
catalog.delete("delete-me").unwrap(); // State: ToDelete
|
||||||
// 'item_untouched' remains with state `Loaded`.
|
// 'item_untouched' remains with state `Loaded`.
|
||||||
// Check states before final persist
|
// Check states before final persist
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|||||||
Reference in New Issue
Block a user