RED-10343 - User should be able to set own placerholder value

- when placeholder is set, the placeholder is checked to be unique (conflict otherwise) and then used
- when placeholder is not set, the current behaviour is in place(with generated placeholder)
- update unit tests
This commit is contained in:
corinaolariu 2024-11-28 21:30:15 +02:00
parent d3f0d1bc87
commit 0e08794271
4 changed files with 62 additions and 14 deletions

View File

@ -60,7 +60,7 @@ public class DossierAttributeConfigPersistenceService {
dossierAttributeConfig.setDossierTemplate(dossierTemplate);
if (dossierAttributeConfig.getId() == null) {
dossierAttributeConfig.setId(UUID.randomUUID().toString());
setPlaceholder(dossierAttributeConfig);
checkAndSetPlaceholder(dossierAttributeConfig);
uniqueLabelAndPlaceholder(dossierAttributeConfig);
return dossierAttributeConfigRepository.save(dossierAttributeConfig);
} else {
@ -72,12 +72,13 @@ public class DossierAttributeConfigPersistenceService {
config.setLabel(dossierAttributeConfig.getLabel());
config.setType(dossierAttributeConfig.getType());
config.setEditable(dossierAttributeConfig.isEditable());
setPlaceholder(config);
checkAndSetPlaceholder(dossierAttributeConfig);
config.setPlaceholder(dossierAttributeConfig.getPlaceholder());
uniqueLabelAndPlaceholder(dossierAttributeConfig);
return dossierAttributeConfigRepository.save(config);
} else {
dossierAttributeConfig.setId(UUID.randomUUID().toString());
setPlaceholder(dossierAttributeConfig);
checkAndSetPlaceholder(dossierAttributeConfig);
uniqueLabelAndPlaceholder(dossierAttributeConfig);
return dossierAttributeConfigRepository.save(dossierAttributeConfig);
}
@ -92,12 +93,25 @@ public class DossierAttributeConfigPersistenceService {
}
private void setPlaceholder(DossierAttributeConfigEntity dossierAttributeConfig) {
private void checkAndSetPlaceholder(DossierAttributeConfigEntity dossierAttributeConfig) {
String placeholder = "{{dossier.attribute." + StringUtils.remove(WordUtils.capitalizeFully(dossierAttributeConfig.getLabel(), ' '), " ") + "}}";
dossierAttributeConfig.setPlaceholder(placeholder);
if (StringUtils.isEmpty(dossierAttributeConfig.getPlaceholder())) {
String placeholder = "{{dossier.attribute." + StringUtils.remove(WordUtils.capitalizeFully(dossierAttributeConfig.getLabel(), ' '), " ") + "}}";
dossierAttributeConfig.setPlaceholder(placeholder);
} else {
uniquePlaceholder(dossierAttributeConfig);
}
}
private void uniquePlaceholder(DossierAttributeConfigEntity dossierAttributesConfig) {
getDossierAttributes(dossierAttributesConfig.getDossierTemplate().getId()).stream()
.filter(d -> !d.getId().equals(dossierAttributesConfig.getId()))
.forEach(other -> {
if (other.getPlaceholder().equalsIgnoreCase(dossierAttributesConfig.getPlaceholder())) {
throw new ConflictException("Placeholder already exists. " + dossierAttributesConfig.getPlaceholder());
}
});
}
private void uniqueLabelAndPlaceholder(DossierAttributeConfigEntity dossierAttributesConfig) {

View File

@ -115,7 +115,7 @@ public class FileAttributeConfigPersistenceService {
}
if (fileAttributeConfig.getId() == null) {
fileAttributeConfig.setId(UUID.randomUUID().toString());
setPlaceholder(fileAttributeConfig);
checkAndSetPlaceholder(fileAttributeConfig);
uniqueLabelAndPlaceholder(fileAttributeConfig);
return fileAttributeConfigRepository.save(fileAttributeConfig);
} else {
@ -131,12 +131,13 @@ public class FileAttributeConfigPersistenceService {
config.setDisplayedInFileList(fileAttributeConfig.isDisplayedInFileList());
config.setPrimaryAttribute(fileAttributeConfig.isPrimaryAttribute());
config.setFilterable(fileAttributeConfig.isFilterable());
setPlaceholder(config);
checkAndSetPlaceholder(fileAttributeConfig);
config.setPlaceholder(fileAttributeConfig.getPlaceholder());
uniqueLabelAndPlaceholder(fileAttributeConfig);
return fileAttributeConfigRepository.save(config);
} else {
fileAttributeConfig.setId(UUID.randomUUID().toString());
setPlaceholder(fileAttributeConfig);
checkAndSetPlaceholder(fileAttributeConfig);
uniqueLabelAndPlaceholder(fileAttributeConfig);
return fileAttributeConfigRepository.save(fileAttributeConfig);
}
@ -151,12 +152,25 @@ public class FileAttributeConfigPersistenceService {
}
private void setPlaceholder(FileAttributeConfigEntity fileAttributeConfig) {
private void checkAndSetPlaceholder(FileAttributeConfigEntity fileAttributeConfig) {
String placeholder = "{{file.attribute." + StringUtils.remove(WordUtils.capitalizeFully(fileAttributeConfig.getLabel(), ' '), " ") + "}}";
fileAttributeConfig.setPlaceholder(placeholder);
if (StringUtils.isEmpty(fileAttributeConfig.getPlaceholder())) {
String placeholder = "{{file.attribute." + StringUtils.remove(WordUtils.capitalizeFully(fileAttributeConfig.getLabel(), ' '), " ") + "}}";
fileAttributeConfig.setPlaceholder(placeholder);
} else {
uniquePlaceholder(fileAttributeConfig);
}
}
private void uniquePlaceholder(FileAttributeConfigEntity fileAttributeConfig) {
getFileAttributes(fileAttributeConfig.getDossierTemplate().getId()).stream()
.filter(d -> !d.getId().equals(fileAttributeConfig.getId()))
.forEach(other -> {
if (other.getPlaceholder().equalsIgnoreCase(fileAttributeConfig.getPlaceholder())) {
throw new ConflictException("Placeholder already exists.");
}
});
}
private void uniqueLabelAndPlaceholder(FileAttributeConfigEntity fileAttributeConfig) {

View File

@ -51,15 +51,23 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest {
attribute.setEditable(true);
attribute.setType(DossierAttributeType.TEXT);
dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
var created = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
assertThat(created.getPlaceholder()).isEqualTo("{{dossier.attribute.Test}}");
loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId());
assertThat(loadedAttributes.getDossierAttributeConfigs()).isNotEmpty();
attribute.setId(created.getId());
attribute.setLabel("updated test");
var updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
assertThat(updated.getLabel()).isEqualTo("updated test");
assertThat(updated.getPlaceholder()).isEqualTo("{{dossier.attribute.UpdatedTest}}");
attribute.setPlaceholder("{{dossier.attribute.MyOwnPlaceholder}}");
updated = dossierAttributeConfigClient.addOrUpdateDossierAttributeConfig(dossier.getDossierTemplateId(), attribute);
assertThat(updated.getLabel()).isEqualTo("updated test");
assertThat(updated.getPlaceholder()).isEqualTo("{{dossier.attribute.MyOwnPlaceholder}}");
dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), new DossierAttributesConfig());
loadedAttributes = dossierAttributeConfigClient.getDossierAttributesConfig(dossier.getDossierTemplateId());
assertThat(loadedAttributes.getDossierAttributeConfigs()).isEmpty();

View File

@ -88,9 +88,10 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedConfig.getEncoding()).isEqualTo(ASCII_ENCODING);
List<FileAttributeConfig> configs = new ArrayList<>();
String myOwnPlaceholder = "{{file.attribute.MyOwnPlaceholder}}";
configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build());
configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(true).label("Attribute A").build());
FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B").build();
FileAttributeConfig attributeB = FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(true).label("Attribute B").placeholder(myOwnPlaceholder).build();
configs.add(attributeB);
configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute C").primaryAttribute(false).label("Attribute C").build());
configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute D").primaryAttribute(false).label("Attribute D").build());
@ -104,6 +105,7 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
.findAny()
.get();
assertThat(primaryAttribute.getLabel()).isEqualTo(attributeB.getLabel());
assertThat(primaryAttribute.getPlaceholder()).isEqualTo(attributeB.getPlaceholder());
fileAttributeConfigClient.deleteFileAttribute(dossier.getDossierTemplateId(),
loadedConfigs.stream()
@ -129,6 +131,8 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
var created = fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig);
loadedConfigs = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()).getFileAttributeConfigs();
assertThat(loadedConfigs.size()).isEqualTo(4);
assertThat(created.getPlaceholder()).isEqualTo("{{file.attribute.TestAttribute}}");
assertThat(created.getCsvColumnHeader()).isNull();
newConfig.setId(created.getId());
newConfig.setLabel("Test Attribute Update");
@ -138,6 +142,14 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
assertThat(updated.getLabel()).isEqualTo("Test Attribute Update");
assertThat(updated.getPlaceholder()).isEqualTo("{{file.attribute.TestAttributeUpdate}}");
newConfig.setPlaceholder(myOwnPlaceholder);
var e = assertThrows(FeignException.class,
() -> fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig));
assertEquals(409, e.status());
newConfig.setPlaceholder("{{file.attribute.TestAttributeUpdate2}}");
updated = fileAttributeConfigClient.addOrUpdateFileAttribute(dossier.getDossierTemplateId(), newConfig);
assertThat(updated.getPlaceholder()).isEqualTo("{{file.attribute.TestAttributeUpdate2}}");
assertThat(fileClient.getFileStatus(dossier.getId(), file.getId()).getLastFileAttributeChange()).isNull();
fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), new FileAttributes(Map.of(updated.getId(), "Lorem Ipsum")));