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.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; /** Документы, удостоверяющие личность, помимо паспорта РФ. */ class IdentityDocumentTest { private final Pipeline pipeline = new Pipeline(new RuleRegistry(), new Masker(), new PayloadStore(1_000_000L, 30)); private void assertHidden(String text, String secret) { String masked = pipeline.process(text, UUID.randomUUID().toString(), SystemPolicy.DEFAULT); assertFalse(masked.contains(secret), "не замаскировано: «" + secret + "» в ответе «" + masked + "»"); } private void assertMasked(String text, String payloadId, String expected) { assertEquals(expected, pipeline.process(text, payloadId, SystemPolicy.DEFAULT)); } @Test void masksForeignPassport() { assertHidden("Загранпаспорт 75 1234567 действителен до 2030 года", "75 1234567"); } @Test void masksMilitaryId() { assertHidden("Военный билет АБ 1234567 предъявлен", "АБ 1234567"); } @Test void masksBirthCertificate() { assertHidden("Свидетельство о рождении II-МЮ № 123456", "II-МЮ № 123456"); } @Test void masksMedicalPolicy() { assertHidden("Полис ОМС 1234567890123456 оформлен", "1234567890123456"); } /** * У загранпаспорта, военного билета и свидетельства о рождении серия короткая — * две цифры или две буквы. Открой маска первые два знака, серия была бы видна * целиком, поэтому у этих документов открыты только последние знаки номера. */ @Test void hidesShortDocumentSeriesCompletely() { assertMasked("Загранпаспорт 75 1234567", "fp-1", "Загранпаспорт ** *****67"); assertMasked("Военный билет АБ 1234567", "mil-1", "Военный билет ** *****67"); assertMasked("Свидетельство о рождении II-МЮ № 123456", "bc-1", "Свидетельство о рождении **-** № ****56"); } /** У паспорта РФ и водительского удостоверения серия из четырёх знаков — открыта половина. */ @Test void keepsHalfOfFourCharacterSeries() { assertMasked("Паспорт 4509 123456", "rf-1", "Паспорт 45** ****56"); assertMasked("Водительское удостоверение 9902 123456", "dl-1", "Водительское удостоверение 99** ****56"); } }