Merge branch 'RED-8432' into 'master'
RED-8432: Return 400 if invalid input for attributes is given Closes RED-8432 See merge request redactmanager/persistence-service!343
This commit is contained in:
commit
bf66fdf4b7
@ -34,6 +34,7 @@ public class DossierAttributeConfigEntity {
|
||||
|
||||
@Column
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Builder.Default
|
||||
private DossierAttributeType type = DossierAttributeType.TEXT;
|
||||
|
||||
@ManyToOne
|
||||
|
||||
@ -42,6 +42,7 @@ public class FileAttributeConfigEntity {
|
||||
private String placeholder;
|
||||
@Column
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Builder.Default
|
||||
private FileAttributeType type = FileAttributeType.TEXT;
|
||||
|
||||
@ManyToOne
|
||||
|
||||
@ -1,9 +1,14 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service;
|
||||
|
||||
import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeTypeFormats.DOSSIER_ATTRIBUTE_TYPE_DATE_FORMAT;
|
||||
import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeTypeFormats.DOSSIER_ATTRIBUTE_TYPE_IMAGE_REGEX;
|
||||
import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeTypeFormats.DOSSIER_ATTRIBUTE_TYPE_NUMBER_REGEX;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.validator.routines.DateValidator;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
|
||||
@ -31,7 +36,7 @@ public class DossierAttributesManagementService {
|
||||
var dossier = dossierService.getDossierById(dossierId);
|
||||
var config = dossierAttributeConfigPersistenceService.getDossierAttributes(dossier.getDossierTemplateId());
|
||||
|
||||
var typeById = config.stream().collect(Collectors.toMap(entry -> entry.getId(), entry -> entry.getType()));
|
||||
var typeById = config.stream().collect(Collectors.toMap(DossierAttributeConfigEntity::getId, DossierAttributeConfigEntity::getType));
|
||||
for (DossierAttribute dossierAttribute : dossierAttributes) {
|
||||
validateDossierAttribute(typeById, dossierAttribute);
|
||||
}
|
||||
@ -53,14 +58,42 @@ public class DossierAttributesManagementService {
|
||||
}
|
||||
|
||||
DossierAttributeType type = typeById.get(dossierAttribute.getDossierAttributeConfigId());
|
||||
if (type.equals(DossierAttributeType.IMAGE) && dossierAttribute.getValue() != null && !(dossierAttribute.getValue()
|
||||
.startsWith("data:image/png;base64") || dossierAttribute.getValue().startsWith("data:image/jpg;base64") || dossierAttribute.getValue()
|
||||
.startsWith("data:image/jpeg;base64"))) {
|
||||
String value = dossierAttribute.getValue();
|
||||
if (value != null) {
|
||||
switch (type) {
|
||||
case IMAGE -> validateImageString(value);
|
||||
case DATE -> validateDateString(value);
|
||||
case NUMBER -> validateNumberString(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateImageString(String imageString) {
|
||||
|
||||
if (!imageString.matches(DOSSIER_ATTRIBUTE_TYPE_IMAGE_REGEX)) {
|
||||
throw new BadRequestException("Only png, jpg and jpeg files are allowed for image dossier attributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateDateString(String dateString) {
|
||||
|
||||
DateValidator validator = DateValidator.getInstance();
|
||||
if (!validator.isValid(dateString, DOSSIER_ATTRIBUTE_TYPE_DATE_FORMAT)) {
|
||||
throw new BadRequestException("Invalid date given for date dossier attributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateNumberString(String numberString) {
|
||||
|
||||
if (!numberString.matches(DOSSIER_ATTRIBUTE_TYPE_NUMBER_REGEX)) {
|
||||
throw new BadRequestException("Only numbers are allowed for number dossier attributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<DossierAttribute> getDossierAttributes(String dossierId) {
|
||||
|
||||
return MagicConverter.convert(dossierAttributePersistenceService.getDossierAttributes(dossierId), DossierAttribute.class);
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service;
|
||||
|
||||
import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeTypeFormats.FILE_ATTRIBUTE_TYPE_DATE_FORMAT;
|
||||
import static com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeTypeFormats.FILE_ATTRIBUTE_TYPE_NUMBER_REGEX;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
@ -19,6 +22,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import org.apache.commons.validator.routines.DateValidator;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
@ -26,13 +30,14 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ImportCsvRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ImportCsvResponse;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.SuppressFBWarnings;
|
||||
import com.iqser.red.service.search.v1.model.IndexMessageType;
|
||||
import com.opencsv.CSVParser;
|
||||
@ -140,7 +145,7 @@ public class FileAttributesManagementService {
|
||||
|
||||
try (CSVReader csvReader = new CSVReaderBuilder(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(csv), parseEncoding(encoding)))).withCSVParser(parser)
|
||||
.build()) {
|
||||
records.addAll(csvReader.readAll().stream().map(Lists::newArrayList).collect(Collectors.toList()));
|
||||
records.addAll(csvReader.readAll().stream().map(Lists::newArrayList).toList());
|
||||
} catch (IOException | CsvException e) {
|
||||
log.error("Failed to process CSV", e);
|
||||
}
|
||||
@ -166,10 +171,52 @@ public class FileAttributesManagementService {
|
||||
@Transactional
|
||||
public void setFileAttributes(String dossierId, String fileId, Map<String, String> fileAttributesMap) {
|
||||
|
||||
var dossier = dossierPersistenceService.findByDossierId(dossierId);
|
||||
var config = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId());
|
||||
|
||||
var typeById = config.stream().collect(Collectors.toMap(FileAttributeConfigEntity::getId, FileAttributeConfigEntity::getType));
|
||||
|
||||
for (String fileAttributeConfigId : fileAttributesMap.keySet()) {
|
||||
validateFileAttribute(typeById, fileAttributeConfigId, fileAttributesMap.get(fileAttributeConfigId));
|
||||
}
|
||||
|
||||
fileStatusPersistenceService.setFileAttributes(dossierId, fileId, fileAttributesMap);
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, true);
|
||||
indexingService.addToIndexingQueue(IndexMessageType.UPDATE, null, dossierId, fileId, 2);
|
||||
}
|
||||
|
||||
|
||||
private void validateFileAttribute(Map<String, FileAttributeType> typeById, String fileAttributeConfigId, String value) {
|
||||
|
||||
if (!typeById.containsKey(fileAttributeConfigId)) {
|
||||
throw new ConflictException("File attribute configuration does not exist.");
|
||||
}
|
||||
|
||||
FileAttributeType type = typeById.get(fileAttributeConfigId);
|
||||
if (value != null) {
|
||||
switch (type) {
|
||||
case DATE -> validateDateString(value);
|
||||
case NUMBER -> validateNumberString(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateDateString(String dateString) {
|
||||
|
||||
DateValidator validator = DateValidator.getInstance();
|
||||
if (!validator.isValid(dateString, FILE_ATTRIBUTE_TYPE_DATE_FORMAT)) {
|
||||
throw new BadRequestException("Invalid date given for date file attributes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateNumberString(String numberString) {
|
||||
|
||||
if (!numberString.matches(FILE_ATTRIBUTE_TYPE_NUMBER_REGEX)) {
|
||||
throw new BadRequestException("Only numbers are allowed for number file attributes");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -20,6 +22,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttribute;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeType;
|
||||
|
||||
import feign.FeignException;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
public class DossierAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
@ -53,8 +56,7 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(loadedAttributes.getDossierAttributeConfigs()).isNotEmpty();
|
||||
|
||||
attribute.setLabel("updated test");
|
||||
var updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
|
||||
loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId());
|
||||
var updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
|
||||
assertThat(updated.getLabel()).isEqualTo("updated test");
|
||||
assertThat(updated.getPlaceholder()).isEqualTo("{{dossier.attribute.UpdatedTest}}");
|
||||
|
||||
@ -118,4 +120,99 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
@Test
|
||||
public void testSetDossierAttributesInvalidAddsOrUpdates() {
|
||||
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
|
||||
var loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId());
|
||||
assertThat(loadedAttributes.getDossierAttributeConfigs()).isEmpty();
|
||||
|
||||
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(),
|
||||
DossierAttributeConfig.builder().label("Text").editable(true).type(DossierAttributeType.TEXT).build());
|
||||
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(),
|
||||
DossierAttributeConfig.builder().label("Number").editable(true).type(DossierAttributeType.NUMBER).build());
|
||||
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(),
|
||||
DossierAttributeConfig.builder().label("Date").editable(true).type(DossierAttributeType.DATE).build());
|
||||
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(),
|
||||
DossierAttributeConfig.builder().label("Image1").editable(true).type(DossierAttributeType.IMAGE).build());
|
||||
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(),
|
||||
DossierAttributeConfig.builder().label("Image2").editable(true).type(DossierAttributeType.IMAGE).build());
|
||||
loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId());
|
||||
assertThat(loadedAttributes.getDossierAttributeConfigs().size()).isEqualTo(5);
|
||||
|
||||
var configIds = loadedAttributes.getDossierAttributeConfigs();
|
||||
|
||||
String valueConfig0 = "lorem ipsum 123";
|
||||
String valueConfig1 = "12345";
|
||||
String valueConfig2 = "2023-08-08";
|
||||
String valueConfig3 = "data:image/png;base64,w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==...";
|
||||
String valueConfig4 = "data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4...";
|
||||
List<DossierAttribute> dossierAttributes = new ArrayList<>();
|
||||
dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(0).getId()).dossierId(dossier.getId()).value(valueConfig0).build());
|
||||
dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(1).getId()).dossierId(dossier.getId()).value(valueConfig1).build());
|
||||
dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value(valueConfig2).build());
|
||||
dossierAttributes.add(DossierAttribute.builder().dossierAttributeConfigId(configIds.get(3).getId()).dossierId(dossier.getId()).value(valueConfig3).build());
|
||||
dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(dossierAttributes));
|
||||
|
||||
DossierAttribute imageAttribute = DossierAttribute.builder().dossierAttributeConfigId(configIds.get(4).getId()).dossierId(dossier.getId()).value(valueConfig4).build();
|
||||
dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(), imageAttribute);
|
||||
|
||||
var loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId());
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().size()).isEqualTo(5);
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(0).getValue()).isEqualTo(valueConfig0);
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(1).getValue()).isEqualTo(valueConfig1);
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(2).getValue()).isEqualTo(valueConfig2);
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(3).getValue()).isEqualTo(valueConfig3);
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(4).getValue()).isEqualTo(valueConfig4);
|
||||
|
||||
String valueUpdate = "data:image/jpeg;base64,jkaf0000JJkasfaiiiiiHHHEkkkkki12Pd3Jaks222ggggB...";
|
||||
imageAttribute.setValue(valueUpdate);
|
||||
dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(), imageAttribute);
|
||||
loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId());
|
||||
assertThat(loadedAttributeValues.getDossierAttributeList().get(4).getValue()).isEqualTo(valueUpdate);
|
||||
|
||||
var e = assertThrows(FeignException.class,
|
||||
() -> dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(),
|
||||
DossierAttribute.builder().dossierAttributeConfigId(configIds.get(1).getId()).dossierId(dossier.getId()).value("12345qwer").build()));
|
||||
assertEquals(400, e.status());
|
||||
e = assertThrows(FeignException.class,
|
||||
() -> dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(),
|
||||
DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value("07.02.2024").build()));
|
||||
assertEquals(400, e.status());
|
||||
e = assertThrows(FeignException.class,
|
||||
() -> dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(),
|
||||
DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value("2021-17-31").build()));
|
||||
assertEquals(400, e.status());
|
||||
e = assertThrows(FeignException.class,
|
||||
() -> dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(),
|
||||
DossierAttribute.builder().dossierAttributeConfigId(configIds.get(3).getId()).dossierId(dossier.getId()).value("data:image/gif;base64,test").build()));
|
||||
assertEquals(400, e.status());
|
||||
|
||||
List<DossierAttribute> invalidDossierAttributes1 = List.of(DossierAttribute.builder()
|
||||
.dossierAttributeConfigId(configIds.get(0).getId())
|
||||
.dossierId(dossier.getId())
|
||||
.value(valueConfig0)
|
||||
.build(), DossierAttribute.builder().dossierAttributeConfigId(configIds.get(1).getId()).dossierId(dossier.getId()).value("asdf12345").build());
|
||||
e = assertThrows(FeignException.class, () -> dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(invalidDossierAttributes1)));
|
||||
assertEquals(400, e.status());
|
||||
List<DossierAttribute> invalidDossierAttributes2 = List.of(DossierAttribute.builder()
|
||||
.dossierAttributeConfigId(configIds.get(1).getId())
|
||||
.dossierId(dossier.getId())
|
||||
.value(valueConfig1)
|
||||
.build(), DossierAttribute.builder().dossierAttributeConfigId(configIds.get(2).getId()).dossierId(dossier.getId()).value("20140705").build());
|
||||
e = assertThrows(FeignException.class, () -> dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(invalidDossierAttributes2)));
|
||||
assertEquals(400, e.status());
|
||||
List<DossierAttribute> invalidDossierAttributes3 = List.of(DossierAttribute.builder()
|
||||
.dossierAttributeConfigId(configIds.get(1).getId())
|
||||
.dossierId(dossier.getId())
|
||||
.value(valueConfig1)
|
||||
.build(), DossierAttribute.builder().dossierAttributeConfigId(configIds.get(3).getId()).dossierId(dossier.getId()).value("data:image/jpe;base64,test").build());
|
||||
e = assertThrows(FeignException.class, () -> dossierAttributeClient.setDossierAttributes(dossier.getId(), new DossierAttributes(invalidDossierAttributes3)));
|
||||
assertEquals(400, e.status());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.service.FileAttributesManagementService.ASCII_ENCODING;
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.service.FileAttributesManagementService.UTF_ENCODING;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -28,7 +30,9 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributes;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributesConfig;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeConfig;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeType;
|
||||
|
||||
import feign.FeignException;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
@ -221,4 +225,59 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(loadedFile.getFileAttributes().getAttributeIdToValue()).isEmpty();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
@Test
|
||||
public void testSetFileAttributesInvalidUpdates() {
|
||||
// Create file with attributes
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||
|
||||
var generalConfig = new FileAttributesConfig();
|
||||
generalConfig.setDelimiter(",");
|
||||
generalConfig.setEncoding("UTF-8");
|
||||
generalConfig.setFilenameMappingColumnHeaderName("Name");
|
||||
|
||||
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), generalConfig);
|
||||
var loadedConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId());
|
||||
assertThat(loadedConfig.getDelimiter()).isEqualTo(",");
|
||||
|
||||
List<FileAttributeConfig> configs = new ArrayList<>();
|
||||
configs.add(FileAttributeConfig.builder().csvColumnHeader("Date").primaryAttribute(true).label("Date").type(FileAttributeType.DATE).build());
|
||||
configs.add(FileAttributeConfig.builder().csvColumnHeader("Number").primaryAttribute(true).label("Number").type(FileAttributeType.NUMBER).build());
|
||||
configs.add(FileAttributeConfig.builder().csvColumnHeader("Text").primaryAttribute(true).label("Text").type(FileAttributeType.TEXT).build());
|
||||
|
||||
generalConfig.setFileAttributeConfigs(configs);
|
||||
|
||||
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), generalConfig);
|
||||
|
||||
List<FileAttributeConfig> loadedConfigs = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()).getFileAttributeConfigs();
|
||||
assertThat(loadedConfigs.size()).isEqualTo(3);
|
||||
|
||||
Map<String, String> fileAttributesMap = new HashMap<>();
|
||||
fileAttributesMap.put(loadedConfigs.get(0).getId(), "2023-12-31");
|
||||
fileAttributesMap.put(loadedConfigs.get(1).getId(), "12345");
|
||||
fileAttributesMap.put(loadedConfigs.get(2).getId(), "Free Text 123");
|
||||
fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(fileAttributesMap));
|
||||
|
||||
Map<String, String> fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes().getAttributeIdToValue();
|
||||
assertThat(fileAttributes.size()).isEqualTo(3);
|
||||
assertThat(fileAttributes.get(loadedConfigs.get(0).getId())).isEqualTo("2023-12-31");
|
||||
assertThat(fileAttributes.get(loadedConfigs.get(1).getId())).isEqualTo("12345");
|
||||
assertThat(fileAttributes.get(loadedConfigs.get(2).getId())).isEqualTo("Free Text 123");
|
||||
|
||||
var e = assertThrows(FeignException.class, () -> fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(loadedConfigs.get(0).getId(), "random/text"))));
|
||||
assertEquals(400, e.status());
|
||||
assertThrows(FeignException.class, () -> fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(loadedConfigs.get(0).getId(), "2023-12-32"))));
|
||||
assertEquals(400, e.status());
|
||||
assertThrows(FeignException.class, () -> fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(loadedConfigs.get(0).getId(), "2023-02-30"))));
|
||||
assertEquals(400, e.status());
|
||||
assertThrows(FeignException.class, () -> fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(loadedConfigs.get(1).getId(), "abc"))));
|
||||
assertEquals(400, e.status());
|
||||
assertThrows(FeignException.class, () -> fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(loadedConfigs.get(1).getId(), "1-2-3-4"))));
|
||||
assertEquals(400, e.status());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ public class DossierAttributeConfig {
|
||||
private String label;
|
||||
private boolean editable;
|
||||
private String placeholder;
|
||||
@Builder.Default
|
||||
private DossierAttributeType type = DossierAttributeType.TEXT;
|
||||
private String dossierTemplateId;
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier;
|
||||
|
||||
public class DossierAttributeTypeFormats {
|
||||
|
||||
public static String DOSSIER_ATTRIBUTE_TYPE_DATE_FORMAT = "yyyy-MM-dd";
|
||||
|
||||
public static String DOSSIER_ATTRIBUTE_TYPE_IMAGE_REGEX = "data:image/(png|jpe?g);base64.*";
|
||||
|
||||
public static String DOSSIER_ATTRIBUTE_TYPE_NUMBER_REGEX = "[0-9]*";
|
||||
}
|
||||
@ -1,9 +1,5 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -27,6 +23,7 @@ public class FileAttributeConfig {
|
||||
private boolean filterable;
|
||||
private boolean displayedInFileList;
|
||||
private String placeholder;
|
||||
@Builder.Default
|
||||
private FileAttributeType type = FileAttributeType.TEXT;
|
||||
private String dossierTemplateId;
|
||||
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file;
|
||||
|
||||
public class FileAttributeTypeFormats {
|
||||
|
||||
public static String FILE_ATTRIBUTE_TYPE_DATE_FORMAT = "yyyy-MM-dd";
|
||||
|
||||
public static String FILE_ATTRIBUTE_TYPE_NUMBER_REGEX = "[0-9]*";
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user