RED-10529: Primary attribute removed after changing encoding type

This commit is contained in:
maverickstuder 2024-11-25 17:23:35 +01:00
parent 15ca9ade53
commit 5210b8ec40
4 changed files with 85 additions and 8 deletions

View File

@ -61,9 +61,9 @@ public class FileAttributesController implements FileAttributesResource {
}
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId,
MagicConverter.convert(fileAttributesConfig, FileAttributesGeneralConfigurationEntity.class));
var result = fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId,
MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(),
FileAttributeConfigEntity.class));
fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId,
MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(), FileAttributeConfigEntity.class));
auditPersistenceService.audit(AuditRequest.builder()
.userId(KeycloakSecurity.getUserId())
.objectId(dossierTemplateId)
@ -74,7 +74,7 @@ public class FileAttributesController implements FileAttributesResource {
.filenameMappingColumnHeaderName(fileAttributesConfig.getFilenameMappingColumnHeaderName())
.delimiter(fileAttributesConfig.getDelimiter())
.encoding(fileAttributesConfig.getEncoding())
.fileAttributeConfigs(MagicConverter.convert(result, FileAttributeConfig.class))
.fileAttributeConfigs(MagicConverter.convert(fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId), FileAttributeConfig.class))
.build();
}

View File

@ -81,7 +81,7 @@ public class FileAttributeConfigPersistenceService {
@Transactional
public List<FileAttributeConfigEntity> setFileAttributesConfig(String dossierTemplateId, List<FileAttributeConfigEntity> fileAttributesConfig) {
public void setFileAttributesConfig(String dossierTemplateId, List<FileAttributeConfigEntity> fileAttributesConfig) {
Set<String> toSetIds = fileAttributesConfig.stream()
.map(FileAttributeConfigEntity::getId)
@ -98,8 +98,6 @@ public class FileAttributeConfigPersistenceService {
fileAttributesRepository.deleteByFileAttributeConfigId(ctr.getId());
fileAttributeConfigRepository.deleteById(ctr.getId());
});
return getFileAttributes(dossierTemplateId);
}

View File

@ -15,7 +15,7 @@ public interface FileAttributeConfigRepository extends JpaRepository<FileAttribu
List<FileAttributeConfigEntity> findByDossierTemplateId(String dossierTemplateId);
@Modifying
@Modifying(clearAutomatically = true)
@Query("update FileAttributeConfigEntity e set e.primaryAttribute = false where e.dossierTemplate.id = :dossierTemplateId")
void updateAllPrimaryAttributeValuesToFalse(@Param("dossierTemplateId") String dossierTemplateId);

View File

@ -396,4 +396,83 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
}
@SneakyThrows
@Test
public void testUpdatePrimaryAttributeAndVerify() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
List<FileAttributeConfig> initialConfigs = new ArrayList<>();
initialConfigs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute A")
.primaryAttribute(true)
.label("Attribute A")
.build());
initialConfigs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute B")
.primaryAttribute(false)
.label("Attribute B")
.build());
initialConfigs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute C")
.primaryAttribute(false)
.label("Attribute C")
.build());
FileAttributesConfig initialConfig = new FileAttributesConfig();
initialConfig.setDelimiter(",");
initialConfig.setEncoding(UTF_ENCODING);
initialConfig.setFilenameMappingColumnHeaderName("Name");
initialConfig.setFileAttributeConfigs(initialConfigs);
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), initialConfig);
var loadedInitialConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId());
assertThat(loadedInitialConfig.getFileAttributeConfigs()).hasSize(3);
FileAttributeConfig initialPrimary = loadedInitialConfig.getFileAttributeConfigs().stream()
.filter(FileAttributeConfig::isPrimaryAttribute)
.findFirst()
.orElseThrow(() -> new AssertionError("No primary attribute found initially"));
assertThat(initialPrimary.getLabel()).isEqualTo("Attribute A");
List<FileAttributeConfig> updatedConfigs = loadedInitialConfig.getFileAttributeConfigs().stream()
.map(config -> {
if (config.getLabel().equals("Attribute B")) {
config.setPrimaryAttribute(true);
} else if (config.getLabel().equals("Attribute A")) {
config.setPrimaryAttribute(false);
}
return config;
})
.collect(Collectors.toList());
FileAttributesConfig updatedConfig = new FileAttributesConfig();
updatedConfig.setDelimiter(loadedInitialConfig.getDelimiter());
updatedConfig.setEncoding(loadedInitialConfig.getEncoding());
updatedConfig.setFilenameMappingColumnHeaderName(loadedInitialConfig.getFilenameMappingColumnHeaderName());
updatedConfig.setFileAttributeConfigs(updatedConfigs);
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), updatedConfig);
var loadedUpdatedConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId());
assertThat(loadedUpdatedConfig.getFileAttributeConfigs()).hasSize(3);
FileAttributeConfig newPrimary = loadedUpdatedConfig.getFileAttributeConfigs().stream()
.filter(FileAttributeConfig::isPrimaryAttribute)
.findFirst()
.orElseThrow(() -> new AssertionError("No primary attribute found after update"));
assertThat(newPrimary.getLabel()).isEqualTo("Attribute B");
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), loadedUpdatedConfig);
var reloadedConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId());
assertThat(reloadedConfig.getFileAttributeConfigs()).hasSize(3);
FileAttributeConfig verifiedPrimary = reloadedConfig.getFileAttributeConfigs().stream()
.filter(FileAttributeConfig::isPrimaryAttribute)
.findFirst()
.orElseThrow(() -> new AssertionError("No primary attribute found after reapplying configuration"));
assertThat(verifiedPrimary.getLabel()).isEqualTo("Attribute B");
}
}