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 /// # 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(())
}); })
} }
} }

View File

@@ -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();

View File

@@ -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);

View File

@@ -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!(