scrub / tests /test_placeholder_validation.py
solidprivacy-nl
Add placeholder validation tests
bb9e758
Raw
History Blame Contribute Delete
3.6 kB
from inspect import signature
from placeholder_validation import (
classify_placeholder,
compute_integrity_token,
is_legacy_placeholder,
validate_robust_placeholder,
)
def _robust(entity="PERSON", counter="0001"):
integrity = compute_integrity_token(entity, counter)
return f"[[SP_{entity}_{counter}_{integrity}]]"
def test_valid_robust_placeholder_is_parsed():
placeholder = _robust("PERSON", "0001")
result = validate_robust_placeholder(placeholder)
assert result.is_valid is True
assert result.kind == "robust"
assert result.entity_type == "PERSON"
assert result.counter == "0001"
assert result.integrity == compute_integrity_token("PERSON", "0001")
assert result.issues == ()
def test_invalid_prefix_is_rejected():
result = classify_placeholder("[[XX_PERSON_0001_ABCD]]")
assert result.is_valid is False
assert result.kind == "malformed_robust"
assert "invalid_prefix" in result.issues
def test_invalid_entity_is_rejected():
result = validate_robust_placeholder("[[SP_person_0001_ABCD]]")
assert result.is_valid is False
assert result.kind == "malformed_robust"
assert "invalid_entity" in result.issues
def test_invalid_counter_is_rejected():
result = validate_robust_placeholder("[[SP_PERSON_001_ABCD]]")
assert result.is_valid is False
assert "invalid_counter" in result.issues
def test_zero_counter_is_rejected():
result = validate_robust_placeholder("[[SP_PERSON_0000_ABCD]]")
assert result.is_valid is False
assert "invalid_counter" in result.issues
def test_invalid_integrity_token_shape_is_rejected():
result = validate_robust_placeholder("[[SP_PERSON_0001_ZZZZ]]")
assert result.is_valid is False
assert "invalid_integrity" in result.issues
def test_integrity_mismatch_is_rejected():
expected = compute_integrity_token("PERSON", "0001")
wrong = "FFFF" if expected != "FFFF" else "0000"
result = validate_robust_placeholder(f"[[SP_PERSON_0001_{wrong}]]")
assert result.is_valid is False
assert result.expected_integrity == expected
assert "integrity_mismatch" in result.issues
def test_legacy_placeholder_is_detected_separately():
result = classify_placeholder("[PERSOON_1]")
assert is_legacy_placeholder("[PERSOON_1]") is True
assert result.kind == "legacy"
assert result.is_valid is True
assert result.entity_type is None
assert result.integrity is None
def test_placeholder_like_malformed_string_is_classified():
result = classify_placeholder("{{SP:PERSON:0001:A7F3}}")
assert result.kind == "unknown_placeholder_like"
assert result.is_valid is False
def test_truncated_robust_placeholder_is_rejected():
result = classify_placeholder("[[SP_PERSON_0001_ABCD]")
assert result.kind == "malformed_robust"
assert result.is_valid is False
assert "missing_closing_double_bracket" in result.issues
def test_ai_mutated_robust_placeholder_is_rejected():
result = classify_placeholder("[[SP PERSON 0001 ABCD]]")
assert result.kind == "malformed_robust"
assert result.is_valid is False
assert "invalid_prefix" in result.issues
def test_integrity_does_not_use_original_sensitive_values():
parameters = signature(compute_integrity_token).parameters
assert "original_value" not in parameters
assert "sensitive_value" not in parameters
token_a = compute_integrity_token("PERSON", "0001")
token_b = compute_integrity_token("PERSON", "0001")
assert token_a == token_b
assert "SYNTHETIC" not in token_a
assert "PERSON" not in token_a