From 369cc6340a51b557b69f71b24c0f83ad74067939 Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Tue, 9 Jul 2024 12:52:49 +0300 Subject: [PATCH 1/4] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - 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 | 131 +++++++++++++++++- 2 files changed, 135 insertions(+), 1 deletion(-) 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 4a3ce2998..18099ab4b 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; @@ -349,6 +350,10 @@ public class EntityLogMergeService { addChanges(entityLogEntry, changes); entityLogEntry.setState(EntryState.IGNORED); + //special case, only for add local and remove only + if (!entityLogEntry.getEngines().isEmpty() && Set.of(Engine.MANUAL).containsAll(entityLogEntry.getEngines())) { + entityLogEntry.setState(EntryState.REMOVED); + } entityLogEntry.getEngines().add(Engine.MANUAL); entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(idRemoval, 0)); } 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 3f97bd414..9c665a034 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,7 +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; @@ -317,6 +317,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()); } @@ -371,6 +378,94 @@ 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 entryToRecategorizeId = 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, entryToRecategorizeId, 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 entryToRecategorizeId = 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, entryToRecategorizeId, 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, String entryToRecategorizeId, boolean dictEntry) { @@ -513,5 +608,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") + .basedOnDictAnnotationId(dictId) + .build(); + } + } -- 2.47.2 From 531524be1e322e073301b5613ddac52c60ca5008 Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Tue, 9 Jul 2024 12:55:30 +0300 Subject: [PATCH 2/4] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - removed special character from tests --- .../v1/server/integration/tests/EntityLogMergeTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9c665a034..b28548f54 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 @@ -427,7 +427,7 @@ public class EntityLogMergeTest { String dossierId = "dossierId"; String dossierTemplateId = "dossierTemplateId"; -¬ + String entryToRemoveId = UUID.randomUUID().toString(); String dictEntryToResizeId = UUID.randomUUID().toString(); String entryLegalBasisId = UUID.randomUUID().toString(); -- 2.47.2 From a0eee59cedbf10d35ac4678332cfe78c1682aa18 Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Wed, 10 Jul 2024 12:53:16 +0300 Subject: [PATCH 3/4] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - update unit test --- .../v1/server/integration/tests/EntityLogMergeTest.java | 1 - 1 file changed, 1 deletion(-) 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 b28548f54..762670e16 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 @@ -638,7 +638,6 @@ public class EntityLogMergeTest { .addToAllDossiers(false) .user("User") .fileId("file") - .basedOnDictAnnotationId(dictId) .build(); } -- 2.47.2 From e631281156ec2fb5de824c8bd5cdaf591994ac3f Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Wed, 10 Jul 2024 13:19:42 +0300 Subject: [PATCH 4/4] RED-9515 - When locally added annotations are locally removed while auto-analysis is off, its skipped - 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 762670e16..3e24ecb59 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 @@ -379,7 +379,7 @@ public class EntityLogMergeTest { } @Test - public void testMergeEntityLogWithManualAddAndRemoveChanges() { + void testMergeEntityLogWithManualAddAndRemoveChanges() { String dossierId = "dossierId"; String dossierTemplateId = "dossierTemplateId"; @@ -423,7 +423,7 @@ public class EntityLogMergeTest { } @Test - public void testMergeEntityLogWithManualAddAndResizeAndRemoveChanges() { + void testMergeEntityLogWithManualAddAndResizeAndRemoveChanges() { String dossierId = "dossierId"; String dossierTemplateId = "dossierTemplateId"; -- 2.47.2