more tests

This commit is contained in:
Timo Bejan 2021-09-20 14:21:38 +03:00
parent e036c4183e
commit 2ecb2eeadb
12 changed files with 335 additions and 21 deletions

View File

@ -1,5 +1,6 @@
package com.iqser.red.service.persistence.service.v1.api.model.data.dossier;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.persistence.*;
@ -26,10 +27,15 @@ public class ReportTemplate {
@Column
private boolean activeByDefault;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
private DossierTemplate dossierTemplate;
@Column(updatable = false,insertable = false,name = "dossier_template_id")
private String dossierTemplateId;
@ManyToMany
@JsonIgnore
private List<Dossier> dossiers = new ArrayList<>();
}

View File

@ -9,9 +9,7 @@ import java.util.List;
public interface DossierAttributesConfigResource {
String DOSSIER_ATTRIBUTES_PATH = "/dossierAttributes";
String DOSSIER_ATTRIBUTE_PATH = "/dossierAttribute";
String BASE_CONFIG_PATH = "/baseConfig";
String DOSSIER_ATTRIBUTE_PATH = "/dossier-attribute";
String DOSSIER_TEMPLATE_ID = "dossierTemplateId";
String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}";
@ -21,30 +19,30 @@ public interface DossierAttributesConfigResource {
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@PostMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
DossierAttributeConfig addOrUpdateDossierAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId,
@RequestBody DossierAttributeConfig dossierAttributeConfig);
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@PutMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PutMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
List<DossierAttributeConfig> setDossierAttributesConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId,
@RequestBody List<DossierAttributeConfig> dossierAttributesConfig);
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + DOSSIER_ATTRIBUTE_ID_PATH_VARIABLE)
@DeleteMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_ATTRIBUTE_ID_PATH_VARIABLE)
void deleteDossierAttribute(@PathVariable(DOSSIER_ATTRIBUTE_ID) String dossierAttributeId);
@ResponseStatus(HttpStatus.NO_CONTENT)
@PostMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + "/delete")
@PostMapping(value = DOSSIER_ATTRIBUTE_PATH + "/delete")
void deleteDossierAttributes(@RequestBody List<String> dossierAttributeIds);
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@GetMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
@GetMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
List<DossierAttributeConfig> getDossierAttributes(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId);
}

View File

@ -2,23 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class DossierAttributeConfigPersistenceService {
private final DossierAttributeConfigRepository dossierAttributeConfigRepository;
private final DossierAttributeRepository dossierAttributeRepository;
private final DossierTemplateRepository dossierTemplateRepository;
public DossierAttributeConfig addOrUpdateDossierAttribute(String dossierTemplateId, DossierAttributeConfig dossierAttributeConfig) {
@ -54,15 +56,22 @@ public class DossierAttributeConfigPersistenceService {
@Transactional
public List<DossierAttributeConfig> setDossierAttributesConfig(String dossierTemplateId, List<DossierAttributeConfig> dossierAttributesConfig) {
dossierAttributeConfigRepository.deleteByDossierTemplateId(dossierTemplateId);
var dossierTemplate = dossierTemplateRepository.getOne(dossierTemplateId);
dossierAttributesConfig.forEach(d -> {
d.setDossierTemplate(dossierTemplate);
d.setId(UUID.randomUUID().toString());
setPlaceholder(d);
uniqueLabelAndPlaceholder(d);
Set<String> toSetIds = dossierAttributesConfig.stream().map(DossierAttributeConfig::getId).filter(Objects::nonNull).collect(Collectors.toSet());
var currentConfigs = dossierAttributeConfigRepository.findAllByDossierTemplateId(dossierTemplateId);
Set<DossierAttributeConfig> configsToRemove = currentConfigs.stream().filter(c -> !toSetIds.contains(c.getId())).collect(Collectors.toSet());
dossierAttributesConfig.forEach(fac -> addOrUpdateDossierAttribute(dossierTemplateId, fac));
configsToRemove.forEach(ctr -> {
dossierAttributeRepository.deleteByDossierAttributeConfigId(ctr.getId());
dossierAttributeConfigRepository.deleteById(ctr.getId());
});
return getDossierAttributes(dossierTemplateId);
}
@Transactional

View File

@ -2,6 +2,8 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
@ -10,4 +12,11 @@ public interface DossierAttributeRepository extends JpaRepository<DossierAttribu
List<DossierAttribute> findByIdDossierId(String dossierId);
void deleteByDossierId(String dossierId);
@Query("SELECT a FROM DossierAttribute a WHERE a.dossierAttributeConfig.dossierTemplate.id = :dossierTemplateId")
List<DossierAttribute> findByDossierTemplateId(String dossierTemplateId);
@Modifying
@Query("DELETE FROM DossierAttribute e WHERE e.dossierAttributeConfig.id = :id")
void deleteByDossierAttributeConfigId(String id);
}

View File

@ -0,0 +1,8 @@
package com.iqser.red.service.peristence.v1.server.integration.client;
import com.iqser.red.service.persistence.service.v1.api.resources.DownloadResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "DownloadClient" ,url = "http://localhost:${server.port}")
public interface DownloadClient extends DownloadResource {
}

View File

@ -0,0 +1,8 @@
package com.iqser.red.service.peristence.v1.server.integration.client;
import com.iqser.red.service.persistence.service.v1.api.resources.FileStatusProcessingUpdateResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "FileProcessingClient", url = "http://localhost:${server.port}")
public interface FileProcessingClient extends FileStatusProcessingUpdateResource {
}

View File

@ -0,0 +1,10 @@
package com.iqser.red.service.peristence.v1.server.integration.client;
import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "ReportTemplateClient", url = "http://localhost:${server.port}")
public interface ReportTemplateClient extends ReportTemplateResource {
}

View File

@ -0,0 +1,70 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.*;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig;
import lombok.SneakyThrows;
import org.assertj.core.util.Lists;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class DossierAttributeTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private DossierAttributeConfigClient dossierAttributeConfigClient;
@Autowired
private DossierAttributeClient dossierAttributeClient;
@SneakyThrows
@Test
public void testDossierAttributes() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId());
assertThat(loadedAttributes).isEmpty();
DossierAttributeConfig attribute = new DossierAttributeConfig();
attribute.setLabel("test");
attribute.setEditable(true);
attribute.setType(DossierAttributeConfig.DossierAttributeType.TEXT);
dossierAttributeConfigClient.addOrUpdateDossierAttribute(dossier.getDossierTemplateId(),attribute);
loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId());
assertThat(loadedAttributes).isNotEmpty();
dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList());
loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId());
assertThat(loadedAttributes).isEmpty();
dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList(attribute));
loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId());
assertThat(loadedAttributes).isNotEmpty();
dossierAttributeConfigClient.deleteDossierAttribute(loadedAttributes.iterator().next().getId());
dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList(attribute));
loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId());
assertThat(loadedAttributes).isNotEmpty();
dossierAttributeConfigClient.deleteDossierAttributes(Lists.newArrayList(loadedAttributes.iterator().next().getId()));
}
}

