Pull request #310: RED-3246 ps5

Merge in RED/persistence-service from RED-3246-ps5 to master

* commit '99bfa5510b0dbd3e712d8443286d9e57d23e29e3':
  RED-3246: As an admin I want to clone a dossier template
  RED-3246: As an admin I want to clone a dossier template
This commit is contained in:
Ali Oezyetimoglu 2022-03-18 14:22:10 +01:00
commit 9345f88bee
4 changed files with 414 additions and 51 deletions

View File

@ -0,0 +1,237 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.io.IOException;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import com.iqser.red.storage.commons.service.StorageService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class DossierTemplateCloneService {
private final DossierTemplateRepository dossierTemplateRepository;
private final LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
private final RulesPersistenceService rulesPersistenceService;
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
private final DictionaryPersistenceService dictionaryPersistenceService;
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
private final WatermarkService watermarkService;
private final ColorsService colorsService;
private final StorageService storageService;
public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
dossierTemplatePersistenceService.validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate);
DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity();
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
clonedDossierTemplate.setId(UUID.randomUUID().toString());
clonedDossierTemplate.setName(nameOfClonedDossierTemplate);
clonedDossierTemplate.setDescription(dossierTemplate.getDescription());
clonedDossierTemplate.setDateAdded(now);
clonedDossierTemplate.setDateModified(now);
clonedDossierTemplate.setCreatedBy(cloningUserId);
clonedDossierTemplate.setModifiedBy(cloningUserId);
clonedDossierTemplate.setValidFrom(dossierTemplate.getValidFrom());
clonedDossierTemplate.setValidTo(dossierTemplate.getValidTo());
clonedDossierTemplate.setSoftDeleteTime(dossierTemplate.getSoftDeleteTime());
clonedDossierTemplate.setDownloadFileTypes(dossierTemplate.getDownloadFileTypes());
//set rules
cloneRules(dossierTemplate.getId(), clonedDossierTemplate.getId());
//set legal basis
cloneLegalBasisMapping(dossierTemplate.getId(), clonedDossierTemplate.getId());
clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(clonedDossierTemplate)
.name()));
dossierTemplateRepository.save(clonedDossierTemplate);
//set dictionaries
clonedDossierTemplate.setDossierTypes(cloneDictionaries(dossierTemplate.getId(), clonedDossierTemplate.getId()));
//set dossier attributes
cloneDossierAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId());
//set file attributes
cloneFileAttributesGeneralConfig(dossierTemplate.getId(), clonedDossierTemplate.getId());
clonedDossierTemplate.setFileAttributeConfigs(cloneFileAttributesConfig(dossierTemplate.getId(), clonedDossierTemplate.getId()));
//set report templates
clonedDossierTemplate.setReportTemplates(cloneReportTemplates(dossierTemplate, clonedDossierTemplate.getId()));
//set watermarks
cloneWatermark(dossierTemplate.getId(), clonedDossierTemplate.getId());
//set colors
cloneColors(dossierTemplate.getId(), clonedDossierTemplate.getId());
dossierTemplateRepository.save(clonedDossierTemplate);
}, () -> {
throw new NotFoundException(String.format(dossierTemplatePersistenceService.DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
});
return clonedDossierTemplate;
}
private void cloneRules(String dossierTemplateId, String clonedDossierTemplateId) {
rulesPersistenceService.setRules(rulesPersistenceService.getRules(dossierTemplateId).getValue(), clonedDossierTemplateId);
}
private void cloneLegalBasisMapping(String dossierTemplateId, String clonedDossierTemplateId) {
legalBasisMappingPersistenceService.setLegalBasisMapping(clonedDossierTemplateId, convert(legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplateId), LegalBasis.class));
}
private List<TypeEntity> cloneDictionaries(String dossierTemplateId, String clonedDossierTemplateId) {
List<TypeEntity> clonedTypes = new ArrayList<>();
var types = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId);
for (TypeEntity t : types) {
TypeEntity te = dictionaryPersistenceService.addType(t.getType(), clonedDossierTemplateId, t.getHexColor(), t.getRecommendationHexColor(), t.getRank(), t.isHint(), t.isCaseInsensitive(), t.isRecommendation(), t.getDescription(), t.isAddToDictionaryAction(), t.getLabel(), null);
te.setDossierTemplateId(clonedDossierTemplateId);
clonedTypes.add(te);
}
return clonedTypes;
}
private void cloneDossierAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) {
List<DossierAttributeConfigEntity> dacList = new ArrayList<>();
var dossierAttributesConfig = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId);
dossierAttributesConfig.forEach(dossierAttributeConfigEntity -> {
var dac = DossierAttributeConfigEntity.builder()
.label(dossierAttributeConfigEntity.getLabel())
.editable(dossierAttributeConfigEntity.isEditable())
.placeholder(dossierAttributeConfigEntity.getPlaceholder())
.type(dossierAttributeConfigEntity.getType())
.build();
dacList.add(dac);
});
dossierAttributeConfigPersistenceService.setDossierAttributesConfig(clonedDossierTemplateId, dacList);
}
private void cloneFileAttributesGeneralConfig(String dossierTemplateId, String clonedDossierTemplateId) {
var fileAttributesGeneralConfig = fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId);
var fagc = FileAttributesGeneralConfigurationEntity.builder()
.dossierTemplateId(clonedDossierTemplateId)
.delimiter(fileAttributesGeneralConfig.getDelimiter())
.filenameMappingColumnHeaderName(fileAttributesGeneralConfig.getFilenameMappingColumnHeaderName())
.build();
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(clonedDossierTemplateId, fagc);
}
private List<FileAttributeConfigEntity> cloneFileAttributesConfig(String dossierTemplateId, String clonedDossierTemplateId) {
List<FileAttributeConfigEntity> facList = new ArrayList<>();
var fileAttributesConfig = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId);
fileAttributesConfig.forEach(fileAttributeConfigEntity -> {
var fac = FileAttributeConfigEntity.builder()
.csvColumnHeader(fileAttributeConfigEntity.getCsvColumnHeader())
.label(fileAttributeConfigEntity.getLabel())
.primaryAttribute(fileAttributeConfigEntity.isPrimaryAttribute())
.editable(fileAttributeConfigEntity.isEditable())
.filterable(fileAttributeConfigEntity.isFilterable())
.displayedInFileList(fileAttributeConfigEntity.isDisplayedInFileList())
.placeholder(fileAttributeConfigEntity.getPlaceholder())
.type(fileAttributeConfigEntity.getType())
.build();
facList.add(fac);
});
fileAttributeConfigPersistenceService.setFileAttributesConfig(clonedDossierTemplateId, facList);
return fileAttributeConfigPersistenceService.getFileAttributes(clonedDossierTemplateId);
}
private List<ReportTemplateEntity> cloneReportTemplates(DossierTemplateEntity dossierTemplate, String clonedDossierTemplateId) {
var reportTemplates = dossierTemplate.getReportTemplates();
for (ReportTemplateEntity rte : reportTemplates) {
var storedReportTemplate = storageService.getObject(rte.getStorageId());
String storageId = clonedDossierTemplateId + "/" + rte.getFileName();
String templateId = UUID.randomUUID().toString();
try {
storageService.storeObject(storageId, storedReportTemplate.getInputStream());
} catch (IOException e) {
throw new ConflictException("Could not clone report templates of dossier template.");
}
reportTemplatePersistenceService.insert(clonedDossierTemplateId, templateId, storageId, rte.getFileName(), rte.isActiveByDefault(), rte.isMultiFileReport());
}
return reportTemplatePersistenceService.findByDossierTemplateId(clonedDossierTemplateId);
}
private void cloneWatermark(String dossierTemplateId, String clonedDossierTemplateId) {
var watermark = watermarkService.getWatermark(dossierTemplateId);
WatermarkEntity we = WatermarkEntity.builder()
.dossierTemplateId(clonedDossierTemplateId)
.text(watermark.getText())
.hexColor(watermark.getHexColor())
.opacity(watermark.getOpacity())
.fontType(watermark.getFontType())
.fontSize(watermark.getFontSize())
.orientation(watermark.getOrientation())
.build();
watermarkService.saveWatermark(clonedDossierTemplateId, we);
}
private void cloneColors(String dossierTemplateId, String clonedDossierTemplateId) {
var colors = colorsService.getColors(dossierTemplateId);
var clonedColors = new ColorsEntity();
BeanUtils.copyProperties(colors, clonedColors);
clonedColors.setDossierTemplateId(clonedDossierTemplateId);
colorsService.saveColors(clonedColors);
}
}

