#![cfg(feature = "mask")]
use bento_kit::mask::{
mask_bank_card, mask_email, mask_id_card, mask_name, mask_phone, mask_secret, mask_token,
};
#[test]
fn realistic_log_redaction_chain() {
let phone = "13812345678";
let email = "alice@example.com";
let id = "110101199001011234";
let card = "6225881234567890";
let token = "sk-1234567890abcdef";
let name = "张三丰";
let secret = "vault:AES256:abcXYZ";
let scrubbed = format!(
"name={} phone={} email={} id={} card={} token={} secret={}",
mask_name(name),
mask_phone(phone),
mask_email(email),
mask_id_card(id),
mask_bank_card(card),
mask_token(token),
mask_secret(Some(secret), 3),
);
for sensitive in [phone, email, id, card, token, secret] {
assert!(
!scrubbed.contains(sensitive),
"sensitive value leaked in scrubbed output:\n raw: {sensitive}\n out: {scrubbed}"
);
}
}
#[test]
fn mask_secret_handles_none_and_empty_via_sentinel() {
assert_eq!(mask_secret(None, 3), "<none>");
assert_eq!(mask_secret(Some(""), 3), "<empty>");
}