fix: make catalog.delete coherent with other methods propagating errors

This commit is contained in:
2026-02-27 11:43:38 +01:00
parent 70ff843522
commit 98bc282c32
4 changed files with 9 additions and 9 deletions

View File

@@ -16,13 +16,13 @@ impl Catalog {
/// # Arguments
///
/// * `id` - The ID of the entity to mark for deletion.
pub fn delete(&self, id: &str) {
let _ = self.on_items(|items| {
pub fn delete(&self, id: &str) -> Result<(), FailedTo> {
self.on_items(|items| {
let entity = items.get_mut(id);
if let Some(entity) = entity {
entity.state = EntityState::ToDelete;
}
Ok(())
});
})
}
}

View File

@@ -15,7 +15,7 @@ mod tests {
};
let item_id = item.id.clone();
let _ = catalog.upsert(item);
catalog.delete(&item_id);
catalog.delete(&item_id).unwrap();
let is_deleted = catalog
.with_items(|items| {
let entity = items.get(&item_id).unwrap();
@@ -38,7 +38,7 @@ mod tests {
};
let _ = catalog.upsert(item);
// 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
.with_items(|items| {
let entity = items.get("item-123").unwrap();

View File

@@ -112,7 +112,7 @@ mod tests {
catalog2.load_by_id("item-to-delete").unwrap();
assert!(catalog2.get::<Item>("item-to-delete").unwrap().is_some());
// 3. 'delete' -> 'persist'
catalog2.delete("item-to-delete");
catalog2.delete("item-to-delete").unwrap();
catalog2.persist().unwrap();
// 4. 'load_by_id' should now return nothing
let catalog3 = Catalog::new(db_path);

View File

@@ -56,7 +56,7 @@ mod tests {
let _ = catalog1.upsert(item1.clone());
assert!(catalog1.persist().is_ok());
// 2. Mark the item for deletion and persist again.
catalog1.delete(&item1.id);
catalog1.delete(&item1.id).unwrap();
assert!(catalog1.persist().is_ok());
// 3. Create a new catalog and try to load the deleted item.
let catalog2 = Catalog::new(db_path);
@@ -191,7 +191,7 @@ mod tests {
};
let _ = catalog_ops.upsert(item_to_update_new.clone()); // State: Updated
// 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)
// 3. Execution: Persist all the changes in one go.
catalog_ops.persist().unwrap();
@@ -320,7 +320,7 @@ mod tests {
};
let _ = catalog.upsert(item_updated.clone()); // State: Updated
// An item to be deleted.
catalog.delete("delete-me"); // State: ToDelete
catalog.delete("delete-me").unwrap(); // State: ToDelete
// 'item_untouched' remains with state `Loaded`.
// Check states before final persist
assert_eq!(