#![expect(missing_docs, reason = "Test code")]
use data_privacy::simple_redactor::{SimpleRedactor, SimpleRedactorMode};
use data_privacy::{DataClass, Redactor};
const TEST_CLASS_ID: DataClass = DataClass::new("test_taxonomy", "test_class");
const TEST_VALUE: &str = "secret";
fn redact_to_string(redactor: &SimpleRedactor, data_class: &DataClass, value: &str) -> String {
let mut output = String::new();
_ = redactor.redact(data_class, value, &mut output);
output
}
#[test]
fn new_should_create_default_redactor() {
let redactor = SimpleRedactor::new();
assert_eq!(*redactor.mode(), SimpleRedactorMode::Replace('*'));
}
#[test]
fn default_should_be_same_as_new() {
let r1 = SimpleRedactor::new();
let r2 = SimpleRedactor::default();
assert_eq!(r1.mode(), r2.mode());
}
#[test]
fn with_mode_should_set_mode() {
let mode = SimpleRedactorMode::Erase;
let redactor = SimpleRedactor::with_mode(mode.clone());
assert_eq!(*redactor.mode(), mode);
}
#[test]
fn redact_should_erase() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::Erase);
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, "");
}
#[test]
fn redact_should_erase_and_tag() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::EraseAndTag);
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, "<test_taxonomy/test_class:>");
}
#[test]
fn redact_should_passthrough() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::Passthrough);
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, TEST_VALUE);
}
#[test]
fn redact_should_passthrough_and_tag() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::PassthroughAndTag);
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, format!("<{TEST_CLASS_ID}:{TEST_VALUE}>"));
}
#[test]
fn redact_should_replace_with_asterisks() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::Replace('*'));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, "******");
}
#[test]
fn redact_should_replace_with_char() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::Replace('#'));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, "######");
}
#[test]
fn redact_should_replace_and_tag_with_asterisks() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::ReplaceAndTag('*'));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, format!("<{TEST_CLASS_ID}:******>"));
}
#[test]
fn redact_should_replace_and_tag_with_char() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::ReplaceAndTag('#'));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, format!("<{TEST_CLASS_ID}:######>"));
}
#[test]
fn redact_should_insert() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::Insert("replacement".into()));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, "replacement");
}
#[test]
fn redact_should_insert_and_tag() {
let redactor = SimpleRedactor::with_mode(SimpleRedactorMode::InsertAndTag("replacement".into()));
let result = redact_to_string(&redactor, &TEST_CLASS_ID, TEST_VALUE);
assert_eq!(result, format!("<{TEST_CLASS_ID}:replacement>"));
}