package ru.pdguard; import org.junit.jupiter.api.Test; import ru.pdguard.config.SystemPolicy; import ru.pdguard.core.PayloadStore; import ru.pdguard.core.Pipeline; import ru.pdguard.detect.RuleRegistry; import ru.pdguard.mask.Masker; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertFalse; /** * Нормализация цифровых ПД: находит ИНН/СНИЛС/карту/ОГРН(ИП) в свободной форме, * где жёсткий шаблон ломается на нестандартном разделителе. */ class NormalisedDigitsTest { private final Pipeline pipeline = new Pipeline(new RuleRegistry(), new Masker(), new PayloadStore(30)); private void assertHidden(String text, String secret) { String masked = pipeline.process(text, UUID.randomUUID().toString(), SystemPolicy.DEFAULT); assertFalse(masked.contains(secret), "не замаскировано: «" + secret + "» в ответе «" + masked + "»"); } @Test void masksCardWithDots() { assertHidden("Карта 4111.1111.1111.1111 клиента", "4111.1111.1111.1111"); } @Test void masksCardWithSlashes() { assertHidden("Оплата картой 4111/1111/1111/1111 прошла", "4111/1111/1111/1111"); } @Test void masksCardWithMixedSeparators() { assertHidden("Номер карты 4111-1111 1111.1111 клиента", "4111-1111 1111.1111"); } @Test void masksInnWithDashes() { assertHidden("ИНН: 7703-0123-4550 плательщика", "7703-0123-4550"); } @Test void masksSnilsWithDots() { assertHidden("СНИЛС 112.233.445.95 застрахованного", "112.233.445.95"); } @Test void keepsNumberThatFailsChecksum() { String text = "Заказ 1234 5678 9012 3456 отгружен"; org.junit.jupiter.api.Assertions.assertEquals(text, pipeline.process(text, UUID.randomUUID().toString(), SystemPolicy.DEFAULT)); } }