From b7107e35207736d9b18f139160daa233e450f321 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Mon, 18 Oct 2021 11:02:53 +0200 Subject: [PATCH] RED-2455 Bugfix: Delete file attributes if hard deleting file. And added test --- .../FileStatusPersistenceService.java | 2 + .../integration/tests/FileAttributeTest.java | 150 +++++++++++++----- .../v1/server/integration/tests/FileTest.java | 2 +- 3 files changed, 117 insertions(+), 37 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java index f3132f39a..c58e05441 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileStatusPersistenceService.java @@ -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); }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index 6cc7e209f..d57a99b37 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -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 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 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 fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + Map 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 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 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 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(); + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index b8ea9a261..07767d080 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -141,7 +141,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { } @Test - public void testFilewithRedactions() { + public void testFileWithRedactions() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();