#![cfg(feature = "compile-governance")]
use sz_orm_core::governance::{compliance_report, with_retention, GovernedModel};
#[allow(dead_code)] #[derive(sz_orm_macros::Governed)]
struct User {
id: i64,
#[pii]
#[mask(strategy = "partial")]
email: String,
#[pii]
#[mask(strategy = "hash")]
phone: String,
name: String, }
#[allow(dead_code)]
#[derive(sz_orm_macros::Governed)]
struct AuditLog {
id: i64,
action: String,
}
#[test]
fn derive_generates_pii_fields() {
let fields = User::pii_fields();
assert_eq!(fields, vec![("email", "partial"), ("phone", "hash")]);
}
#[test]
fn derive_generates_empty_for_no_pii() {
assert!(AuditLog::pii_fields().is_empty());
}
#[test]
fn compliance_report_integration() {
let report = with_retention(
compliance_report(&[User::pii_fields(), AuditLog::pii_fields()]),
730,
);
assert_eq!(report.pii_field_count(), 2);
assert_eq!(report.retention_days, Some(730));
let json = report.to_json().expect("serialize");
assert!(json.contains("\"field\": \"email\""));
assert!(json.contains("\"strategy\": \"hash\""));
}