Pull request #74: RED-2455 Bugfix: Delete file attributes if hard deleting file.

Merge in RED/persistence-service from RED-2455 to master

* commit 'b7107e35207736d9b18f139160daa233e450f321':
  RED-2455 Bugfix: Delete file attributes if hard deleting file. And added test
This commit is contained in:
Philipp Schramm 2021-10-18 11:07:35 +02:00 committed by Dominique Eiflaender
commit 01212da926
3 changed files with 117 additions and 37 deletions

View File

@ -254,6 +254,8 @@ public class FileStatusPersistenceService {
file.setStatus(FileStatus.DELETED);
file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted());
file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
fileAttributesRepository.deleteByFileId(fileId);
}, () -> {
throw new NotFoundException("Unknown file=" + fileId);
});

View File

@ -1,31 +1,34 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
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.dossiertemplate.FileAttributesGeneralConfiguration;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig;
import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;
import org.assertj.core.util.Lists;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.commons.io.IOUtils;
import org.assertj.core.util.Lists;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileAttributeConfigClient;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient;
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.dossiertemplate.FileAttributesGeneralConfiguration;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ImportCsvRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeConfig;
import lombok.SneakyThrows;
public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileTesterAndProvider fileTesterAndProvider;
@ -41,15 +44,18 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
@Autowired
private FileClient fileClient;
@Autowired
private UploadClient uploadClient;
@SneakyThrows
@Test
public void testFileAttributes() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
FileAttributesGeneralConfiguration generalConfig = new FileAttributesGeneralConfiguration();
generalConfig.setDelimiter(",");
generalConfig.setFilenameMappingColumnHeaderName("Name");
@ -61,36 +67,48 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
List<FileAttributeConfig> configs = new ArrayList<>();
configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build());
configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute A").primaryAttribute(false).label("Attribute A").build());
configs.add(FileAttributeConfig.builder().csvColumnHeader("Attribute B").primaryAttribute(false).label("Attribute B").build());
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());
configs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute A")
.primaryAttribute(false)
.label("Attribute A")
.build());
configs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute B")
.primaryAttribute(false)
.label("Attribute B")
.build());
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());
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), configs);
List<FileAttributeConfig> loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
assertThat(loadedConfigs.size()).isEqualTo(5);
fileAttributeConfigClient.deleteFileAttributeConfigs(loadedConfigs.stream()
.filter(a -> a.getCsvColumnHeader().equalsIgnoreCase("Attribute C"))
.findAny()
.map(FileAttributeConfig::getId)
.orElseThrow(() -> new IllegalArgumentException("Should exists!")));
fileAttributeConfigClient.deleteFileAttributeConfigs(loadedConfigs.stream()
.filter(a -> a.getCsvColumnHeader().equalsIgnoreCase("Attribute D"))
.findAny()
.map(FileAttributeConfig::getId)
.stream().collect(Collectors.toList()));
.stream()
.collect(Collectors.toList()));
loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
assertThat(loadedConfigs.size()).isEqualTo(3);
FileAttributeConfig newConfig = new FileAttributeConfig();
newConfig.setPrimaryAttribute(true);
newConfig.setLabel("Test Attribute");
@ -98,7 +116,6 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
assertThat(loadedConfigs.size()).isEqualTo(4);
newConfig.setId(created.getId());
newConfig.setLabel("Test Attribute Update");
var updated = fileAttributeConfigClient.addOrUpdateFileAttributeConfig(dossier.getDossierTemplateId(), newConfig);
@ -106,21 +123,18 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedConfigs.size()).isEqualTo(4);
assertThat(updated.getLabel()).isEqualTo("Test Attribute Update");
fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), Map.of(updated.getId(), "Lorem Ipsum"));
Map<String, String> fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
Map<String, String> fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId())
.getFileAttributes();
assertThat(fileAttributes.size()).isEqualTo(1);
assertThat(fileAttributes.entrySet().iterator().next().getValue()).isEqualTo("Lorem Ipsum");
var request = new ImportCsvRequest();
request.setCsvFile(IOUtils.toByteArray(new ClassPathResource("files/test.csv").getInputStream()));
fileAttributeClient.importCsv(dossier.getId(), request);
fileAttributeClient.importCsv(dossier.getId(), request);
fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
assertThat(fileAttributes.size()).isEqualTo(2);
@ -130,7 +144,6 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
assertThat(fileAttributes.size()).isEqualTo(2);
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList());
loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
@ -138,8 +151,73 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
assertThat(fileAttributes.size()).isEqualTo(0);
}
@SneakyThrows
@Test
public void testDeleteFile() {
// Create file with attributes
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
FileAttributesGeneralConfiguration generalConfig = new FileAttributesGeneralConfiguration();
generalConfig.setDelimiter(",");
generalConfig.setFilenameMappingColumnHeaderName("Name");
generalConfig.setDossierTemplateId(dossier.getDossierTemplateId());
fileAttributeConfigClient.setFileAttributesGeneralConfig(dossier.getDossierTemplateId(), generalConfig);
var loadedConfig = fileAttributeConfigClient.getFileAttributesGeneralConfig(dossier.getDossierTemplateId());
assertThat(loadedConfig.getDelimiter()).isEqualTo(",");
List<FileAttributeConfig> configs = new ArrayList<>();
configs.add(FileAttributeConfig.builder().csvColumnHeader("Name").primaryAttribute(true).label("Name").build());
configs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute A")
.primaryAttribute(false)
.label("Attribute A")
.build());
configs.add(FileAttributeConfig.builder()
.csvColumnHeader("Attribute B")
.primaryAttribute(false)
.label("Attribute B")
.build());
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());
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), configs);
List<FileAttributeConfig> loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId());
assertThat(loadedConfigs.size()).isEqualTo(5);
fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), Map.of(loadedConfigs.get(0)
.getId(), "Lorem Ipsum"));
Map<String, String> fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId())
.getFileAttributes();
assertThat(fileAttributes.size()).isEqualTo(1);
assertThat(fileAttributes.entrySet().iterator().next().getValue()).isEqualTo("Lorem Ipsum");
// Delete file
uploadClient.deleteFile(dossier.getId(), file.getId());
uploadClient.hardDeleteFiles(dossier.getId(), Sets.newHashSet(file.getId()));
var deletedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(deletedFile.getFileAttributes()).isEmpty();
// Reupload file
var newFile = fileTesterAndProvider.testAndProvideFile(dossier);
assertThat(file.getId()).isEqualTo(newFile.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), newFile.getId());
assertThat(loadedFile.getFileAttributes()).isEmpty();
}
}

View File

@ -141,7 +141,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
}
@Test
public void testFilewithRedactions() {
public void testFileWithRedactions() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();