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:
commit
01212da926
@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user