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.setStatus(FileStatus.DELETED);
file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted()); file.setDeleted(file.getDeleted() == null ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : file.getDeleted());
file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setHardDeletedTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
fileAttributesRepository.deleteByFileId(fileId);
}, () -> { }, () -> {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
}); });

View File

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