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:
devplant 2022-04-19 12:45:34 +03:00
parent 4c1fd58d5f
commit 83d8f60dd2
2 changed files with 118 additions and 10 deletions

View File

@ -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) {

View File

@ -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")