Skip to content

Commit

Permalink
[#105] Improve delete
Browse files Browse the repository at this point in the history
  • Loading branch information
Orchaldir committed Nov 13, 2023
1 parent 3363f63 commit eac26bc
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion rpg_tools_core/src/usecase/delete/culture.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,16 @@ pub fn delete_culture(data: &mut RpgData, id: CultureId) -> DeleteResult {

match data.culture_manager.delete(id) {
DeleteElementResult::NotFound => DeleteResult::NotFound,
_ => DeleteResult::Ok,
DeleteElementResult::DeletedLastElement => DeleteResult::Ok,
DeleteElementResult::SwappedAndRemoved { id_to_update } => {
data.character_manager
.get_all_mut()
.iter_mut()
.filter(|character| character.culture() == id_to_update)
.for_each(|character| character.set_culture(id));

DeleteResult::Ok
}
}
}

Expand Down Expand Up @@ -62,4 +71,25 @@ mod tests {
delete_culture(&mut data, culture_id)
);
}

#[test]
fn test_update_character_with_moved_culture() {
let mut data = RpgData::default();
data.culture_manager.create();
let culture_id1 = data.culture_manager.create();
let culture_id2 = data.culture_manager.create();
let character_id = data.character_manager.create();
data.character_manager
.get_mut(character_id)
.map(|character| character.set_culture(culture_id2));

assert_eq!(Ok, delete_culture(&mut data, culture_id1));
assert_eq!(
culture_id1,
data.character_manager
.get_mut(character_id)
.map(|character| character.culture())
.unwrap()
);
}
}

0 comments on commit eac26bc

Please sign in to comment.