v5.1.0: тесты builder(20), extractor(15), scanner(20), replacer(10) — 65 тестов, 0 ошибок
Deploy drhider / validate (push) Waiting to run

This commit is contained in:
2026-07-12 15:31:42 +04:00
parent efaa42dd2e
commit 81bdee6203
5 changed files with 504 additions and 1 deletions
+102
View File
@@ -0,0 +1,102 @@
"""
Тесты replacer.py — apply_replacements.
Запуск: python3 tests/test_replacer.py
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from drhider.replacer import apply_replacements
passed = 0
failed = 0
def check(name, condition):
global passed, failed
if condition:
passed += 1
print(f"{name}")
else:
failed += 1
print(f"{name}")
# ═══════════════════════════════════════════════════════════════
# apply_replacements
# ═══════════════════════════════════════════════════════════════
print("\n=== apply_replacements ===")
# 1. Простая замена
text = "Директор Иванов И.И. подписал"
mapping = {"Иванов И.И.": "Иванов_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("простая замена", result == "Директор Иванов_0001 подписал")
# 2. Длинное before короткого
text = "ИНН 123456789012 и ИНН 1234567890"
mapping = {"ИНН 123456789012": "ИНН_0001", "ИНН 1234567890": "ИНН_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("длинное раньше короткого", "ИНН_0001" in result and "ИНН_0002" in result)
check("12-значный не задет 10-значным", result == "ИНН_0001 и ИНН_0002")
# 3. Границы слова
text = "Email: test@mail.ru написать"
mapping = {"test@mail.ru": "email_0001@fake"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("email заменён", "email_0001@fake" in result)
# 4. Множественные замены
text = "Иванов И.И. и Петров А.С. подписали"
mapping = {"Иванов И.И.": "Иванов_0001", "Петров А.С.": "Петров_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("две замены", "Иванов_0001" in result and "Петров_0002" in result)
# 5. Спецсимволы в ключе
text = 'ООО "Ромашка" заключила'
mapping = {'ООО "Ромашка"': "ООО_Технология_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("кавычки в ключе", "ООО_Технология_0001" in result)
# 6. Кириллица
text = "Москва, ул. Ленина, д. 42"
mapping = {"Москва": "Москва_0001", "Ленина": "Ленина_0015"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("кириллица заменена", "Москва_0001" in result and "Ленина_0015" in result)
# 7. Частичное совпадение не заменяется
text = "Ивановский проспект"
mapping = {"Иванов": "Иванов_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("частичное совпадение — не заменено", result == "Ивановский проспект")
# 8. Пустой mapping
text = "ничего не меняется"
result = apply_replacements(text, {}, [])
check("пустой mapping", result == text)
# 9. Markdown текст
text = "**ООО Ромашка** заключила с **Иванов И.И.**"
mapping = {"ООО Ромашка": "ООО_Технология_0001", "Иванов И.И.": "Иванов_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("Markdown bold сохранён", "**ООО_Технология_0001**" in result)
# ═══════════════════════════════════════════════════════════════
print(f"\n{'='*50}")
print(f"Результат: {passed} OK, {failed} FAIL из {passed + failed}")
if failed > 0:
print("❌ ТЕСТЫ ПРОВАЛЕНЫ")
sys.exit(1)
else:
print("✅ ВСЕ ТЕСТЫ ПРОЙДЕНЫ")