From e036c4183e26a901115def9423d1b76fdd092e91 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 13:08:50 +0300 Subject: [PATCH] more tests --- .../FileAttributesGeneralConfiguration.java | 2 + .../model/data/dossier/DossierTemplate.java | 11 +- .../v1/api/model/data/dossier/File.java | 10 +- .../api/model/data/dossier/FileAttribute.java | 3 + .../data/dossier/FileAttributeConfig.java | 8 + .../FileAttributesConfigResource.java | 27 ++-- ...FileAttributeConfigPersistenceService.java | 31 ++-- .../FileStatusPersistenceService.java | 4 + .../FileAttributeConfigRepository.java | 4 +- .../repository/FileAttributesRepository.java | 14 ++ .../FileAttributesConfigController.java | 10 +- .../controller/FileAttributesController.java | 5 + .../integration/tests/FileAttributeTest.java | 139 ++++++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 22 +++ .../test/resources/files/export_summary.csv | 5 - .../src/test/resources/files/test.csv | 2 + 16 files changed, 255 insertions(+), 42 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java delete mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/resources/files/export_summary.csv create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/resources/files/test.csv diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/FileAttributesGeneralConfiguration.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/FileAttributesGeneralConfiguration.java index 69f9df3b3..f9615b8d2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/FileAttributesGeneralConfiguration.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/FileAttributesGeneralConfiguration.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.configuration; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; import lombok.AllArgsConstructor; import lombok.Data; @@ -23,6 +24,7 @@ public class FileAttributesGeneralConfiguration { private String delimiter; @OneToOne + @JsonIgnore @MapsId("dossierTemplateId") private DossierTemplate dossierTemplate; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java index 7f1cc17d6..9b4271fbe 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierTemplate.java @@ -50,14 +50,19 @@ public class DossierTemplate { @ElementCollection private Set downloadFileTypes = new HashSet<>(); - @ManyToMany + @JsonIgnore + @OneToMany(mappedBy = "dossierTemplate") private List reportTemplates = new ArrayList<>(); - @OneToMany @JsonIgnore + @OneToMany(mappedBy = "dossierTemplate") private List dossierTypes = new ArrayList<>(); - @OneToMany @JsonIgnore + @OneToMany(mappedBy = "dossierTemplate") private List dossiers = new ArrayList<>(); + + @JsonIgnore + @OneToMany(mappedBy = "dossierTemplate") + private List fileAttributeConfigs = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/File.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/File.java index 543f5fa5d..8c8641860 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/File.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/File.java @@ -1,9 +1,12 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.dossier; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.*; import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -112,11 +115,12 @@ public class File { private int analysisVersion; @ElementCollection - private Set excludedPages; + private Set excludedPages = new HashSet<>(); - @OneToMany(mappedBy = "file", fetch = FetchType.LAZY, cascade = CascadeType.ALL) - private List fileAttributes; + @OneToMany(mappedBy = "file", fetch = FetchType.EAGER, cascade = CascadeType.ALL) + private List fileAttributes = new ArrayList<>(); + @JsonIgnore @ManyToOne private Dossier dossier; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttribute.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttribute.java index 8798e3e1d..f716bf4d0 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttribute.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttribute.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.dossier; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import javax.persistence.*; @@ -16,10 +17,12 @@ public class FileAttribute { @Column private String value; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @MapsId("fileId") private File file; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @MapsId("fileAttributeConfigId") private FileAttributeConfig fileAttributeConfig; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttributeConfig.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttributeConfig.java index 6ca86869a..a9a98a025 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttributeConfig.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/FileAttributeConfig.java @@ -1,11 +1,18 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.dossier; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import javax.persistence.*; @Data @Entity +@NoArgsConstructor +@AllArgsConstructor +@Builder @Table(name = "file_attribute_config") public class FileAttributeConfig { @@ -29,6 +36,7 @@ public class FileAttributeConfig { private FileAttributeType type = FileAttributeType.TEXT; @ManyToOne + @JsonIgnore private DossierTemplate dossierTemplate; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java index bddd40063..986c7eb9e 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/FileAttributesConfigResource.java @@ -14,19 +14,14 @@ public interface FileAttributesConfigResource { String FILE_ATTRIBUTE_PATH = "/fileAttribute"; String BASE_CONFIG_PATH = "/baseConfig"; + String DELETE_PATH = "/delete"; + String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}"; String FILE_ATTRIBUTE_ID = "fileAttributeId"; String FILE_ATTRIBUTE_ID_PATH_VARIABLE = "/{" + FILE_ATTRIBUTE_ID + "}"; - @ResponseBody - @ResponseStatus(HttpStatus.OK) - @PostMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - FileAttributeConfig addOrUpdateFileAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, - @RequestBody FileAttributeConfig fileAttributeConfig); - - @ResponseBody @ResponseStatus(HttpStatus.OK) @PutMapping(value = FILE_ATTRIBUTES_PATH + BASE_CONFIG_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -36,7 +31,13 @@ public interface FileAttributesConfigResource { @ResponseBody @ResponseStatus(HttpStatus.OK) @GetMapping(value = FILE_ATTRIBUTES_PATH + BASE_CONFIG_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - FileAttributesGeneralConfiguration getFileAttributesGeneralConfiguration(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); + FileAttributesGeneralConfiguration getFileAttributesGeneralConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); + + @ResponseBody + @ResponseStatus(HttpStatus.OK) + @PostMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + FileAttributeConfig addOrUpdateFileAttributeConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @RequestBody FileAttributeConfig fileAttributeConfig); @ResponseBody @ResponseStatus(HttpStatus.OK) @@ -46,19 +47,19 @@ public interface FileAttributesConfigResource { @ResponseStatus(HttpStatus.NO_CONTENT) - @DeleteMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + FILE_ATTRIBUTE_ID_PATH_VARIABLE) - void deleteFileAttribute(@PathVariable(FILE_ATTRIBUTE_ID) String fileAttributeId); + @DeleteMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + FILE_ATTRIBUTE_ID_PATH_VARIABLE) + void deleteFileAttributeConfigs(@PathVariable(FILE_ATTRIBUTE_ID) String fileAttributeId); @ResponseStatus(HttpStatus.NO_CONTENT) - @PostMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + "/delete") - void deleteFileAttributes(@RequestBody List fileAttributeIds); + @PostMapping(value = FILE_ATTRIBUTES_PATH + FILE_ATTRIBUTE_PATH + DELETE_PATH) + void deleteFileAttributeConfigs(@RequestBody List fileAttributeIds); @ResponseBody @ResponseStatus(HttpStatus.OK) @GetMapping(value = FILE_ATTRIBUTES_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - List getFileAttributes(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); + List getFileAttributeConfigs(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java index 10e22f2f2..28243b739 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java @@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributeConfigRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesGeneralConfigurationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.FileAttributesGeneralConfiguration; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig; import lombok.RequiredArgsConstructor; @@ -14,9 +15,8 @@ import org.apache.commons.lang3.text.WordUtils; import org.springframework.stereotype.Service; import javax.transaction.Transactional; -import java.util.List; -import java.util.Optional; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; @Service @RequiredArgsConstructor @@ -25,6 +25,7 @@ public class FileAttributeConfigPersistenceService { private final FileAttributeConfigRepository fileAttributeConfigRepository; private final FileAttributesGeneralConfigurationRepository fileAttributesGeneralConfigurationRepository; private final DossierTemplateRepository dossierTemplateRepository; + private final FileAttributesRepository fileAttributesRepository; public FileAttributeConfig addOrUpdateFileAttribute(String dossierTemplateId, FileAttributeConfig fileAttributeConfig) { var dossierTemplate = dossierTemplateRepository.getOne(dossierTemplateId); @@ -73,25 +74,33 @@ public class FileAttributeConfigPersistenceService { @Transactional public List setFileAttributesConfig(String dossierTemplateId, List fileAttributesConfig) { - fileAttributeConfigRepository.deleteByDossierTemplateId(dossierTemplateId); - var dossierTemplate = dossierTemplateRepository.getOne(dossierTemplateId); - fileAttributesConfig.forEach(d -> { - d.setDossierTemplate(dossierTemplate); - d.setId(UUID.randomUUID().toString()); - setPlaceholder(d); - uniqueLabelAndPlaceholder(d); + Set toSetIds = fileAttributesConfig.stream().map(FileAttributeConfig::getId).filter(Objects::nonNull).collect(Collectors.toSet()); + var currentConfigs = fileAttributeConfigRepository.findByDossierTemplateId(dossierTemplateId); + Set configsToRemove = currentConfigs.stream().filter(c -> !toSetIds.contains(c.getId())).collect(Collectors.toSet()); + + + fileAttributesConfig.forEach(fac -> addOrUpdateFileAttribute(dossierTemplateId, fac)); + + configsToRemove.forEach(ctr -> { + fileAttributesRepository.deleteByFileAttributeConfigId(ctr.getId()); + fileAttributeConfigRepository.deleteById(ctr.getId()); }); + return getFileAttributes(dossierTemplateId); } @Transactional public void deleteFileAttribute(String fileAttributeId) { + fileAttributesRepository.deleteByFileAttributeConfigId(fileAttributeId); fileAttributeConfigRepository.deleteById(fileAttributeId); } @Transactional public void deleteFileAttributes(List fileAttributeIds) { - fileAttributeIds.forEach(fileAttributeConfigRepository::deleteById); + fileAttributeIds.forEach(fileAttributeId -> { + fileAttributesRepository.deleteByFileAttributeConfigId(fileAttributeId); + fileAttributeConfigRepository.deleteById(fileAttributeId); + }); } public List getFileAttributes(String dossierTemplateId) { 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 0256c87b9..7eef3ffa1 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 @@ -1,7 +1,9 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileStatus; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; @@ -12,7 +14,9 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.time.OffsetDateTime; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; @Service diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java index 7e437f3ab..b9c824f02 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java @@ -2,12 +2,12 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; -public interface FileAttributeConfigRepository extends JpaRepository { +public interface FileAttributeConfigRepository extends JpaRepository { List findByDossierTemplateId(String dossierTemplateId); - void deleteByDossierTemplateId(String dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java new file mode 100644 index 000000000..7e7a0ed0b --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributesRepository.java @@ -0,0 +1,14 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; + +public interface FileAttributesRepository extends JpaRepository { + + @Modifying + @Query("DELETE FROM FileAttribute f where f.fileAttributeId.fileAttributeConfigId = :fileAttributeConfigId") + void deleteByFileAttributeConfigId(String fileAttributeConfigId); + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesConfigController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesConfigController.java index 07bf6b105..79b6db827 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesConfigController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesConfigController.java @@ -21,7 +21,7 @@ public class FileAttributesConfigController implements FileAttributesConfigResou private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; @Override - public FileAttributeConfig addOrUpdateFileAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody FileAttributeConfig fileAttributeConfig) { + public FileAttributeConfig addOrUpdateFileAttributeConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody FileAttributeConfig fileAttributeConfig) { return fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, fileAttributeConfig); } @@ -32,7 +32,7 @@ public class FileAttributesConfigController implements FileAttributesConfigResou } @Override - public FileAttributesGeneralConfiguration getFileAttributesGeneralConfiguration(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { + public FileAttributesGeneralConfiguration getFileAttributesGeneralConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { return fileAttributeConfigPersistenceService.getFileAttributesGeneralConfiguration(dossierTemplateId); } @@ -42,17 +42,17 @@ public class FileAttributesConfigController implements FileAttributesConfigResou } @Override - public void deleteFileAttribute(@PathVariable(FILE_ATTRIBUTE_ID) String fileAttributeId) { + public void deleteFileAttributeConfigs(@PathVariable(FILE_ATTRIBUTE_ID) String fileAttributeId) { fileAttributeConfigPersistenceService.deleteFileAttribute(fileAttributeId); } @Override - public void deleteFileAttributes(@RequestBody List fileAttributeIds) { + public void deleteFileAttributeConfigs(@RequestBody List fileAttributeIds) { fileAttributeConfigPersistenceService.deleteFileAttributes(fileAttributeIds); } @Override - public List getFileAttributes(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { + public List getFileAttributeConfigs(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { return fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java index 3b3a22ec0..23058d11f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/FileAttributesController.java @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import javax.transaction.Transactional; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -43,6 +44,7 @@ public class FileAttributesController implements FileAttributesResource { private final DossierService dossierService; + @Transactional public ImportCsvResponse importCsv(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody ImportCsvRequest importCsvRequest) { @@ -113,6 +115,8 @@ public class FileAttributesController implements FileAttributesResource { } + + @Transactional public void setFileAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Map fileAttributesMap) { @@ -126,6 +130,7 @@ public class FileAttributesController implements FileAttributesResource { return fileAttributesMap.entrySet().stream().map(entry -> { var fa = new FileAttribute(); + fa.setFileAttributeId(new FileAttribute.FileAttributeId()); fa.setFile(file); fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() -> new BadRequestException("Invalid File Attribute Id"))); 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 new file mode 100644 index 000000000..d95a812da --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -0,0 +1,139 @@ +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.ImportCsvRequest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.FileAttributesGeneralConfiguration; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttribute; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.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.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class FileAttributeTest extends AbstractPersistenceServerServiceTest { + + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private FileAttributeConfigClient fileAttributeConfigClient; + + @Autowired + private FileAttributeClient fileAttributeClient; + + @Autowired + private FileClient fileClient; + + + @SneakyThrows + @Test + public void testFileAttributes() { + 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); + + + 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())); + + + loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); + assertThat(loadedConfigs.size()).isEqualTo(3); + + + FileAttributeConfig newConfig = new FileAttributeConfig(); + newConfig.setPrimaryAttribute(true); + newConfig.setLabel("Test Attribute"); + var created = fileAttributeConfigClient.addOrUpdateFileAttributeConfig(dossier.getDossierTemplateId(), newConfig); + 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); + loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); + assertThat(loadedConfigs.size()).isEqualTo(4); + assertThat(updated.getLabel()).isEqualTo("Test Attribute Update"); + + + fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), Map.of(updated.getId(), "Lorem Ipsum")); + + + List fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + assertThat(fileAttributes.size()).isEqualTo(1); + assertThat(fileAttributes.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); + + + fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + assertThat(fileAttributes.size()).isEqualTo(3); + + + fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList()); + + loadedConfigs = fileAttributeConfigClient.getFileAttributeConfigs(dossier.getDossierTemplateId()); + assertThat(loadedConfigs.size()).isEqualTo(0); + + fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes(); + assertThat(fileAttributes.size()).isEqualTo(0); + + } + + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 7a35cf0fb..a6204fc9e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -162,8 +162,30 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private LegalBasisMappingRepository legalBasisMappingRepository; + @Autowired + private FileAttributeConfigRepository fileAttributeConfigRepository; + + @Autowired + private FileAttributesGeneralConfigurationRepository fileAttributesGeneralConfigurationRepository; + + @Autowired + private ReportTemplateRepository reportTemplateRepository; + + @Autowired + private DigitalSignatureRepository digitalSignatureRepository; + + @Autowired + private FileAttributesRepository fileAttributesRepository; + @After public void afterTests() { + fileAttributesRepository.deleteAll(); + watermarkRepository.deleteAll(); + smtpRepository.deleteAll(); + digitalSignatureRepository.deleteAll(); + fileAttributesGeneralConfigurationRepository.deleteAll(); + fileAttributeConfigRepository.deleteAll(); + reportTemplateRepository.deleteAll(); typeRepository.deleteAll(); viewedPagesRepository.deleteAll(); fileRepository.deleteAll(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/export_summary.csv b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/export_summary.csv deleted file mode 100644 index 6c2b8eb75..000000000 --- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/export_summary.csv +++ /dev/null @@ -1,5 +0,0 @@ -PMRA Document Number,GAP Active Ingredient,Regulatory Utility,Document Comment,SIC Number,Protocol Number,Protocol Number,Data Evaluation Record,Audience,Original Retirement Date,Regulatory Released,Regulatory Authority,Regulatory Authority (legacy to remove),Source Owner,Legacy Primary OECD Code,Legacy Source Organisation,Regulator Comments,Contains Registered Composition?,File Name,FTP Source Location,Submission Format Needed,Legacy Report Number,Sales Unit,Address,ANVISA Process Number,Source Number,Legacy Migration Path,Review Completion Date,Registration Number,Agency Dossier Registration Type,Submission Version,Media Comments,Literature Citation,Document Language,Notes,Study Location,Materials,Approver,Subtype,Test Facility,Is Latest Version,Consumer,Classification,Guideline,TRP Type,Legacy System Date,Function,Artist,Document Title,PI Number,Legacy Version Description,PI Number,Incoming from,Annotations (Unresolved),Work To Date,Copyright Clearance Obtained?,Summary Type,Annotations (Claim Links),Latest Source Minor Version,Regulatory Category,SYN Letter Number,Work From Date,Product,Version Creation Date,Governance Committee,Test Facility (legacy to remove),Regulatory Finalization Date,Imported file?,Status,Information Tracking Submission Package,Approval Type,Media Description,Duration,Legacy System,Archive Date,Exporting country,Regulatory Tracking Number,Annotations (Anchors),Information Tracking,Document Number,GAP Usage Information,Report Number,Legacy Reg Document Number,Legal Representative 2,Registering Company,File Created By,Legacy EPA Decision Code,Meeting Minutes,Product Safety Finalization Date,Report Type,Archived Date,Legacy Other PMRA Data Codes,Template Document Type,Color Space,Legal Representative 1,Document Author,CrossLink,Annotations (Notes),Suggested Links,Assessment Type,Legacy Species Commodity,TK Number,Legacy Test Facilities,Planned Completion Date,PRF Number,Registration Item Country,Legacy Target Species,Legacy Owning Organisation,Archive Number,Protocol Type,Submission Output Format,Submission Date,Coordinator,Regulatory Reporting Date,Annotations (Lines),Field Trial Number,Batch Number,Legacy Version Number,External ID,Author Names,Sponsor Organisation (legacy to remove),Literature Type,Sponsor Organisation,Legacy Crop Host,Document Edition,Agreement Expiry Date,TRP Usage,Legacy EPA Submission Type,Security Classification,Source Document Name,Syngenta Address,Outgoing to (legacy to remove),Link Status,Legacy System Document ID,Copyright,PMRA Registration Number,Annotations (All),SU,Source Vault Name,Latest Source Major Version,Legacy Other OECD Codes,Version Created By,Subarea,Reviewer,Owning Organisation (legacy to remove),Dossier,Viewer,Regulatory Territory,Lifecycle,Claims,Bound Source Minor Version,Global ID,Legacy Regulatory Authorities,Outgoing to,Additional Information,Year,Organism,File Last Modified By,Requires Attachment of a Signature Page?,Source Binding Rule,Destination country,Cross-Reference Submission Number,Name,Issue Topic,Pages,Type,Reason for Retiring,Rule,Type of Review,Original Finalization Date,Trade Name,Transmittal Document,Pages OCR'ed (%),Legacy Object ID(s),Protocol Number,Last Modified By,Annotations (Approved Links),Request Type,Binder,Author,Last Modified Date,Non-English Document Title,Media Location,Created By,Editor,Owner,CRO Report Number,Format,Legacy Discipline,Major Version Number,Created From,Active Ingredients,Archive Location,EPA Registration Number,Retirement Date,Annotations (Links),TRP Document,Finalization Date,Legacy Task Number,Legal Details,OCR Requested,Global Version ID,Publicly Published,Document Date,MRID Number,Legacy Reg Topic,Requires Review and Approval?,Annotations (Auto Links),Subareas,Product Safety Reporting Date,Media Title,Minor Version Number,Legacy Primary PMRA Data Code,Requestor,Owning Organisation,Zone,File Last Modified Date,Contact Person,File Created Date,Amendment Justification,CDPR Number,Legacy EPA Submission Date,Supports Agency Dossier,Field Trial Year,Reason for Un-retiring,TRP Topic,Bound Source Major Version,Keywords,Legacy Author Name(s),Export File Name,Size,Source Link,This content is a translation?,Quality Assurance Standard,Legacy Fed Reg Number,Checksum,Created Date,Annotations (Resolved),User Task,Review Start Date,test list,Incoming from (legacy to remove),Rendition Profile,Path,URL -,,Country Specific,,,,,No,,,Yes,,,,,Syngenta,,,Lambda-cyhalothrin - EU AIR5 - Document A - Statement of the context in which the dossier is submit.doc,,,,,,,,,,,,,,,English,,,PP321,,Authority Form / Document,,TRUE,"All Internal Users, Syngenta Read Only Restricted, Syngenta Read Only Non Restricted",,,,16/07/2019,,,Lambda-cyhalothrin - EU AIR5 - Document A - Statement of the context in which the dossier is submitted,PI0015818,,,,0,,,,0,,,,,,26/03/2020 14:06 CET,,Syngenta Crop Protection AG (Switzerland),,No,Final,,,,,SmartDoc - EAME,,,,0,IT-624180,VV-731623,,N/A,PP321_12074,,,,,,,,,,,,,B Sochard,No,0,0,,,,,,,,,,,,,,,,0,,,1.0|CURRENT,090100b881afdd91,,Syngenta Crop Protection AG (Switzerland),,Syngenta Crop Protection AG,,Original,,,,Internal Use Only,,,ETL_blank,,090100b881afdd91,,,0,,,,,Berangere Sochard,,,Syngenta Crop Protection AG (Switzerland),,,European Union,General Lifecycle,,,40037_850361,,ETL_blank,,,,,,,,,Lambda-cyhalothrin - EU AIR5 - Document A - Statement of the context in which the dossier is submit,,2,Registration Supporting Documentation,,,,,,No,,090100b881afdd91 (cv),,CP Vault Support,0,,No,,24/02/2021 15:20 CET,,,Vault Migration,"Global Reg Ops, NA Reg Ops, PS Ops, EAME Reg Ops, Syngenta Business Administrator, Berangere Sochard, Simon Baker, Lily Williams, Clive Boxwell, Paul Parsons, Richard MacKenzie, Dan Pickford, Laurence Hand",Vault Migration,,application/msword,Regulatory,2,,PP321,,,,0,No,,PI0015818,,No,40037_850361_1958105,No,01/09/2020,,Regulatory,No,0,,,,0,,,Syngenta Crop Protection AG,,,,,,,,,,,,,,Sochard Berangere,,49152,,No,,,86d75e5da397fdadcd332f92234a4f62,29/11/2019 08:51 CET,0,,,,,,Lambda-cyhalothrin - EU AIR5 - Document A - Statement of the.pdf, -,,Country Specific,,,,,No,,,Yes,,,,,Syngenta,,,Lambda-cyhalothrin - EU AIR5 - MCA Section 5 - Toxicology (1).docx,,,,,,,,,,,,,,,English,,,PP321,,Summary / Overview,,TRUE,"All Internal Users, Syngenta Read Only Non Restricted, Syngenta Read Only Restricted",,,,16/07/2019,,,Lambda-cyhalothrin - EU AIR5 - MCA Section 5 - Toxicology,PI0015818,,,,0,,,OECD Tier 2 Summary,0,,,,,,17/02/2021 22:02 CET,,Syngenta Crop Protection AG (Switzerland),,Yes,Draft,,,,,SmartDoc - EAME,,,,0,IT-615930,VV-729845,,N/A,PP321_12086,,,Syngenta,,,,,,,,,,S Lloyd,No,0,0,,,,,,,,,,,,,,,,0,,,1.0|CURRENT,090100b881afde22,,Syngenta Crop Protection AG (Switzerland),,Syngenta Crop Protection AG,,Original,,,,Internal Use Only,,,,,090100b881afde22,,,0,,,,,Sonia Ellis,,,Syngenta Crop Protection AG (Switzerland),,,European Union,General Lifecycle,,,40037_848583,,,,,,Ellis Sonia (ext) GBGU,,,,,Lambda-cyhalothrin - EU AIR5 - MCA Section 5 - Toxicology,,893,Summary / Assessment,,,,,,No,,090100b881afde22 (cv),,CP Vault Support,0,,No,Syngenta,24/02/2021 15:20 CET,,,Vault Migration,"EAME Reg Ops, Syngenta Business Administrator, PS Ops, NA Reg Ops, Global Reg Ops, Berangere Sochard, Simon Baker, Lily Williams, Clive Boxwell, Paul Parsons, Richard MacKenzie, Dan Pickford, Laurence Hand, Claire McCombie, Elaine Buss",Vault Migration,,application/vnd.openxmlformats-officedocument.wordprocessingml.document,Toxicology,3,,PP321,,,,0,No,,PI0015818,,No,40037_848583_2033983,No,01/09/2020,,Tox,No,0,,,,1,,,Syngenta Crop Protection AG,,17/02/2021 21:35 CET,,04/09/2020 14:34 CEST,,,,,,,,,VV-729845,Lloyd Sara,,5089990,,No,,,3b13f57d1244e77844eba73ce0ae9813,29/11/2019 08:47 CET,0,,,,,,Lambda-cyhalothrin - EU AIR5 - MCA Section 5 - Toxicology.pdf, -,,Country Specific,,,,,No,,,Yes,,,,,Syngenta,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 5 Reference List (1).doc,,,,,,,,,,,,,,,English,,,PP321,,Summary / Overview,,TRUE,"All Internal Users, Syngenta Read Only Restricted, Syngenta Read Only Non Restricted",,,,16/07/2019,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 5 Reference List,PI0015818,,,,0,,,OECD Tier 1 Summary,0,,,,,,12/09/2020 15:48 CEST,,Syngenta Crop Protection AG (Switzerland),,Yes,Final,,,,,SmartDoc - EAME,,,,0,IT-615436,VV-729844,,N/A,PP321_12084,,,,,,,,,,,,,S Ellis,No,0,0,,,,,,,,,,,,,,,,0,,,1.0|CURRENT,090100b881afde20,,Syngenta Crop Protection AG (Switzerland),,Syngenta Crop Protection AG,,Original,,,,Internal Use Only,,,,,090100b881afde20,,,0,,,,,Sonia Ellis,,,Syngenta Crop Protection AG (Switzerland),,,European Union,General Lifecycle,,,40037_848582,,,,,,,,,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 5 Reference List,,147,Summary / Assessment,,,,,,No,,090100b881afde20 (cv),,CP Vault Support,0,,No,,24/02/2021 15:20 CET,,,Vault Migration,"NA Reg Ops, Global Reg Ops, EAME Reg Ops, PS Ops, Syngenta Business Administrator, Berangere Sochard, Paul Parsons",Vault Migration,,application/msword,Toxicology,2,,PP321,,,,0,No,,PI0015818,,No,40037_848582_2001744,No,01/09/2020,,Tox,No,0,,,,0,,,Syngenta Crop Protection AG,,,,,,,,,,,,,,Ellis Sonia,,651264,,No,,,eb0fdf698b528b67f54635395ec7fb52,29/11/2019 08:47 CET,0,,,,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 5 Reference List.pdf, -,,Country Specific,,,,,No,,,Yes,,,,,Syngenta,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 4 Reference List (5).doc,,,,,,,,,,,,,,,English,,,PP321,,Summary / Overview,,TRUE,"All Internal Users, Syngenta Read Only Restricted, Syngenta Read Only Non Restricted",,,,16/07/2019,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 4 Reference List,PI0015818,,,,0,,,OECD Tier 1 Summary,0,,,,,,21/09/2020 15:21 CEST,,Syngenta Crop Protection AG (Switzerland),,Yes,Final,,,,,SmartDoc - EAME,,,,0,IT-618210,VV-729843,,N/A,PP321_12083,,,,,,,,,,,,,S Ellis,No,0,0,,,,,,,,,,,,,,,,0,,,1.0|CURRENT,090100b881afde1f,,Syngenta Crop Protection AG (Switzerland),,Syngenta Crop Protection AG,,Original,,,,Internal Use Only,,,,,090100b881afde1f,,,0,,,,,Sonia Ellis,,,Syngenta Crop Protection AG (Switzerland),,,European Union,General Lifecycle,,,40037_848581,,,,,,,,,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 4 Reference List,,151,Summary / Assessment,,,,,,No,,090100b881afde1f (cv),,CP Vault Support,0,,No,,24/02/2021 15:20 CET,,,Vault Migration,"EAME Reg Ops, Global Reg Ops, PS Ops, Syngenta Business Administrator, NA Reg Ops, Berangere Sochard, Melanie Bottoms, Dan Pickford, Lynda Farrelly",Vault Migration,,application/msword,Chemistry - Regulatory,2,,PP321,,,,0,No,,PI0015818,,No,40037_848581_2003177,No,01/09/2020,,Chem - Analytical Methods,No,0,,,,0,,,Syngenta Crop Protection AG,,,,,,,,,,,,,,Ellis Sonia,,699392,,No,,,2c476f477f6e2b55ecb537683f5d1cee,29/11/2019 08:47 CET,0,,,,,,Lambda-cyhalothrin - EU AIR5 - LCA Section 4 Reference List.pdf, diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/test.csv b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/test.csv new file mode 100644 index 000000000..644347468 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/test.csv @@ -0,0 +1,2 @@ +Name,Attribute A,Attribute B +test,123,465