From 02052fbb6af16f2d3cf1eb4df8fbae8bc957efe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 3 Nov 2020 20:47:11 +0100 Subject: [PATCH] Fix sponsor companies rule and add corresponding test --- .../service/redaction/v1/model/IdRemoval.java | 2 +- .../service/EntityRedactionServiceTest.java | 48 +++++++++++++++++- .../Minimal Examples/batches_new_line.pdf | Bin 0 -> 33572 bytes 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/batches_new_line.pdf diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/IdRemoval.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/IdRemoval.java index bc11c440..2b7b506d 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/IdRemoval.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/IdRemoval.java @@ -16,4 +16,4 @@ public class IdRemoval { private Status status; private boolean removeFromDictionary; -} +} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java index 6b74cf7d..baa7f11e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionServiceTest.java @@ -55,9 +55,11 @@ public class EntityRedactionServiceTest { private static final String DEFAULT_RULES = loadFromClassPath("drools/rules.drl"); private static final String NAME_CODE = "name"; private static final String ADDRESS_CODE = "address"; + private static final String SPONSOR_CODE = "sponsor"; private static final AtomicLong DICTIONARY_VERSION = new AtomicLong(); private static final AtomicLong RULES_VERSION = new AtomicLong(); + private static final AtomicLong SPONSORS_VERSION = new AtomicLong(); @MockBean private DictionaryClient dictionaryClient; @@ -291,6 +293,39 @@ public class EntityRedactionServiceTest { } + @Test + public void testSponsorInCell() throws IOException { + + String tableRules = "package drools\n" + + "\n" + + "import com.iqser.red.service.redaction.v1.server.redaction.model.Section\n" + + "\n" + + "global Section section\n" + "rule \"11: Redact sponsor company\"\n" + " when\n" + " " + + "Section(searchText.toLowerCase().contains(\"batches produced at\"))\n" + " then\n" + " section" + + ".redactIfPrecededBy(\"batches produced at\", \"sponsor\", 11, \"Redacted because it represents a " + + "sponsor company\", \"Reg (EC) No 1107/2009 Art. 63 (2g)\");\n" + " end"; + when(rulesClient.getVersion()).thenReturn(RULES_VERSION.incrementAndGet()); + when(rulesClient.getRules()).thenReturn(new RulesResponse(tableRules)); + droolsExecutionService.updateRules(); + + ClassPathResource pdfFileResource = new ClassPathResource("files/Minimal Examples/batches_new_line.pdf"); + when(dictionaryClient.getVersion()).thenReturn(SPONSORS_VERSION.incrementAndGet()); + DictionaryResponse dictionaryResponse = DictionaryResponse.builder() + .entries(new ArrayList<>(ResourceLoader.load("dictionaries/sponsor_companies.txt"))) + .build(); + when(dictionaryClient.getDictionaryForType(SPONSOR_CODE)).thenReturn(dictionaryResponse); + try (PDDocument pdDocument = PDDocument.load(pdfFileResource.getInputStream())) { + Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); + entityRedactionService.processDocument(classifiedDoc, null); + assertThat(classifiedDoc.getEntities()).hasSize(1); // one page + assertThat(classifiedDoc.getEntities().get(1).stream() + .filter(entity -> entity.getMatchedRule() == 11) + .count()).isEqualTo(1); + } + + } + + @Test public void headerPropagation() throws IOException { @@ -393,11 +428,22 @@ public class EntityRedactionServiceTest { TypeResponse typeResponse = TypeResponse.builder() .types(Arrays.asList( TypeResult.builder().type(NAME_CODE).hexColor("#ffff00").build(), - TypeResult.builder().type(ADDRESS_CODE).hexColor("#00ffff").build())) + TypeResult.builder().type(ADDRESS_CODE).hexColor("#ff00ff").build(), + TypeResult.builder().type(SPONSOR_CODE).hexColor("#00ffff").build())) .build(); when(dictionaryClient.getVersion()).thenReturn(DICTIONARY_VERSION.incrementAndGet()); when(dictionaryClient.getAllTypes()).thenReturn(typeResponse); + // Default empty return to prevent NPEs + DictionaryResponse dictionaryResponse = DictionaryResponse.builder() + .entries(Collections.emptyList()) + .build(); + when(dictionaryClient.getDictionaryForType(NAME_CODE)).thenReturn(dictionaryResponse); + DictionaryResponse addressResponse = DictionaryResponse.builder() + .entries(Collections.emptyList()) + .build(); + when(dictionaryClient.getDictionaryForType(ADDRESS_CODE)).thenReturn(addressResponse); + Colors colors = new Colors(); colors.setDefaultColor("#acfc00"); colors.setNotRedacted("#cccccc"); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/batches_new_line.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/Minimal Examples/batches_new_line.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d09e278fa91a7212f7196dc48b59aad3362ab179 GIT binary patch literal 33572 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 literal 0 HcmV?d00001