View File

@ -34,6 +34,7 @@ public class DossierTemplatePersistenceService {
@Transactional
public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) {
if (createOrUpdateDossierRequest.getDossierTemplateId() != null) {
Optional<DossierTemplateEntity> dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId());
if (dossierTemplate.isPresent()) {
@ -69,7 +70,8 @@ public class DossierTemplatePersistenceService {
}
private DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) {
public DossierTemplateStatus computeDossierTemplateStatus(DossierTemplateEntity dossierTemplate) {
var legalBasis = legalBasisMappingPersistenceService.getLegalBasisMapping(dossierTemplate.getId());
if (legalBasis == null || legalBasis.isEmpty()) {
return DossierTemplateStatus.INCOMPLETE;
@ -91,6 +93,7 @@ public class DossierTemplatePersistenceService {
public void validateDossierTemplateNameIsUnique(String templateName) {
getAllDossierTemplates().forEach(existing -> {
if (existing.getName().equals(templateName)) {
throw new ConflictException("DossierTemplate name must be unique");
@ -98,6 +101,7 @@ public class DossierTemplatePersistenceService {
});
}
public List<DossierTemplateEntity> getAllDossierTemplates() {
var allDossierTemplates = dossierTemplateRepository.findAllWhereDeletedIsFalse();
@ -106,15 +110,20 @@ public class DossierTemplatePersistenceService {
return allDossierTemplates;
}
public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) {
var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId)
.orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
dossierTemplate.setDossierTemplateStatus(computeDossierTemplateStatus(dossierTemplate));
return dossierTemplate;
}
@Transactional
public void deleteDossierTemplate(String dossierTemplateId, String deletingUserId) {
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
var hasNonDeletedDossiers = dossierTemplate.getDossiers().stream().anyMatch(template -> template.getHardDeletedTime() == null);
@ -132,29 +141,4 @@ public class DossierTemplatePersistenceService {
}
public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate);
DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity();
dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> {
BeanUtils.copyProperties(dossierTemplate, clonedDossierTemplate);
OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS);
clonedDossierTemplate.setId(UUID.randomUUID().toString());
clonedDossierTemplate.setName(nameOfClonedDossierTemplate);
clonedDossierTemplate.setCreatedBy(cloningUserId);
clonedDossierTemplate.setModifiedBy(cloningUserId);
clonedDossierTemplate.setDateAdded(now);
clonedDossierTemplate.setDateModified(now);
clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(computeDossierTemplateStatus(clonedDossierTemplate).name()));
dossierTemplateRepository.save(clonedDossierTemplate);
}, () -> {
throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId));
});
return clonedDossierTemplate;
}
}

