From bda756c7fe8bec73f2b55d53e87d9fbef75f05c5 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Wed, 17 Apr 2024 09:09:53 +0200 Subject: [PATCH] RED-8971: Changing Vertebrate Study to 'Yes' has no effect --- .../service/EntityChangeLogService.java | 9 +- .../v1/server/RedactionIntegrationTest.java | 82 ++++++++++++++++++- .../src/test/resources/application.yml | 2 + 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java index f0760105..cdb44c36 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java @@ -49,9 +49,12 @@ public class EntityChangeLogService { EntityLogEntry previousEntity = optionalPreviousEntity.get(); entityLogEntry.getChanges().addAll(previousEntity.getChanges()); - if (!previousEntity.getState().equals(entityLogEntry.getState())) { - ChangeType changeType = calculateChangeType(entityLogEntry.getState(), previousEntity.getState()); - entityLogEntry.getChanges().add(new Change(analysisNumber, changeType, now)); + + if (!previousEntity.equals(entityLogEntry)) { + if(!previousEntity.getState().equals(entityLogEntry.getState())) { + ChangeType changeType = calculateChangeType(entityLogEntry.getState(), previousEntity.getState()); + entityLogEntry.getChanges().add(new Change(analysisNumber, changeType, now)); + } toUpdate.add(entityLogEntry); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index 19a9f921..d12a0886 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -150,7 +150,8 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { public void testFludioxonilDuplicatedImageEntries() { AnalyzeRequest request = prepareStorage("files/Fludioxonil/Fludioxonil_duplicates.pdf", - "files/cv_service_empty_response.json", "files/image_info_fludioxonil_duplicates.json"); + "files/cv_service_empty_response.json", + "files/image_info_fludioxonil_duplicates.json"); analyzeDocumentStructure(LayoutParsingType.REDACT_MANAGER, request); AnalyzeResult result = analyzeService.analyze(request); @@ -1553,6 +1554,85 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { } + @Test + public void testChangeVertebrate() throws IOException { + + String EFSA_SANITISATION_RULES = loadFromClassPath("drools/efsa_sanitisation.drl"); + when(rulesClient.getRules(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.ENTITY)).thenReturn(JSONPrimitive.of(EFSA_SANITISATION_RULES)); + String fileName = "files/new/crafted document.pdf"; + + ClassPathResource responseJson = new ClassPathResource("files/crafted_document.NER_ENTITIES.json"); + storageService.storeObject(TenantContext.getTenantId(), + RedactionStorageService.StorageIdUtils.getStorageId(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.NER_ENTITIES), + responseJson.getInputStream()); + + long start = System.currentTimeMillis(); + AnalyzeRequest request = uploadFileToStorage(fileName); + + FileAttribute vertebrateYes = FileAttribute.builder().id("fileAttributeId").label("Vertebrate Study").placeholder("{fileattributes.vertebrateStudy}").value("Yes").build(); + request.setFileAttributes(List.of(vertebrateYes)); + + analyzeDocumentStructure(LayoutParsingType.REDACT_MANAGER, request); + request.setAnalysisNumber(1); + AnalyzeResult result = analyzeService.analyze(request); + + var entityLog = redactionStorageService.getEntityLog(TEST_DOSSIER_ID, TEST_FILE_ID); + + var listCBI_0_0 = entityLog.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.0")) + .toList(); + + var listCBI_0_1 = entityLog.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.1")) + .toList(); + + FileAttribute vertebrateNo = FileAttribute.builder().id("fileAttributeId").label("Vertebrate Study").placeholder("{fileattributes.vertebrateStudy}").value("No").build(); + request.setFileAttributes(List.of(vertebrateNo)); + + analyzeDocumentStructure(LayoutParsingType.REDACT_MANAGER, request); + request.setAnalysisNumber(2); + result = analyzeService.analyze(request); + + var entityLog2 = redactionStorageService.getEntityLog(TEST_DOSSIER_ID, TEST_FILE_ID); + + var list2CBI_0_0 = entityLog2.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.0")) + .toList(); + + var list2CBI_0_1 = entityLog2.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.1")) + .toList(); + + assertEquals(listCBI_0_0.size(), list2CBI_0_1.size()); + assertEquals(listCBI_0_1.size(), list2CBI_0_0.size()); + + request.setFileAttributes(List.of(vertebrateYes)); + + analyzeDocumentStructure(LayoutParsingType.REDACT_MANAGER, request); + request.setAnalysisNumber(3); + result = analyzeService.analyze(request); + + var entityLog3 = redactionStorageService.getEntityLog(TEST_DOSSIER_ID, TEST_FILE_ID); + + var list3CBI_0_0 = entityLog3.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.0")) + .toList(); + + var list3CBI_0_1 = entityLog3.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getMatchedRule().startsWith("CBI.0.1")) + .toList(); + + assertEquals(list3CBI_0_0.size(), list2CBI_0_1.size()); + assertEquals(list3CBI_0_1.size(), list2CBI_0_0.size()); + } + + private IdRemoval getIdRemoval(String id) { return IdRemoval.builder() diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml b/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml index 8d3e5c72..d3fd3a11 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/application.yml @@ -2,6 +2,8 @@ image-service.url: "http://image-service-v1:8080" persistence-service.url: "http://persistence-service-v1:8080" entity-recognition-service.url: "localhost:8080" +logging.type: ${LOGGING_TYPE:CONSOLE} + ribbon: ConnectTimeout: 600000 ReadTimeout: 600000