81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Tests de non-regression pour le contrat des regles d'administration.
|
|
"""
|
|
from pathlib import Path
|
|
|
|
from admin_rules import (
|
|
generate_rule_variants,
|
|
load_effective_admin_rules_dict,
|
|
validate_rules_config,
|
|
)
|
|
|
|
|
|
def test_default_admin_rules_template_is_valid():
|
|
path = Path("config/admin_rules.default.yml")
|
|
|
|
data = load_effective_admin_rules_dict(path)
|
|
errors = validate_rules_config(data)
|
|
|
|
assert errors == []
|
|
|
|
|
|
def test_normalized_identifier_variants_cover_requested_forms():
|
|
rule = {
|
|
"type": "normalized_identifier",
|
|
"match": {
|
|
"canonical_value": "1234567",
|
|
},
|
|
"normalization": {
|
|
"allow_bare_value": True,
|
|
"multiline": True,
|
|
"accepted_prefixes": ["N°", "No"],
|
|
"prefix_value_separators": ["", " "],
|
|
},
|
|
}
|
|
|
|
variants = generate_rule_variants(rule, limit=20)
|
|
|
|
assert "1234567" in variants
|
|
assert "N°1234567" in variants
|
|
assert "N° 1234567" in variants
|
|
assert "No1234567" in variants
|
|
assert "No 1234567" in variants
|
|
|
|
|
|
def test_preserve_phrase_must_use_preserve_action():
|
|
data = {
|
|
"version": 1,
|
|
"rules": [
|
|
{
|
|
"id": "rule_bad_preserve",
|
|
"label": "Bad preserve",
|
|
"type": "preserve_phrase",
|
|
"action": "mask",
|
|
"status": "draft",
|
|
"match": {
|
|
"exact_value": "classification internationale",
|
|
},
|
|
"scope": {
|
|
"document_families": ["all"],
|
|
"environments": ["test"],
|
|
"sections": ["narrative"],
|
|
},
|
|
"governance": {
|
|
"owner": "qualite",
|
|
"justification": "test de contrat",
|
|
"created_at": "2026-04-21",
|
|
"review_required_for_activation": True,
|
|
"approved_by": None,
|
|
"tests": {
|
|
"required_case_ids": ["006_whitelist_phrases_preserved"],
|
|
},
|
|
},
|
|
}
|
|
],
|
|
}
|
|
|
|
errors = validate_rules_config(data)
|
|
|
|
assert any("preserve_phrase" in error for error in errors)
|