View File

@ -1,6 +1,7 @@
package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate;
@ -22,6 +23,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
public class DossierTemplateController implements DossierTemplateResource {
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
private final DossierTemplateCloneService dossierTemplateCloneService;
@Override
public DossierTemplate createOrUpdateDossierTemplate(@RequestBody CreateOrUpdateDossierTemplateRequest dossierTemplate) {
@ -45,6 +47,6 @@ public class DossierTemplateController implements DossierTemplateResource {
@Override
public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) {
return convert(dossierTemplatePersistenceService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class);
return convert(dossierTemplateCloneService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class);
}
}

View File

@ -1,26 +1,62 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisClient;
import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.util.Collections;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient;
import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.FileAttributesGeneralConfiguration;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Colors;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierAttributeType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
import feign.FeignException;
public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@ -36,6 +72,22 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@Autowired
private DossierClient dossierClient;
@Autowired
private DictionaryClient dictionaryClient;
@Autowired
private DossierAttributeConfigClient dossierAttributeConfigClient;
@Autowired
private FileAttributeConfigClient fileAttributeConfigClient;
@Autowired
private ReportTemplateClient reportTemplateClient;
@Autowired
private WatermarkClient watermarkClient;
@Test
public void testDossierTemplate() {
@ -45,7 +97,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(allTemplates.size()).isEqualTo(1);
assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate);
// update
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setDossierTemplateId(dossierTemplate.getId());
@ -55,7 +106,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo("Template 1 Update");
var loadedTemplate = dossierTemplateClient.getDossierTemplate(dossierTemplate.getId());
assertThat(loadedTemplate).isEqualTo(updated);
@ -68,9 +118,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
var testDossier = dossierTesterAndProvider.provideTestDossier(updated);
try{
try {
dossierTemplateClient.deleteDossierTemplate(updated.getId(), "1");
}catch (FeignException e){
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(400);
}
@ -82,7 +132,8 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@Test(expected = FeignException.class)
public void testDossierTemplateUniqueNameConflict(){
public void testDossierTemplateUniqueNameConflict() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossierTemplate2 = dossierTemplateTesterAndProvider.provideTestTemplate();
}
@ -90,8 +141,91 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
@Test
public void testCloneDossierTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
Type type = Type.builder()
.id("t.id")
.type("t.getType()")
.dossierTemplateId(dossierTemplate.getId())
.hexColor("#ddddd")
.recommendationHexColor("#cccccc")
.rank(999)
.isHint(false)
.isRecommendation(false)
.isCaseInsensitive(false)
.description("t.getDescription()")
.addToDictionaryAction(true)
.label("t.getLabel()")
.dossierId(null)
.version(23)
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t.getType()").build()))
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t.getType()").build()))
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t.getType()").build()))
.build();
dictionaryClient.addType(type);
dossierAttributeConfigClient.setDossierAttributesConfig(dossierTemplate.getId(), List.of(DossierAttributeConfig.builder()
.dossierTemplateId(dossierTemplate.getId())
.editable(false)
.id("dossierAttributeId")
.label("labelDossierAttribute")
.type(DossierAttributeType.TEXT)
.placeholder("placeholderDossier")
.build()));
fileAttributeConfigClient.setFileAttributesGeneralConfig(dossierTemplate.getId(), FileAttributesGeneralConfiguration.builder()
.dossierTemplateId(dossierTemplate.getId())
.delimiter("")
.filenameMappingColumnHeaderName("filenameMappingColumnHeaderName")
.build());
fileAttributeConfigClient.setFileAttributesConfig(dossierTemplate.getId(), List.of(FileAttributeConfig.builder()
.dossierTemplateId(dossierTemplate.getId())
.primaryAttribute(true)
.csvColumnHeader("12345")
.displayedInFileList(false)
.editable(false)
.filterable(false)
.id("fileAttributeId")
.label("labelFileAttribute")
.type(FileAttributeType.TEXT)
.placeholder("placeholderFile")
.build()));
ReportTemplateEntity rte = ReportTemplateEntity.builder()
.templateId("templateId")
.dossierTemplate(convert(dossierTemplate, DossierTemplateEntity.class))
.dossierTemplateId(dossierTemplate.getId())
.dossiers(null)
.activeByDefault(false)
.fileName("rte")
.multiFileReport(false)
.storageId("storageId")
.uploadDate(OffsetDateTime.now())
.build();
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder().template("some text".getBytes(StandardCharsets.UTF_8)).dossierTemplateId(dossierTemplate.getId()).fileName("Report Template").activeByDefault(true).multiFileReport(false).build());
watermarkClient.saveWatermark(dossierTemplate.getId(), Watermark.builder()
.dossierTemplateId(dossierTemplate.getId())
.fontSize(10)
.fontType("Arial")
.text("watermark")
.hexColor("#123456")
.opacity(1)
.orientation(WatermarkOrientation.HORIZONTAL)
.build());
var col = Colors.builder()
.analysisColor("#111111")
.defaultColor("#222222")
.dossierTemplateId(dossierTemplate.getId())
.dictionaryRequestColor("#333333")
.requestAdd("#444444")
.ignoredHintColor("#555555")
.requestRemove("#666666")
.requestRemove("#777777")
.notRedacted("#888888")
.previewColor("#999999")
.updatedColor("#aaaaaa")
.manualRedactionColor("#bbbbbb")
.build();
dictionaryClient.setColors(dossierTemplate.getId(), col);
var allTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allTemplates.size()).isEqualTo(1);
assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate);
@ -100,7 +234,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(clonedDT.getName()).isEqualTo("Clone of " + dossierTemplate.getName());
var loadedTemplate = dossierTemplateClient.getDossierTemplate(clonedDT.getId());
assertThat(loadedTemplate).isEqualTo(clonedDT);
assertThat(loadedTemplate.getId()).isEqualTo(clonedDT.getId());
assertThat(loadedTemplate.getDescription()).isEqualTo(dossierTemplate.getDescription());
assertThat(loadedTemplate.getValidFrom()).isEqualTo(dossierTemplate.getValidFrom());
@ -108,6 +241,13 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedTemplate.getDownloadFileTypes()).isEqualTo(dossierTemplate.getDownloadFileTypes());
assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user");
assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user");
assertThat(dossierAttributeConfigClient.getDossierAttributes(dossierTemplate.getId()).get(0).getLabel()).isEqualTo(dossierAttributeConfigClient.getDossierAttributes(clonedDT.getId()).get(0).getLabel());
assertThat(fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId()).get(0).getCsvColumnHeader()).isEqualTo(fileAttributeConfigClient.getFileAttributeConfigs(clonedDT.getId()).get(0).getCsvColumnHeader());
assertThat(fileAttributeConfigClient.getFileAttributesGeneralConfig(dossierTemplate.getId()).getFilenameMappingColumnHeaderName()).isEqualTo(fileAttributeConfigClient.getFileAttributesGeneralConfig(clonedDT.getId()).getFilenameMappingColumnHeaderName());
assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()).get(0).getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()).get(0).getFileName());
assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkClient.getWatermark(clonedDT.getId()).getText());
assertThat(dictionaryClient.getColors(dossierTemplate.getId()).getRequestAdd()).isEqualTo(dictionaryClient.getColors(clonedDT.getId()).getRequestAdd());
}
}