RED-3851-Reject redactions on invalid pages
- validate the page number against the number of pages of a file - update junit tests
This commit is contained in:
parent
4c1fd58d5f
commit
83d8f60dd2
@ -15,6 +15,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -49,16 +50,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.LegalBasisChangePersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.LegalBasisChangePersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RemoveRedactionPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RemoveRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddRedactionRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.CommentRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ForceRedactionRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImageRecategorizationRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.LegalBasisChangeRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualAddResponse;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ResizeRedactionRequest;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualRedactionEntry;
|
import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualRedactionEntry;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualResizeRedaction;
|
import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualResizeRedaction;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||||
@ -111,6 +102,7 @@ public class ManualRedactionService {
|
|||||||
validateDictionary(addRedactionRequest);
|
validateDictionary(addRedactionRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validatePositions(fileId, addRedactionRequest);
|
||||||
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString();
|
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString();
|
||||||
addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest);
|
addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest);
|
||||||
|
|
||||||
@ -155,6 +147,11 @@ public class ManualRedactionService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validatePositions(String fileId, AddRedactionRequest addRedactionRequest) {
|
||||||
|
var numberOfPages = fileStatusService.getStatus(fileId).getNumberOfPages();
|
||||||
|
addRedactionRequest.getPositions().stream().filter(p -> p.getPage() > numberOfPages).findAny()
|
||||||
|
.ifPresent((p) -> new BadRequestException("Invalid page found in the request"));
|
||||||
|
}
|
||||||
|
|
||||||
public List<ManualAddResponse> addRemoveRedaction(String dossierId, String fileId,
|
public List<ManualAddResponse> addRemoveRedaction(String dossierId, String fileId,
|
||||||
List<RemoveRedactionRequest> removeRedactionRequests) {
|
List<RemoveRedactionRequest> removeRedactionRequests) {
|
||||||
|
|||||||
@ -1,15 +1,24 @@
|
|||||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
||||||
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
|
import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||||
|
import com.iqser.red.service.redaction.v1.model.ManualChange;
|
||||||
|
import com.iqser.red.service.redaction.v1.model.ManualRedactionType;
|
||||||
|
import feign.FeignException;
|
||||||
|
import org.assertj.core.util.Lists;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
||||||
@ -51,6 +60,87 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper objectMapper;
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FileClient fileClient;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SneakyThrows
|
||||||
|
public void testManualRedaction3641() {
|
||||||
|
|
||||||
|
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
|
||||||
|
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
|
||||||
|
|
||||||
|
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||||
|
|
||||||
|
var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual");
|
||||||
|
|
||||||
|
var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), Collections.singletonList(AddRedactionRequest.builder()
|
||||||
|
.positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build()))
|
||||||
|
.section("section test")
|
||||||
|
.addToDictionary(false)
|
||||||
|
.addToDossierDictionary(false)
|
||||||
|
.status(AnnotationStatus.REQUESTED)
|
||||||
|
.typeId(type.getId())
|
||||||
|
.user("user")
|
||||||
|
.reason("1")
|
||||||
|
.value("test")
|
||||||
|
.legalBasis("1")
|
||||||
|
.rectangle(true)
|
||||||
|
.textAfter("Text After")
|
||||||
|
.textBefore("Text Before")
|
||||||
|
.sourceId("SourceId")
|
||||||
|
.build())).iterator().next();
|
||||||
|
var loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId());
|
||||||
|
assertThat(loadedAddRedaction.isRectangle()).isEqualTo(true);
|
||||||
|
|
||||||
|
var change = ManualChange.from(loadedAddRedaction)
|
||||||
|
.withManualRedactionType(ManualRedactionType.ADD_LOCALLY);
|
||||||
|
List<ManualChange> changeList = new ArrayList<>();
|
||||||
|
changeList.add(change);
|
||||||
|
|
||||||
|
RedactionLogEntry entry = RedactionLogEntry.builder()
|
||||||
|
.id(loadedAddRedaction.getAnnotationId())
|
||||||
|
.reason(loadedAddRedaction.getReason())
|
||||||
|
.isDictionaryEntry(loadedAddRedaction.isAddToDictionary())
|
||||||
|
.isDossierDictionaryEntry(loadedAddRedaction.isAddToDossierDictionary())
|
||||||
|
.legalBasis(loadedAddRedaction.getLegalBasis())
|
||||||
|
.value(loadedAddRedaction.getValue())
|
||||||
|
.section(loadedAddRedaction.getSection())
|
||||||
|
.type(loadedAddRedaction.getType())
|
||||||
|
.redacted(true)
|
||||||
|
.isHint(false)
|
||||||
|
.sectionNumber(-1)
|
||||||
|
.rectangle(loadedAddRedaction.isRectangle())
|
||||||
|
.manualChanges(changeList)
|
||||||
|
.build();
|
||||||
|
when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, 1,
|
||||||
|
List.of(entry), null, 0, 0, 0, 0));
|
||||||
|
|
||||||
|
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
|
||||||
|
var fileStatus = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||||
|
assertThat(fileStatus.isHasSuggestions()).isTrue();
|
||||||
|
assertThat(fileStatus.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
|
||||||
|
|
||||||
|
changeList.get(0).setAnnotationStatus(AnnotationStatus.DECLINED);
|
||||||
|
entry.setManualChanges(changeList);
|
||||||
|
when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, 1,
|
||||||
|
List.of(entry), null, 0, 0, 0, 0));
|
||||||
|
|
||||||
|
manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(),
|
||||||
|
UpdateRedactionRequest.builder()
|
||||||
|
.annotationIds(List.of(addRedaction.getAnnotationId()))
|
||||||
|
.annotationStatus(AnnotationStatus.DECLINED).build());
|
||||||
|
loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId());
|
||||||
|
assertThat(loadedAddRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED);
|
||||||
|
|
||||||
|
fileStatus = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||||
|
assertThat(fileStatus.isHasSuggestions()).isFalse();
|
||||||
|
|
||||||
|
ManualRedactions manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId());
|
||||||
|
assertThat(manualRedactions.getEntriesToAdd()).isNotEmpty();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@ -71,6 +161,27 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
var loadedComment = manualRedactionClient.getComment(comment.getId());
|
var loadedComment = manualRedactionClient.getComment(comment.getId());
|
||||||
assertThat(loadedComment.getText()).isEqualTo("test");
|
assertThat(loadedComment.getText()).isEqualTo("test");
|
||||||
|
|
||||||
|
try {
|
||||||
|
manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), Collections.singletonList(AddRedactionRequest.builder()
|
||||||
|
.positions(List.of(Rectangle.builder().page(100).topLeftY(1).topLeftX(1).height(1).width(1).build()))
|
||||||
|
.section("section test")
|
||||||
|
.addToDictionary(true)
|
||||||
|
.addToDossierDictionary(false)
|
||||||
|
.status(AnnotationStatus.REQUESTED)
|
||||||
|
.typeId(type.getId())
|
||||||
|
.user("user")
|
||||||
|
.reason("1")
|
||||||
|
.value("test")
|
||||||
|
.legalBasis("1")
|
||||||
|
.rectangle(true)
|
||||||
|
.textAfter("Text After")
|
||||||
|
.textBefore("Text Before")
|
||||||
|
.sourceId("SourceId")
|
||||||
|
.build()));
|
||||||
|
} catch (FeignException e) {
|
||||||
|
assertThat(e.status()).isEqualTo(400);
|
||||||
|
}
|
||||||
|
|
||||||
var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), Collections.singletonList(AddRedactionRequest.builder()
|
var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), Collections.singletonList(AddRedactionRequest.builder()
|
||||||
.positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build()))
|
.positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build()))
|
||||||
.section("section test")
|
.section("section test")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user