use dialtone_common::{
ap::ap_object::ApObject, rest::ap_objects::ap_object_model::UpdateOwnedApObject,
};
pub fn update_ap_object(ap_object: ApObject, update: UpdateOwnedApObject) -> ApObject {
ApObject {
name: update.name.and_then(|v| Some(v)).or(ap_object.name),
id: ap_object.id,
url: ap_object.url,
media_type: ap_object.media_type,
ap_type: ap_object.ap_type,
content: update.content.and_then(|v| Some(v)).or(ap_object.content),
summary: update.summary.and_then(|v| Some(v)).or(ap_object.summary),
actor: ap_object.actor,
attributed_to: ap_object.attributed_to,
to: ap_object.to,
cc: ap_object.cc,
bto: ap_object.bto,
bcc: ap_object.bcc,
}
}
#[cfg(test)]
mod update_ap_object_tests {
use dialtone_common::{
ap::ap_object::ApObject, rest::ap_objects::ap_object_model::UpdateOwnedApObject,
};
use super::update_ap_object;
#[test]
#[allow(non_snake_case)]
fn GIVEN_an_ap_object_with_none_parts_WHEN_updated_THEN_update_parts_are_updated() {
let ap_object = ApObject {
name: None,
id: None,
url: None,
media_type: None,
ap_type: None,
content: None,
summary: None,
actor: None,
attributed_to: None,
to: None,
cc: None,
bto: None,
bcc: None,
};
let update = UpdateOwnedApObject {
name: Some("some_name".to_string()),
content: Some("some_content".to_string()),
summary: Some("some_summary".to_string()),
owner_data: None,
};
let updated_ap_object = update_ap_object(ap_object, update);
assert_eq!(updated_ap_object.name, Some("some_name".to_string()));
assert_eq!(updated_ap_object.content, Some("some_content".to_string()));
assert_eq!(updated_ap_object.summary, Some("some_summary".to_string()));
}
#[test]
#[allow(non_snake_case)]
fn GIVEN_an_ap_object_with_some_parts_WHEN_updated_THEN_update_parts_are_updated() {
let ap_object = ApObject {
name: Some("name".to_string()),
id: None,
url: None,
media_type: None,
ap_type: None,
content: Some("content".to_string()),
summary: Some("summary".to_string()),
actor: None,
attributed_to: None,
to: None,
cc: None,
bto: None,
bcc: None,
};
let update = UpdateOwnedApObject {
name: Some("new_name".to_string()),
content: Some("new_content".to_string()),
summary: Some("new_summary".to_string()),
owner_data: None,
};
let updated_ap_object = update_ap_object(ap_object, update);
assert_eq!(updated_ap_object.name, Some("new_name".to_string()));
assert_eq!(updated_ap_object.content, Some("new_content".to_string()));
assert_eq!(updated_ap_object.summary, Some("new_summary".to_string()));
}
#[test]
#[allow(non_snake_case)]
fn GIVEN_an_ap_object_with_some_parts_WHEN_updated_with_none_parts_THEN_update_parts_are_not_changed(
) {
let ap_object = ApObject {
name: Some("name".to_string()),
id: None,
url: None,
media_type: None,
ap_type: None,
content: Some("content".to_string()),
summary: Some("summary".to_string()),
actor: None,
attributed_to: None,
to: None,
cc: None,
bto: None,
bcc: None,
};
let update = UpdateOwnedApObject {
name: None,
content: None,
summary: None,
owner_data: None,
};
let updated_ap_object = update_ap_object(ap_object, update);
assert_eq!(updated_ap_object.name, Some("name".to_string()));
assert_eq!(updated_ap_object.content, Some("content".to_string()));
assert_eq!(updated_ap_object.summary, Some("summary".to_string()));
}
}