RED-8480: small fixes and tests

This commit is contained in:
Ali Oezyetimoglu 2024-04-17 15:14:36 +02:00
parent 0a7108c152
commit a271dc9c12
3 changed files with 174 additions and 15 deletions

View File

@ -411,8 +411,6 @@ public class EntityLogMergeService {
entityLogEntry.setEntryType(getEntryType(isHint, recategorization.getType()));
entityLogEntry.setState(isHint ? EntryState.SKIPPED : EntryState.APPLIED); // TODO: only set applied if legalBasis is set by recategorization
entityLogEntry.getEngines().add(Engine.MANUAL);
if (!Strings.isNullOrEmpty(recategorization.getLegalBasis())) {

View File

@ -4,12 +4,15 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ty
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;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@ -19,6 +22,7 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.testcontainers.shaded.org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
@ -42,15 +46,16 @@ import com.iqser.red.service.persistence.management.v1.processor.service.redacti
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult;
import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary;
import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogLegalBasis;
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.ManualRedactions;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry;
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;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel;
@ -148,7 +153,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
Assertions.assertThrows(FeignException.Forbidden.class,
assertThrows(FeignException.Forbidden.class,
() -> manualRedactionClient.removeRedactionBulk(dossier.getId(),
file.getId(),
Set.of(RemoveRedactionRequestModel.builder()
@ -173,7 +178,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", true);
assertThat(type.isDossierDictionaryOnly()).isTrue();
Assertions.assertThrows(FeignException.Forbidden.class, () ->
assertThrows(FeignException.Forbidden.class, () ->
manualRedactionClient.addRedactionBulk(dossier.getId(),
file.getId(),
@ -905,7 +910,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var redactionRequest2 = RedactionRequest.builder().dossierId(file2.getDossierId()).fileId(file2.getFileId()).dossierTemplateId(file2.getDossierTemplateId()).build();
when(entityLogService.getEntityLog(eq(file2.getDossierId()), eq(file2.getFileId()), any(), anyBoolean())).thenReturn(entityLog2);
// resize redaction in dossier dict
var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder()
.annotationId(addRedactions.get(1).getAnnotationId())
@ -1656,7 +1660,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
}
@Test
public void testUnprocessedManualRedactionsRecategorizations() {
@ -1807,7 +1810,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
manualRedactionClient.legalBasisChangeBulk(dossier.getId(),
file.getId(),
Set.of(LegalBasisChangeRequestModel.builder().legalBasis("legalBasis").annotationId("AnnotationId").build()));
@ -1959,10 +1961,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
assertThatThrownBy(() -> manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModelLongLegalBasis), false)
.get(0)).isInstanceOf(FeignException.class).hasMessageContaining("The legal basis is too long");
assertEquals("", allManualRedactions.getRecategorizations()
.stream()
.filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3"))
.findFirst().get().getLegalBasis());
assertEquals("",
allManualRedactions.getRecategorizations()
.stream()
.filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3"))
.findFirst()
.get().getLegalBasis());
}
@ -2114,4 +2118,161 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.anyMatch(entry -> entry.getSection().equals("section")));
}
@Test
public void testConvertRecategorizeToLegalBasisChange() {
RecategorizationRequestModel r = RecategorizationRequestModel.builder()
.annotationId("id")
.type("type 1")
.comment("Kommi")
.addToDictionary(false)
.addToAllDossiers(false)
.section("here")
.legalBasis("some legal basis")
.value("val")
.build();
LegalBasisChangeRequestModel l = manualRedactionService.convertRecategorizationToLegalBasisChange(r);
assertEquals(r.getAnnotationId(), l.getAnnotationId());
assertEquals(r.getComment(), l.getComment());
assertEquals(r.getLegalBasis(), l.getLegalBasis());
assertEquals(r.getSection(), l.getSection());
assertEquals(r.getValue(), l.getValue());
}
@Test
public void testRecategorizeImageToLogo() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
var file = fileTesterAndProvider.testAndProvideFile(dossier);
var typeImage = typeProvider.testAndProvideType(dossierTemplate, null, "image", false, 999);
var typeLogo = typeProvider.testAndProvideType(dossierTemplate, null, "logo", false, 1001);
var entityLogEntry = EntityLogEntry.builder()
.id("annotationId")
.type(typeImage.getType())
.entryType(EntryType.IMAGE_HINT)
.state(EntryState.SKIPPED)
.value("Image:Other")
.reason("")
.matchedRule("")
.legalBasis("")
.imported(false)
.containingNodeId(List.of(31, 12))
.closestHeadline("Images: Regular ")
.section("[31]: Section: Images: Regular Images: Formular")
.color(null)
.positions(List.of(new Position(1, 1, 1, 1, 1)))
.textBefore(null)
.textAfter(null)
.startOffset(0)
.endOffset(0)
.imageHasTransparency(false)
.dictionaryEntry(false)
.dossierDictionaryEntry(false)
.excluded(false)
.changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now())))
.build();
var entityLog = new EntityLog(1,
1,
List.of(entityLogEntry),
List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)",
"desc",
"Article 39(e)(3) of Regulation (EC) No 178/2002"),
new EntityLogLegalBasis("4. commercial information",
"desc 2",
"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")),
0,
0,
0,
0);
fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog);
when(entityLogService.getEntityLog(any(), any(), any(), anyBoolean())).thenReturn(entityLog);
var recategorizationRequestModel = RecategorizationRequestModel.builder()
.annotationId("annotationId")
.legalBasis("")
.section("[31]: Section: Images: Regular Images: Formular")
.type(typeLogo.getType())
.value("Image:Other")
.build();
var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false);
System.out.println(resp);
}
@Test
public void testLegalBasisChangeCbiAuthor() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
var file = fileTesterAndProvider.testAndProvideFile(dossier);
var type = typeProvider.testAndProvideType(dossierTemplate, null, "CBI_author", false);
var entityLogEntry = EntityLogEntry.builder()
.id("annotationId")
.type(type.getType())
.entryType(EntryType.ENTITY)
.state(EntryState.APPLIED)
.value("Ranya Eikenboom")
.reason("Author found")
.matchedRule("CBI.0.0")
.legalBasis("Article 39(e)(3) of Regulation (EC) No 178/2002")
.imported(false)
.containingNodeId(List.of(1, 1, 1))
.closestHeadline("CBI.0.0/1: Redact CBI Authors ")
.section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann")
.color(null)
.positions(List.of(new Position(1, 1, 1, 1, 1)))
.textBefore("Ksenia Max Mustermann ")
.textAfter(" Charalampos Schenk")
.startOffset(197)
.endOffset(212)
.imageHasTransparency(false)
.dictionaryEntry(true)
.dossierDictionaryEntry(false)
.excluded(false)
.changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now())))
.engines(Set.of(Engine.DICTIONARY))
.build();
var entityLog = new EntityLog(1,
1,
List.of(entityLogEntry),
List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)",
"desc",
"Article 39(e)(3) of Regulation (EC) No 178/2002"),
new EntityLogLegalBasis("4. commercial information",
"desc 2",
"Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")),
0,
0,
0,
0);
fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog);
when(entityLogService.getEntityLog(any(), any(), any(), anyBoolean())).thenReturn(entityLog);
var recategorizationRequestModel = RecategorizationRequestModel.builder()
.annotationId("annotationId")
.legalBasis("Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")
.section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann")
.type(type.getType())
.value("Ranya Eikenboom")
.build();
var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false);
System.out.println(resp);
}
}

View File

@ -18,7 +18,7 @@ public enum ManualRedactionType {
FORCE,
RECATEGORIZE,
RECATEGORIZE_IN_DICTIONARY,
@Deprecated LEGAL_BASIS_CHANGE,
LEGAL_BASIS_CHANGE,
RESIZE,
RESIZE_IN_DICTIONARY
}