use mdk_storage_traits::GroupId;
use mdk_storage_traits::groups::GroupStorage;
use mdk_storage_traits::welcomes::WelcomeStorage;
use nostr::EventId;
use mdk_storage_traits::test_utils::cross_storage::{
create_test_group, create_test_processed_welcome, create_test_welcome,
};
pub fn test_save_and_find_welcome<S>(storage: S)
where
S: WelcomeStorage + GroupStorage,
{
let mls_group_id = GroupId::from_slice(&[1, 2, 3, 13]);
let group = create_test_group(mls_group_id.clone());
storage.save_group(group).unwrap();
let event_id = EventId::all_zeros();
let welcome = create_test_welcome(mls_group_id.clone(), event_id);
storage.save_welcome(welcome.clone()).unwrap();
let found_welcome = storage.find_welcome_by_event_id(&event_id).unwrap();
assert!(found_welcome.is_some());
let found_welcome = found_welcome.unwrap();
assert_eq!(found_welcome.id, welcome.id);
assert_eq!(found_welcome.group_name, welcome.group_name);
assert_eq!(found_welcome.mls_group_id, welcome.mls_group_id);
let non_existent_id =
EventId::from_hex("abababababababababababababababababababababababababababababababab")
.unwrap();
let result = storage.find_welcome_by_event_id(&non_existent_id).unwrap();
assert!(result.is_none());
let pending = storage.pending_welcomes(None).unwrap();
assert_eq!(pending.len(), 1);
assert_eq!(pending[0].id, event_id);
}
pub fn test_processed_welcome<S>(storage: S)
where
S: WelcomeStorage,
{
let wrapper_event_id = EventId::all_zeros();
let welcome_event_id =
EventId::from_hex("1111111111111111111111111111111111111111111111111111111111111111")
.unwrap();
let processed_welcome = create_test_processed_welcome(wrapper_event_id, Some(welcome_event_id));
storage
.save_processed_welcome(processed_welcome.clone())
.unwrap();
let found = storage
.find_processed_welcome_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.welcome_event_id, Some(welcome_event_id));
let non_existent_id =
EventId::from_hex("abababababababababababababababababababababababababababababababab")
.unwrap();
let result = storage
.find_processed_welcome_by_event_id(&non_existent_id)
.unwrap();
assert!(result.is_none());
}