From 54dbd1cdffc471542237453e1dd233395603244f Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Wed, 10 Jul 2024 13:16:03 +0300 Subject: [PATCH 1/2] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - bp - special case when removing local add (and other local changes to this add annotation) annotations to set the state to REMOVED instead of IGNORED. - unit tests done --- .../service/EntityLogMergeService.java | 5 + .../integration/tests/EntityLogMergeTest.java | 129 ++++++++++++++++++ 2 files changed, 134 insertions(+) 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 6aad3f7c5..a99665a0f 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 @@ -13,6 +13,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -339,6 +340,10 @@ public class EntityLogMergeService { public void mergeIdToRemove(IdRemoval idRemoval, EntityLogEntry entityLogEntry, int analysisNumber) { entityLogEntry.setState(EntryState.IGNORED); + //special case, only for local add, other local changes and then remove + if (!entityLogEntry.getEngines().isEmpty() && Set.of(Engine.MANUAL).containsAll(entityLogEntry.getEngines())) { + entityLogEntry.setState(EntryState.REMOVED); + } entityLogEntry.getEngines().add(Engine.MANUAL); addChanges(entityLogEntry.getChanges(), ChangeType.REMOVED, analysisNumber, idRemoval.getRequestDate()); entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(idRemoval)); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java index b69cd69bf..926262206 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java @@ -61,6 +61,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.Ent @ExtendWith(SpringExtension.class) public class EntityLogMergeTest { + final String FILE_ID = "fileId"; @MockBean private FileStatusService fileStatusService; @@ -293,6 +294,13 @@ public class EntityLogMergeTest { .findFirst(); assertTrue(optionalForceRedactionEntryLogEntry.isPresent()); assertEquals(EntryState.APPLIED, optionalForceRedactionEntryLogEntry.get().getState()); + + var optionalRemovedEntryLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToRemoveId)) + .findFirst(); + assertTrue(optionalRemovedEntryLogEntry.isPresent()); + assertEquals(EntryState.IGNORED, optionalRemovedEntryLogEntry.get().getState()); } @@ -346,6 +354,93 @@ public class EntityLogMergeTest { .get(index + 1).getState(), EntryState.PENDING); } + @Test + public void testMergeEntityLogWithManualAddAndRemoveChanges() { + + String dossierId = "dossierId"; + String dossierTemplateId = "dossierTemplateId"; + + String entryToRemoveId = UUID.randomUUID().toString(); + String dictEntryToResizeId = UUID.randomUUID().toString(); + String entryLegalBasisId = UUID.randomUUID().toString(); + String forceRedactionId = UUID.randomUUID().toString(); + + String localId = UUID.randomUUID().toString(); + + ManualRedactions manualRedactions = ManualRedactions.builder() + .entriesToAdd(Set.of(provideManualAdd(localId, "Darth Vader"))) + .idsToRemove(Set.of(IdRemoval.builder().annotationId(localId).requestDate(OffsetDateTime.now()).user("user").fileId(FILE_ID).build())) + .build(); + + var entityLog = provideEntityLog(entryToRemoveId, dictEntryToResizeId, entryLegalBasisId, forceRedactionId, true); + + when(manualRedactionProviderService.getManualRedactions(any(), any())).thenReturn(manualRedactions); + when(fileStatusService.getStatus(FILE_ID)).thenReturn(FileModel.builder().excluded(false).dossierStatusId(dossierTemplateId).id(FILE_ID).build()); + when(fileManagementStorageService.getEntityLog(dossierId, FILE_ID)).thenReturn(entityLog); + when(dossierService.getDossierById(dossierId)).thenReturn(DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); + when(dictionaryPersistenceService.getType(anyString())).thenReturn(TypeEntity.builder().isHint(false).build()); + when(fileStatusPersistenceService.getStatus(FILE_ID)).thenReturn(FileEntity.builder().id(FILE_ID).fileAttributes(Collections.emptyList()).build()); + when(fileStatusService.convertAttributes(any(), anyString())).thenReturn(Collections.emptyList()); + + EntityLog response = entityLogMergeService.mergeEntityLog(manualRedactions, entityLog, DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); + + assertNotNull(response); + assertFalse(response.getEntityLogEntry().isEmpty()); + + var optionalEntityLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getId().equals(localId)) + .findFirst(); + assertTrue(optionalEntityLogEntry.isPresent()); + assertEquals(EntryType.ENTITY, optionalEntityLogEntry.get().getEntryType()); + assertEquals(EntryState.REMOVED, optionalEntityLogEntry.get().getState()); + + } + + @Test + public void testMergeEntityLogWithManualAddAndResizeAndRemoveChanges() { + + String dossierId = "dossierId"; + String dossierTemplateId = "dossierTemplateId"; + + String entryToRemoveId = UUID.randomUUID().toString(); + String dictEntryToResizeId = UUID.randomUUID().toString(); + String entryLegalBasisId = UUID.randomUUID().toString(); + String forceRedactionId = UUID.randomUUID().toString(); + + String localId = UUID.randomUUID().toString(); + + ManualRedactions manualRedactions = ManualRedactions.builder() + .entriesToAdd(Set.of(provideManualAdd(localId, "Darth Vader"))) + .resizeRedactions(Set.of(provideManualResize(localId, "Darth", dictEntryToResizeId))) + .idsToRemove(Set.of(IdRemoval.builder().annotationId(localId).requestDate(OffsetDateTime.now()).user("user").fileId(FILE_ID).build())) + .build(); + + var entityLog = provideEntityLog(entryToRemoveId, dictEntryToResizeId, entryLegalBasisId, forceRedactionId, true); + + when(manualRedactionProviderService.getManualRedactions(any(), any())).thenReturn(manualRedactions); + when(fileStatusService.getStatus(FILE_ID)).thenReturn(FileModel.builder().excluded(false).dossierStatusId(dossierTemplateId).id(FILE_ID).build()); + when(fileManagementStorageService.getEntityLog(dossierId, FILE_ID)).thenReturn(entityLog); + when(dossierService.getDossierById(dossierId)).thenReturn(DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); + when(dictionaryPersistenceService.getType(anyString())).thenReturn(TypeEntity.builder().isHint(false).build()); + when(fileStatusPersistenceService.getStatus(FILE_ID)).thenReturn(FileEntity.builder().id(FILE_ID).fileAttributes(Collections.emptyList()).build()); + when(fileStatusService.convertAttributes(any(), anyString())).thenReturn(Collections.emptyList()); + + EntityLog response = entityLogMergeService.mergeEntityLog(manualRedactions, entityLog, DossierEntity.builder().dossierTemplateId(dossierTemplateId).build()); + + assertNotNull(response); + assertFalse(response.getEntityLogEntry().isEmpty()); + + var optionalEntityLogEntry = response.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getId().equals(localId)) + .findFirst(); + assertTrue(optionalEntityLogEntry.isPresent()); + assertEquals(EntryType.ENTITY, optionalEntityLogEntry.get().getEntryType()); + assertEquals(EntryState.REMOVED, optionalEntityLogEntry.get().getState()); + + } + private EntityLog provideEntityLog(String entryToRemoveId, String entryToResizeId, String entryLegalBasisId, String forceRedactionId, boolean dictEntry) { @@ -468,5 +563,39 @@ public class EntityLogMergeTest { .build(); } + private ManualRedactionEntry provideManualAdd(String entryToAddId, String valueToAdd) { + return ManualRedactionEntry.builder() + .positions(List.of(new Rectangle(1f, 2f, 3f, 4f, 1))) + .annotationId(entryToAddId) + .value(valueToAdd) + .reason("Reason") + .addToDictionary(false) + .addToDossierDictionary(false) + .fileId(FILE_ID) + .rectangle(false) + .requestDate(OffsetDateTime.now()) + .dictionaryEntryType(DictionaryEntryType.ENTRY) + .type("manual") + .user("User") + .build(); + } + + private ManualResizeRedaction provideManualResize(String entryToResizeId, String resizedValue, String dictId) { + List positions = new ArrayList<>(); + positions.add(new Rectangle(2, 2, 2, 2, 1)); + return ManualResizeRedaction.builder() + .fileId(FILE_ID) + .value(resizedValue) + .annotationId(entryToResizeId) + .positions(positions) + .requestDate(OffsetDateTime.now()) + .updateDictionary(false) + .addToAllDossiers(false) + .user("User") + .fileId("file") + .build(); + } + + } -- 2.47.2 From bf6ec0897ab07dbdd0ff23250dae0bf899d864d7 Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Wed, 10 Jul 2024 13:18:44 +0300 Subject: [PATCH 2/2] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - bp - fix sonar issues --- .../v1/server/integration/tests/EntityLogMergeTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java index 926262206..66b9a9d86 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMergeTest.java @@ -355,7 +355,7 @@ public class EntityLogMergeTest { } @Test - public void testMergeEntityLogWithManualAddAndRemoveChanges() { + void testMergeEntityLogWithManualAddAndRemoveChanges() { String dossierId = "dossierId"; String dossierTemplateId = "dossierTemplateId"; @@ -398,7 +398,7 @@ public class EntityLogMergeTest { } @Test - public void testMergeEntityLogWithManualAddAndResizeAndRemoveChanges() { + void testMergeEntityLogWithManualAddAndResizeAndRemoveChanges() { String dossierId = "dossierId"; String dossierTemplateId = "dossierTemplateId"; -- 2.47.2