Merge branch 'RED-10259-bp' into 'release/2.589.x'
RED-10259: Failed recategorize on annotation after re-upload file without keeping changes See merge request redactmanager/persistence-service!799
This commit is contained in:
commit
2f42e96b25
@ -56,6 +56,7 @@ public class RecategorizationPersistenceService {
|
|||||||
entity.setValue(request.getValue());
|
entity.setValue(request.getValue());
|
||||||
}
|
}
|
||||||
entity.setProcessedDate(null);
|
entity.setProcessedDate(null);
|
||||||
|
entity.setSoftDeletedTime(null);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -99,23 +99,6 @@ public class Application implements ApplicationContextAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnProperty(value = "cors.enabled", havingValue = "true")
|
|
||||||
public WebMvcConfigurer corsConfigurer() {
|
|
||||||
|
|
||||||
return new WebMvcConfigurer() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCorsMappings(CorsRegistry registry) {
|
|
||||||
|
|
||||||
log.info("Cross Origin Requests are enabled !!!");
|
|
||||||
registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "DELETE", "PUT", "HEAD");
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public DictionaryMergeService dictionaryMergeService() {
|
public DictionaryMergeService dictionaryMergeService() {
|
||||||
|
|
||||||
|
|||||||
@ -18,12 +18,12 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -31,7 +31,6 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient;
|
||||||
@ -44,6 +43,8 @@ import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvid
|
|||||||
import com.iqser.red.service.peristence.v1.server.integration.service.UserProvider;
|
import com.iqser.red.service.peristence.v1.server.integration.service.UserProvider;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRecategorizationEntity;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.model.ManualChangesQueryOptions;
|
import com.iqser.red.service.persistence.management.v1.processor.model.ManualChangesQueryOptions;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
|
||||||
@ -51,10 +52,10 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Dossier
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogMergeService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogMergeService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionProviderService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionProviderService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RecategorizationPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.queue.SearchTermOccurrencesResponseReceiver;
|
import com.iqser.red.service.persistence.management.v1.processor.service.queue.SearchTermOccurrencesResponseReceiver;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest;
|
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult;
|
||||||
@ -121,7 +122,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
private FileStatusPersistenceService fileStatusPersistenceService;
|
private FileStatusPersistenceService fileStatusPersistenceService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper objectMapper;
|
private FileStatusService fileStatusService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FileClient fileClient;
|
private FileClient fileClient;
|
||||||
@ -138,15 +139,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DictionaryManagementService dictionaryManagementService;
|
private DictionaryManagementService dictionaryManagementService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private EntryPersistenceService entryPersistenceService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FileProcessingClient fileProcessingClient;
|
private FileProcessingClient fileProcessingClient;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ManualRedactionService manualRedactionService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ManualRedactionProviderService manualRedactionProviderService;
|
private ManualRedactionProviderService manualRedactionProviderService;
|
||||||
|
|
||||||
@ -159,6 +154,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SearchTermOccurrencesResponseReceiver searchTermOccurrencesResponseReceiver;
|
private SearchTermOccurrencesResponseReceiver searchTermOccurrencesResponseReceiver;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RecategorizationPersistenceService recategorizationPersistenceService;
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() {
|
public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() {
|
||||||
@ -4030,4 +4028,92 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
when(entityLogService.getEntityLog(any(), any())).thenAnswer(answer);
|
when(entityLogService.getEntityLog(any(), any())).thenAnswer(answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReaddSameImageRecatsAfterFullFileOverwrite() {
|
||||||
|
|
||||||
|
// Step 1: Prepare file
|
||||||
|
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
|
||||||
|
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||||
|
|
||||||
|
// Step 2: Do recategorizations
|
||||||
|
var type1 = typeProvider.testAndProvideType(dossierTemplate, dossier, "Type1", false, 66);
|
||||||
|
var type2 = typeProvider.testAndProvideType(dossierTemplate, dossier, "Type2", false, 100);
|
||||||
|
|
||||||
|
List<String> entries = List.of("Luke Skywalker");
|
||||||
|
dictionaryClient.addEntry(type1.getType(), type1.getDossierTemplateId(), entries, false, null, DictionaryEntryType.ENTRY);
|
||||||
|
|
||||||
|
// Create an annotation
|
||||||
|
var annotationId = "AnnotationId";
|
||||||
|
var entityLog = new EntityLog(1,
|
||||||
|
1,
|
||||||
|
List.of(EntityLogEntry.builder()
|
||||||
|
.id(annotationId)
|
||||||
|
.type(type1.getType())
|
||||||
|
.value("Luke Skywalker")
|
||||||
|
.dictionaryEntry(true)
|
||||||
|
.entryType(EntryType.IMAGE)
|
||||||
|
.state(EntryState.APPLIED)
|
||||||
|
.build()),
|
||||||
|
null,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0);
|
||||||
|
fileManagementStorageService.saveEntityLog(dossier.getId(), file.getId(), entityLog);
|
||||||
|
|
||||||
|
when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog);
|
||||||
|
|
||||||
|
Set<RecategorizationRequestModel> recategorizationRequests = Set.of(RecategorizationRequestModel.builder()
|
||||||
|
.type(type2.getType())
|
||||||
|
.annotationId(annotationId)
|
||||||
|
.addToDictionary(false)
|
||||||
|
.addToAllDossiers(false)
|
||||||
|
.legalBasis("")
|
||||||
|
.section("section")
|
||||||
|
.value("Luke Skywalker")
|
||||||
|
.build());
|
||||||
|
manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), recategorizationRequests, true);
|
||||||
|
|
||||||
|
var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
|
||||||
|
assertEquals(allManualRedactions.getRecategorizations().size(), 1);
|
||||||
|
|
||||||
|
List<ManualRecategorizationEntity> recats = recategorizationPersistenceService.findEntriesByFileIdAndOptions(file.getId(),
|
||||||
|
ManualChangesQueryOptions.builder()
|
||||||
|
.includeDeletions(true)
|
||||||
|
.build());
|
||||||
|
assertEquals(recats.size(), 1);
|
||||||
|
assertEquals(annotationId, recats.get(0).getId().getAnnotationId());
|
||||||
|
assertNull(recats.get(0).getSoftDeletedTime());
|
||||||
|
|
||||||
|
// Step 3: file overwrite
|
||||||
|
fileStatusService.overwriteFile(file.getDossierId(), file.getId(), "testUploader", file.getFilename(), false, false);
|
||||||
|
|
||||||
|
fileManagementStorageService.saveEntityLog(dossier.getId(), file.getId(), entityLog);
|
||||||
|
|
||||||
|
allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
|
||||||
|
assertEquals(allManualRedactions.getRecategorizations().size(), 0);
|
||||||
|
recats = recategorizationPersistenceService.findEntriesByFileIdAndOptions(file.getId(),
|
||||||
|
ManualChangesQueryOptions.builder()
|
||||||
|
.includeDeletions(true)
|
||||||
|
.build());
|
||||||
|
assertEquals(recats.size(), 1);
|
||||||
|
assertEquals(annotationId, recats.get(0).getId().getAnnotationId());
|
||||||
|
assertNotNull(recats.get(0).getSoftDeletedTime());
|
||||||
|
|
||||||
|
// Step 4: Do the same recategorizations again
|
||||||
|
manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), recategorizationRequests, true);
|
||||||
|
|
||||||
|
allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
|
||||||
|
recats = recategorizationPersistenceService.findEntriesByFileIdAndOptions(file.getId(),
|
||||||
|
ManualChangesQueryOptions.builder()
|
||||||
|
.includeDeletions(true)
|
||||||
|
.build());
|
||||||
|
assertEquals(recats.size(), 1);
|
||||||
|
assertEquals(annotationId, recats.get(0).getId().getAnnotationId());
|
||||||
|
assertNull(recats.get(0).getSoftDeletedTime());
|
||||||
|
assertEquals(allManualRedactions.getRecategorizations().size(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user