From a271dc9c127404a628043fae36c1ee5f8092cdb3 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 17 Apr 2024 15:14:36 +0200 Subject: [PATCH] RED-8480: small fixes and tests --- .../service/EntityLogMergeService.java | 2 - .../tests/ManualRedactionTest.java | 185 ++++++++++++++++-- .../entitylog/ManualRedactionType.java | 2 +- 3 files changed, 174 insertions(+), 15 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java index 931b33569..b7ed57a53 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java @@ -411,8 +411,6 @@ public class EntityLogMergeService { entityLogEntry.setEntryType(getEntryType(isHint, recategorization.getType())); - entityLogEntry.setState(isHint ? EntryState.SKIPPED : EntryState.APPLIED); // TODO: only set applied if legalBasis is set by recategorization - entityLogEntry.getEngines().add(Engine.MANUAL); if (!Strings.isNullOrEmpty(recategorization.getLegalBasis())) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index 08de10162..80636d82c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -4,12 +4,15 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ty import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -19,6 +22,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.testcontainers.shaded.org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; @@ -42,15 +46,16 @@ import com.iqser.red.service.persistence.management.v1.processor.service.redacti import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary; import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogLegalBasis; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; @@ -148,7 +153,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog); - Assertions.assertThrows(FeignException.Forbidden.class, + assertThrows(FeignException.Forbidden.class, () -> manualRedactionClient.removeRedactionBulk(dossier.getId(), file.getId(), Set.of(RemoveRedactionRequestModel.builder() @@ -173,7 +178,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", true); assertThat(type.isDossierDictionaryOnly()).isTrue(); - Assertions.assertThrows(FeignException.Forbidden.class, () -> + assertThrows(FeignException.Forbidden.class, () -> manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), @@ -905,7 +910,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var redactionRequest2 = RedactionRequest.builder().dossierId(file2.getDossierId()).fileId(file2.getFileId()).dossierTemplateId(file2.getDossierTemplateId()).build(); when(entityLogService.getEntityLog(eq(file2.getDossierId()), eq(file2.getFileId()), any(), anyBoolean())).thenReturn(entityLog2); - // resize redaction in dossier dict var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder() .annotationId(addRedactions.get(1).getAnnotationId()) @@ -1656,7 +1660,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { } - @Test public void testUnprocessedManualRedactionsRecategorizations() { @@ -1807,7 +1810,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog); - manualRedactionClient.legalBasisChangeBulk(dossier.getId(), file.getId(), Set.of(LegalBasisChangeRequestModel.builder().legalBasis("legalBasis").annotationId("AnnotationId").build())); @@ -1959,10 +1961,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThatThrownBy(() -> manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModelLongLegalBasis), false) .get(0)).isInstanceOf(FeignException.class).hasMessageContaining("The legal basis is too long"); - assertEquals("", allManualRedactions.getRecategorizations() - .stream() - .filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3")) - .findFirst().get().getLegalBasis()); + assertEquals("", + allManualRedactions.getRecategorizations() + .stream() + .filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3")) + .findFirst() + .get().getLegalBasis()); } @@ -2114,4 +2118,161 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .anyMatch(entry -> entry.getSection().equals("section"))); } + + @Test + public void testConvertRecategorizeToLegalBasisChange() { + + RecategorizationRequestModel r = RecategorizationRequestModel.builder() + .annotationId("id") + .type("type 1") + .comment("Kommi") + .addToDictionary(false) + .addToAllDossiers(false) + .section("here") + .legalBasis("some legal basis") + .value("val") + .build(); + + LegalBasisChangeRequestModel l = manualRedactionService.convertRecategorizationToLegalBasisChange(r); + + assertEquals(r.getAnnotationId(), l.getAnnotationId()); + assertEquals(r.getComment(), l.getComment()); + assertEquals(r.getLegalBasis(), l.getLegalBasis()); + assertEquals(r.getSection(), l.getSection()); + assertEquals(r.getValue(), l.getValue()); + + } + + + @Test + public void testRecategorizeImageToLogo() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var typeImage = typeProvider.testAndProvideType(dossierTemplate, null, "image", false, 999); + var typeLogo = typeProvider.testAndProvideType(dossierTemplate, null, "logo", false, 1001); + + var entityLogEntry = EntityLogEntry.builder() + .id("annotationId") + .type(typeImage.getType()) + .entryType(EntryType.IMAGE_HINT) + .state(EntryState.SKIPPED) + .value("Image:Other") + .reason("") + .matchedRule("") + .legalBasis("") + .imported(false) + .containingNodeId(List.of(31, 12)) + .closestHeadline("Images: Regular ") + .section("[31]: Section: Images: Regular Images: Formular") + .color(null) + .positions(List.of(new Position(1, 1, 1, 1, 1))) + .textBefore(null) + .textAfter(null) + .startOffset(0) + .endOffset(0) + .imageHasTransparency(false) + .dictionaryEntry(false) + .dossierDictionaryEntry(false) + .excluded(false) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .build(); + var entityLog = new EntityLog(1, + 1, + List.of(entityLogEntry), + List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)", + "desc", + "Article 39(e)(3) of Regulation (EC) No 178/2002"), + new EntityLogLegalBasis("4. commercial information", + "desc 2", + "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")), + 0, + 0, + 0, + 0); + fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); + when(entityLogService.getEntityLog(any(), any(), any(), anyBoolean())).thenReturn(entityLog); + + var recategorizationRequestModel = RecategorizationRequestModel.builder() + .annotationId("annotationId") + .legalBasis("") + .section("[31]: Section: Images: Regular Images: Formular") + .type(typeLogo.getType()) + .value("Image:Other") + .build(); + + var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false); + + System.out.println(resp); + + } + + + @Test + public void testLegalBasisChangeCbiAuthor() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var type = typeProvider.testAndProvideType(dossierTemplate, null, "CBI_author", false); + + var entityLogEntry = EntityLogEntry.builder() + .id("annotationId") + .type(type.getType()) + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .value("Ranya Eikenboom") + .reason("Author found") + .matchedRule("CBI.0.0") + .legalBasis("Article 39(e)(3) of Regulation (EC) No 178/2002") + .imported(false) + .containingNodeId(List.of(1, 1, 1)) + .closestHeadline("CBI.0.0/1: Redact CBI Authors ") + .section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann") + .color(null) + .positions(List.of(new Position(1, 1, 1, 1, 1))) + .textBefore("Ksenia Max Mustermann ") + .textAfter(" Charalampos Schenk") + .startOffset(197) + .endOffset(212) + .imageHasTransparency(false) + .dictionaryEntry(true) + .dossierDictionaryEntry(false) + .excluded(false) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .engines(Set.of(Engine.DICTIONARY)) + .build(); + var entityLog = new EntityLog(1, + 1, + List.of(entityLogEntry), + List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)", + "desc", + "Article 39(e)(3) of Regulation (EC) No 178/2002"), + new EntityLogLegalBasis("4. commercial information", + "desc 2", + "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")), + 0, + 0, + 0, + 0); + fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); + when(entityLogService.getEntityLog(any(), any(), any(), anyBoolean())).thenReturn(entityLog); + + var recategorizationRequestModel = RecategorizationRequestModel.builder() + .annotationId("annotationId") + .legalBasis("Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)") + .section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann") + .type(type.getType()) + .value("Ranya Eikenboom") + .build(); + + var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false); + + System.out.println(resp); + + } + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java index 8e2c5ea7d..715bc511d 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java @@ -18,7 +18,7 @@ public enum ManualRedactionType { FORCE, RECATEGORIZE, RECATEGORIZE_IN_DICTIONARY, - @Deprecated LEGAL_BASIS_CHANGE, + LEGAL_BASIS_CHANGE, RESIZE, RESIZE_IN_DICTIONARY }