use mdk_storage_traits::GroupId;
use mdk_storage_traits::groups::GroupStorage;
use mdk_storage_traits::messages::MessageStorage;
use nostr::EventId;
use mdk_storage_traits::test_utils::cross_storage::{
create_test_group, create_test_message, create_test_processed_message,
};
pub fn test_save_and_find_message<S>(storage: S)
where
S: MessageStorage + GroupStorage,
{
let mls_group_id = GroupId::from_slice(&[1, 2, 3, 12]);
let group = create_test_group(mls_group_id.clone());
storage.save_group(group).unwrap();
let event_id = EventId::all_zeros();
let message = create_test_message(mls_group_id.clone(), event_id);
storage.save_message(message.clone()).unwrap();
let found_message = storage
.find_message_by_event_id(&mls_group_id, &event_id)
.unwrap();
assert!(found_message.is_some());
let found_message = found_message.unwrap();
assert_eq!(found_message.id, message.id);
assert_eq!(found_message.content, message.content);
assert_eq!(found_message.mls_group_id, message.mls_group_id);
let non_existent_id =
EventId::from_hex("abababababababababababababababababababababababababababababababab")
.unwrap();
let result = storage
.find_message_by_event_id(&mls_group_id, &non_existent_id)
.unwrap();
assert!(result.is_none());
}
pub fn test_processed_message<S>(storage: S)
where
S: MessageStorage,
{
let wrapper_event_id = EventId::all_zeros();
let message_event_id =
EventId::from_hex("1111111111111111111111111111111111111111111111111111111111111111")
.unwrap();
let processed_message = create_test_processed_message(wrapper_event_id, Some(message_event_id));
storage
.save_processed_message(processed_message.clone())
.unwrap();
let found = storage
.find_processed_message_by_event_id(&wrapper_event_id)
.unwrap();
assert!(found.is_some());
let found = found.unwrap();
assert_eq!(found.wrapper_event_id, wrapper_event_id);
assert_eq!(found.message_event_id, Some(message_event_id));
let non_existent_id =
EventId::from_hex("abababababababababababababababababababababababababababababababab")
.unwrap();
let result = storage
.find_processed_message_by_event_id(&non_existent_id)
.unwrap();
assert!(result.is_none());
}