diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java index 1ee082376..5e566698c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java @@ -105,6 +105,9 @@ public class ManualRedactionService { var dossierEntity = dossierPersistenceService.getAndValidateDossier(dossierId); for (AddRedactionRequest addRedactionRequest : requests) { + + validateRequest(addRedactionRequest); + manualRedactionDictionaryUpdateHandler.validateDictionariesForAdd(addRedactionRequest, addRedactionRequest.getValue()); validatePositions(fileId, addRedactionRequest); @@ -140,6 +143,14 @@ public class ManualRedactionService { } + private void validateRequest(AddRedactionRequest addRedactionRequest) { + + if (addRedactionRequest.getValue().length() > 4000) { + throw new BadRequestException("Redaction value can not exceed 4000 characters"); + } + } + + private Set convertEntriesToAdd(List source) { return source.stream() 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 ca8f11c02..2d0e085b9 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 @@ -5,6 +5,7 @@ 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; @@ -16,6 +17,7 @@ import java.util.List; import java.util.Set; import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -47,6 +49,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog 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.Rectangle; 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; @@ -2308,4 +2311,48 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(entryToAdd.getValue(), entityLogEntry.getValue()); } + + @Test + public void testAddRedactionWithOver4000Characters() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", false); + + var entityLogEntry = EntityLogEntry.builder() + .id("annotationId") + .type(type.getType()) + .value("lukeSkywalker") + .dictionaryEntry(true) + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .legalBasis("legal basis") + .positions(List.of(new Position(1, 1, 1, 1, 1))) + .build(); + var entityLog = new EntityLog(1, + 1, + List.of(entityLogEntry), + null, + 0, + 0, + 0, + 0); + fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); + when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); + + var addRedactionRequest = AddRedactionRequestModel.builder() + .value(StringUtils.repeat("a", 4001)) + .addToAllDossiers(false) + .addToDictionary(false) + .type("type") + .reason("reason") + .sourceId("sourceId") + .build(); + + String errorMessage = assertThrows(FeignException.BadRequest.class, () -> manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), Set.of(addRedactionRequest))).getMessage(); + assertTrue(errorMessage.contains("Redaction value can not exceed 4000 characters")); + } + }