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 com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
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.RemoveRedactionPersistenceService;
|
||||
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.ManualResizeRedaction;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
@ -111,6 +102,7 @@ public class ManualRedactionService {
|
||||
validateDictionary(addRedactionRequest);
|
||||
}
|
||||
|
||||
validatePositions(fileId, addRedactionRequest);
|
||||
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString();
|
||||
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,
|
||||
List<RemoveRedactionRequest> removeRedactionRequests) {
|
||||
|
||||
@ -1,15 +1,24 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
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.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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.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.mockito.Mockito;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
||||
@ -51,6 +60,87 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
||||
@Autowired
|
||||
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
|
||||
@SneakyThrows
|
||||
@ -71,6 +161,27 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
||||
var loadedComment = manualRedactionClient.getComment(comment.getId());
|
||||
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()
|
||||
.positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build()))
|
||||
.section("section test")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user