"""PII-read audit emission (YPMS-specific framework addition).""" from __future__ import annotations from sqlalchemy.orm import Session from ypms.audit.models import AuditLog from ypms.framework.pii_audit import PII_READ_ACTION, emit_pii_read from ypms.users.models import User def test_emit_pii_read_records_expected_row(db: Session) -> None: actor = User(username="reader", email="r@example.com", password_hash="x") db.add(actor) db.flush() emit_pii_read(db, actor=actor, entity="Registrant", entity_id=42, ip="10.0.0.1") row = db.query(AuditLog).one() assert row.action == PII_READ_ACTION assert row.entity == "Registrant" assert row.entity_id == 42 assert row.actor_id == actor.id assert row.actor_username == "reader" assert row.ip == "10.0.0.1" assert row.before is None assert row.after is None def test_emit_pii_read_allows_anonymous(db: Session) -> None: emit_pii_read(db, actor=None, entity="Registrant", entity_id=99) row = db.query(AuditLog).one() assert row.actor_id is None assert row.actor_username is None assert row.entity_id == 99