use alloc::string::String;
use sentc_crypto_common::content_searchable::{SearchCreateData, SearchCreateDataLight};
use crate::crypto_searchable::{
create_searchable_internally,
prepare_create_searchable_internally,
prepare_create_searchable_light_internally,
search_internally,
};
use crate::entities::keys::HmacKeyFormatInt;
use crate::SdkError;
pub fn create_searchable(
key: &HmacKeyFormatInt,
item_ref: &str,
category: Option<&str>,
data: &str,
full: bool,
limit: Option<usize>,
) -> Result<String, SdkError>
{
create_searchable_internally(key, item_ref, category, data, full, limit)
}
pub fn prepare_create_searchable(
key: &HmacKeyFormatInt,
item_ref: &str,
category: Option<&str>,
data: &str,
full: bool,
limit: Option<usize>,
) -> Result<SearchCreateData, SdkError>
{
prepare_create_searchable_internally(key, item_ref, category, data, full, limit)
}
pub fn prepare_create_searchable_light(
key: &HmacKeyFormatInt,
data: &str,
full: bool,
limit: Option<usize>,
) -> Result<SearchCreateDataLight, SdkError>
{
prepare_create_searchable_light_internally(key, data, full, limit)
}
pub fn search(key: &HmacKeyFormatInt, data: &str) -> Result<String, SdkError>
{
search_internally(key, data)
}
#[cfg(test)]
mod test
{
use sentc_crypto_common::content_searchable::SearchCreateData;
use super::*;
use crate::group::test_fn::create_group;
use crate::user::test_fn::create_user;
#[test]
fn test_create_full_searchable_item()
{
let user = create_user();
let (_, _, _, hmac_keys) = create_group(&user.user_keys[0]);
let hmac_key = &hmac_keys[0];
let text = "123*+^êéèüöß@€&$ 👍 🚀 😎";
let string = create_searchable(hmac_key, "bla", None, text, true, None).unwrap();
let out: SearchCreateData = serde_json::from_str(&string).unwrap();
assert_eq!(out.hashes.len(), 1);
}
#[test]
fn test_create_searchable_item()
{
let user = create_user();
let (_, _, _, hmac_keys) = create_group(&user.user_keys[0]);
let hmac_key = &hmac_keys[0];
let text = "123*+^êéèüöß@€&$ 👍 🚀 😎";
let string = create_searchable(hmac_key, "bla", None, text, false, None).unwrap();
let out: SearchCreateData = serde_json::from_str(&string).unwrap();
assert_eq!(out.hashes.len(), 39);
}
#[test]
fn test_searchable_full_item()
{
let user = create_user();
let (_, _, _, hmac_keys) = create_group(&user.user_keys[0]);
let hmac_key = &hmac_keys[0];
let text = "123*+^êéèüöß@€&$ 👍 🚀 😎";
let string = create_searchable(hmac_key, "bla", None, text, true, None).unwrap();
let out: SearchCreateData = serde_json::from_str(&string).unwrap();
assert_eq!(out.hashes.len(), 1);
let search_str = search(hmac_key, "123").unwrap();
assert!(!out.hashes.contains(&search_str));
let search_str = search(hmac_key, "123*+^êéèüöß@€&$ 👍 🚀 😎").unwrap();
assert!(out.hashes.contains(&search_str));
}
#[test]
fn test_searchable_item()
{
let user = create_user();
let (_, _, _, hmac_keys) = create_group(&user.user_keys[0]);
let hmac_key = &hmac_keys[0];
let text = "123*+^êéèüöß@€&$ 👍 🚀 😎";
let string = create_searchable(hmac_key, "bla", None, text, false, None).unwrap();
let out: SearchCreateData = serde_json::from_str(&string).unwrap();
assert_eq!(out.hashes.len(), 39);
let search_str = search(hmac_key, "123").unwrap();
assert!(out.hashes.contains(&search_str));
}
#[test]
fn test_not_create_same_output_with_different_hmac_keys()
{
let user = create_user();
let (_, _, _, hmac_keys) = create_group(&user.user_keys[0]);
let hmac_key = &hmac_keys[0];
let (_, _, _, hmac_keys2) = create_group(&user.user_keys[0]);
let hmac_key2 = &hmac_keys2[0];
let text = "123*+^êéèüöß@€&$ 👍 🚀 😎";
let string = create_searchable(hmac_key, "bla", None, text, false, None).unwrap();
let out: SearchCreateData = serde_json::from_str(&string).unwrap();
let search_str = search(hmac_key, "123").unwrap();
let search_str2 = search(hmac_key2, "123").unwrap();
assert_ne!(search_str, search_str2);
assert!(out.hashes.contains(&search_str));
assert!(!out.hashes.contains(&search_str2));
}
}