Spaces:
Sleeping
Sleeping
| 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 | |