View File

@ -0,0 +1,57 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.DownloadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.JSONPrimitive;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections;
import static org.assertj.core.api.Assertions.assertThat;
public class DownloadTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private DownloadClient downloadClient;
@Test
public void testDownload() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
downloadClient.prepareDownload(DownloadRequest.builder()
.userId("1")
.dossierId(dossier.getId())
.fileIds(Collections.singletonList(file.getId()))
.build());
var statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.iterator().next().getLastDownload()).isNull();
downloadClient.setDownloaded(JSONPrimitive.of(statuses.iterator().next().getStorageId()));
statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.iterator().next().getLastDownload()).isNotNull();
downloadClient.deleteDownloadStatus(JSONPrimitive.of(statuses.iterator().next().getStorageId()));
statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isEmpty();
}
}

View File

@ -0,0 +1,81 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
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.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileStatus;
import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;
public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@Autowired
private DossierTesterAndProvider dossierTesterAndProvider;
@Autowired
private FileProcessingClient fileProcessingClient;
@Autowired
private FileClient fileClient;
@Test
public void testFileProcessing() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
assertThat(file.getLastOCRTime()).isNull();
fileProcessingClient.analysisFailed(dossier.getId(), file.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR);
fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder()
.analysisVersion(100)
.fileId(file.getId())
.dossierId(dossier.getId()).build());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED);
assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100);
fileProcessingClient.ocrFailed(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR);
fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING);
assertThat(loadedFile.getLastOCRTime()).isNotNull();
fileProcessingClient.indexing(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.INDEXING);
assertThat(loadedFile.getLastIndexed()).isNull();
fileProcessingClient.indexingFailed(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR);
fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED);
assertThat(loadedFile.getLastIndexed()).isNotNull();
}
}

View File

@ -0,0 +1,54 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.ReportTemplateUploadRequest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import static org.assertj.core.api.Assertions.assertThat;
public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
@Autowired
private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
@Autowired
private ReportTemplateClient reportTemplateClient;
@Test
public void testReportTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(availableTemplates).isEmpty();
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
.activeByDefault(true)
.dossierTemplateId(dossierTemplate.getId())
.multiFileReport(true)
.fileName("test.docx")
.template(new byte[]{1, 2, 3, 4}).build());
availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(availableTemplates).isNotEmpty();
var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator().next().getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId());
assertThat(download.getFile().length).isEqualTo(4);
reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId());
availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(availableTemplates).isEmpty();
}
}

View File

@ -177,8 +177,12 @@ public abstract class AbstractPersistenceServerServiceTest {
@Autowired
private FileAttributesRepository fileAttributesRepository;
@Autowired
private DownloadStatusRepository downloadStatusRepository;
@After
public void afterTests() {
downloadStatusRepository.deleteAll();
fileAttributesRepository.deleteAll();
watermarkRepository.deleteAll();
smtpRepository.deleteAll();
@ -188,9 +192,6 @@ public abstract class AbstractPersistenceServerServiceTest {
reportTemplateRepository.deleteAll();
typeRepository.deleteAll();
viewedPagesRepository.deleteAll();
fileRepository.deleteAll();
dossierRepository.deleteAll();
dossierTemplateRepository.deleteAll();
notificationRepository.deleteAll();
auditRepository.deleteAll();
manualRedactionRepository.deleteAll();
@ -202,6 +203,9 @@ public abstract class AbstractPersistenceServerServiceTest {
watermarkRepository.deleteAll();
ruleSetRepository.deleteAll();
smtpRepository.deleteAll();
fileRepository.deleteAll();
dossierRepository.deleteAll();
dossierTemplateRepository.deleteAll();
}
}