From ddee07b55dca965f84dbfd1a09cf3b40d3e7f22c Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 09:01:35 +0300 Subject: [PATCH 01/12] more tests --- .../service/v1/api/model/JSONPrimitive.java | 4 +- .../model/data/configuration/Watermark.java | 2 + .../processor/service/WatermarkService.java | 18 +++++- .../controller/WatermarkController.java | 2 +- .../v1/server/model/DownloadJob.java | 4 +- .../integration/client/RulesClient.java | 8 +++ .../server/integration/client/SMTPClient.java | 9 +++ .../integration/client/WatermarkClient.java | 8 +++ .../server/integration/tests/RulesTest.java | 36 ++++++++++++ .../v1/server/integration/tests/SMTPTest.java | 52 +++++++++++++++++ .../integration/tests/WatermarkTest.java | 58 +++++++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 15 ++++- 12 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RulesClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/WatermarkClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/JSONPrimitive.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/JSONPrimitive.java index ce6cd7f01..d109733ca 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/JSONPrimitive.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/JSONPrimitive.java @@ -1,15 +1,17 @@ package com.iqser.red.service.persistence.service.v1.api.model; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.RequiredArgsConstructor; @Data +@EqualsAndHashCode(of = "value") @RequiredArgsConstructor public class JSONPrimitive { private final T value; - public static JSONPrimitive of(T value){ + public static JSONPrimitive of(T value) { return new JSONPrimitive<>(value); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Watermark.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Watermark.java index 650a3cc6c..e85122d4d 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Watermark.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/Watermark.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; @@ -30,6 +31,7 @@ public class Watermark { @Column private WatermarkOrientation orientation; + @JsonIgnore @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dossier_template_id") private DossierTemplate dossierTemplate; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java index 55edd324a..d09312f49 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java @@ -1,12 +1,15 @@ package com.iqser.red.service.persistence.management.v1.processor.service; -import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Watermark; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Watermark; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; + @Slf4j @Service @RequiredArgsConstructor @@ -24,7 +27,16 @@ public class WatermarkService { return watermarkRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); } - public Watermark saveWatermark(Watermark watermark) { - return watermarkRepository.save(watermark); + @Transactional + public Watermark saveWatermark(String dossierTemplateId, Watermark watermark) { + + watermarkRepository.findById(dossierTemplateId).ifPresentOrElse( + loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId") + , () -> { + watermark.setDossierTemplateId(dossierTemplateId); + watermarkRepository.save(watermark); + }); + + return watermarkRepository.findById(dossierTemplateId).orElseThrow(() -> new NotFoundException("Watermark not found")); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java index d8f1a356d..a53a502a8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java @@ -15,7 +15,7 @@ public class WatermarkController implements WatermarkResource { public Watermark saveWatermark(String dossierTemplateId, @RequestBody Watermark watermark) { - return watermarkService.saveWatermark(watermark); + return watermarkService.saveWatermark(dossierTemplateId, watermark); } public Watermark getWatermark(String dossierTemplateId) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/model/DownloadJob.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/model/DownloadJob.java index 89bfe4de8..c5909918e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/model/DownloadJob.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/model/DownloadJob.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class DownloadJob { - String userId; - String storageId; + private String userId; + private String storageId; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RulesClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RulesClient.java new file mode 100644 index 000000000..583ba6ee5 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RulesClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.RulesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "RulesClient", url = "http://localhost:${server.port}") +public interface RulesClient extends RulesResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java new file mode 100644 index 000000000..f4bbe7bd5 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/SMTPClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.SMTPConfigurationResource; +import org.springframework.cloud.openfeign.FeignClient; + + +@FeignClient(name = "SMTPClient", url = "http://localhost:${server.port}") +public interface SMTPClient extends SMTPConfigurationResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/WatermarkClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/WatermarkClient.java new file mode 100644 index 000000000..6c48dc7ef --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/WatermarkClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.WatermarkResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "WatermarkClient", url = "http://localhost:${server.port}") +public interface WatermarkClient extends WatermarkResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java new file mode 100644 index 000000000..3100a4415 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RulesTest.java @@ -0,0 +1,36 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.RulesClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.JSONPrimitive; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RulesTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private RulesClient rulesClient; + + @Test + public void testRules() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + + rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum")); + assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(1); + assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum")); + + rulesClient.setRules(dossierTemplate.getId(), JSONPrimitive.of("lorem ipsum dolor sit amet")); + assertThat(rulesClient.getVersion(dossierTemplate.getId())).isEqualTo(2); + assertThat(rulesClient.getRules(dossierTemplate.getId())).isEqualTo(JSONPrimitive.of("lorem ipsum dolor sit amet")); + + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java new file mode 100644 index 000000000..5cb6caf63 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/SMTPTest.java @@ -0,0 +1,52 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.SMTPClient; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.SMTPConfiguration; +import feign.FeignException; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class SMTPTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private SMTPClient smtpClient; + + @Test + public void testSMTP() { + + SMTPConfiguration configuration = new SMTPConfiguration(); + configuration.setUser("test"); + configuration.setPassword("test"); + configuration.setAuth(true); + configuration.setFrom("from"); + configuration.setEnvelopeFrom("from"); + configuration.setHost("host"); + configuration.setPort(123); + configuration.setReplyTo("reply"); + configuration.setStarttls(true); + smtpClient.updateSMTPConfiguration(configuration); + + assertThat(smtpClient.getCurrentSMTPConfiguration(true)).isNotNull(); + + try { + smtpClient.testSMTPConfiguration("test@test.com", configuration); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(400); + } + + smtpClient.clearSMTPConfiguration(); + + try { + smtpClient.getCurrentSMTPConfiguration(true); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + + } + + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java new file mode 100644 index 000000000..4843c9282 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java @@ -0,0 +1,58 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Watermark; +import feign.FeignException; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class WatermarkTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private WatermarkClient watermarkClient; + + @Test + public void testWatermark() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + try { + watermarkClient.getWatermark(dossierTemplate.getId()); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + + Watermark watermark = new Watermark(); + watermark.setText("lorem ipsum"); + watermark.setFontSize(12); + watermark.setFontType("font"); + watermark.setHexColor("#dddddd"); + watermark.setOpacity(20); + watermark.setOrientation(Watermark.WatermarkOrientation.DIAGONAL); + + var saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); + assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); + + watermark.setFontSize(14); + saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); + assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); + + watermarkClient.deleteWatermark(dossierTemplate.getId()); + + try { + watermarkClient.getWatermark(dossierTemplate.getId()); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + + } + +} 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 488fcb9ff..a28a0f654 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 @@ -5,6 +5,7 @@ import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeRespo import com.iqser.red.service.peristence.v1.server.Application; import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.peristence.v1.server.client.SearchClient; +import com.iqser.red.service.peristence.v1.server.controller.LicenseReportController; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*; @@ -133,6 +134,15 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private ImageRecategorizationRepository imageRecategorizationRepository; + @Autowired + private WatermarkRepository watermarkRepository; + + @Autowired + private SMTPRepository smtpRepository; + + @Autowired + private RuleSetRepository ruleSetRepository; + @Autowired private LegalBasisMappingRepository legalBasisMappingRepository; @@ -150,7 +160,10 @@ public abstract class AbstractPersistenceServerServiceTest { removeRedactionRepository.deleteAll(); legalBasisChangeRepository.deleteAll(); imageRecategorizationRepository.deleteAll(); - legalBasisMappingRepository.deleteAll();; + legalBasisMappingRepository.deleteAll(); + watermarkRepository.deleteAll(); + ruleSetRepository.deleteAll(); + smtpRepository.deleteAll(); } } From 2496d39d11abf52843673da08c829632bed44cc7 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 09:50:59 +0300 Subject: [PATCH 02/12] more tests --- .../v1/api/model/LegalBasisMapping.java | 17 +++++++ .../server/controller/UploadController.java | 7 +-- .../client/RedactionLogClient.java | 9 ++++ .../service/FileTesterAndProvider.java | 17 +++++++ .../v1/server/integration/tests/FileTest.java | 44 +++++++++++++------ .../integration/tests/NotificationTest.java | 42 ++++++++++++++++++ .../integration/tests/RedactionLogTest.java | 34 ++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 20 ++++++++- 8 files changed, 172 insertions(+), 18 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/configuration/v1/api/model/LegalBasisMapping.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RedactionLogClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RedactionLogTest.java diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/configuration/v1/api/model/LegalBasisMapping.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/configuration/v1/api/model/LegalBasisMapping.java new file mode 100644 index 000000000..95c3d7699 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/configuration/v1/api/model/LegalBasisMapping.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.configuration.v1.api.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +// TODO remove this - compatibility for classpath error +public class LegalBasisMapping { + + private String name; + private String description; + private String reason; + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/UploadController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/UploadController.java index 52eb31bbf..f7e98e0e8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/UploadController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/UploadController.java @@ -44,7 +44,6 @@ public class UploadController implements UploadResource { private final PDFTronRedactionClient pdfTronRedactionClient; private final FileManagementStorageService fileManagementStorageService; private final RedactionClient redactionClient; - private final DossierPersistenceService dossierPersistenceService; @Override public JSONPrimitive upload(@RequestBody BinaryFileRequest request) { @@ -135,11 +134,13 @@ public class UploadController implements UploadResource { var fileStatus = fileStatusService.getStatus(fileId); var dossier = dossierService.getDossierById(dossierId); - PdfTronRedactionResult pdfTronRedactionResult = pdfTronRedactionClient.redact(PdfTronRedactionRequest.builder() + var request = PdfTronRedactionRequest.builder() .dossierTemplateId(dossier.getDossierTemplateId()) .document(fileManagementStorageService.getStoredObjectBytes(dossierId, fileId, FileType.ORIGIN)) .redactionLog(fileManagementStorageService.getRedactionLog(dossierId, fileId)) - .build()); + .build(); + + PdfTronRedactionResult pdfTronRedactionResult = pdfTronRedactionClient.redact(request); return new BinaryFileResult(pdfTronRedactionResult.getDocument(), fileStatus.getFilename()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RedactionLogClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RedactionLogClient.java new file mode 100644 index 000000000..eaae236c4 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/RedactionLogClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource; +import org.springframework.cloud.openfeign.FeignClient; + + +@FeignClient(name = "RedactionLogClient", url = "http://localhost:${server.port}") +public interface RedactionLogClient extends RedactionLogResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java index 5ccc1ec7d..b616520a5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/FileTesterAndProvider.java @@ -1,12 +1,20 @@ package com.iqser.red.service.peristence.v1.server.integration.service; +import com.fasterxml.jackson.databind.ObjectMapper; 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.service.FileManagementStorageService; import com.iqser.red.service.persistence.service.v1.api.model.BinaryFileRequest; +import com.iqser.red.service.persistence.service.v1.api.model.FileType; import com.iqser.red.service.persistence.service.v1.api.model.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.File; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.SectionGrid; +import com.iqser.red.storage.commons.service.StorageService; +import lombok.SneakyThrows; +import org.assertj.core.util.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,6 +26,11 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class FileTesterAndProvider { + @Autowired + private FileManagementStorageService fileManagementStorageService; + + @Autowired + private ObjectMapper objectMapper; @Autowired private UploadClient uploadClient; @@ -26,6 +39,7 @@ public class FileTesterAndProvider { private FileClient fileClient; + @SneakyThrows public File testAndProvideFile(Dossier dossier){ @@ -38,6 +52,9 @@ public class FileTesterAndProvider { assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); + fileManagementStorageService.storeObject(dossier.getId(),file.getId(), FileType.REDACTION_LOG, objectMapper.writeValueAsBytes(new RedactionLog(1, Lists.newArrayList(), Lists.newArrayList(),0,0,0,0))); + fileManagementStorageService.storeObject(dossier.getId(),file.getId(), FileType.SECTION_GRID, objectMapper.writeValueAsBytes(new SectionGrid())); + return file; } 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 1945c7bb5..02bbcd113 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 @@ -9,6 +9,7 @@ import com.iqser.red.service.peristence.v1.server.integration.service.FileTester import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileStatus; +import org.assertj.core.util.Lists; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -55,15 +56,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(loadedFile.getExcludedPages()).isEmpty(); - fileClient.toggleExclusion(dossier.getId(),file.getId(),true); - loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.isExcluded()).isTrue(); - - - fileClient.toggleExclusion(dossier.getId(),file.getId(),false); - loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); - assertThat(loadedFile.isExcluded()).isFalse(); - fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), JSONPrimitive.of("1")); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); @@ -91,18 +83,41 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.APPROVED); - fileClient.setStatusUnderReview(dossier.getId(), file.getId()); - uploadClient.deleteFile(dossier.getId(),file.getId()); + assertThat(uploadClient.getOriginal(dossier.getId(),file.getId())).isNotNull(); + assertThat(uploadClient.getRedacted(dossier.getId(),file.getId())).isNotNull(); + assertThat(uploadClient.getFlatRedacted(dossier.getId(),file.getId())).isNotNull(); + assertThat(uploadClient.getPreview(dossier.getId(),file.getId())).isNotNull(); + assertThat(uploadClient.getAnnotated(dossier.getId(),file.getId())).isNotNull(); + fileClient.setStatusUnderReview(dossier.getId(), file.getId()); + + + fileClient.toggleExclusion(dossier.getId(),file.getId(),true); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.isExcluded()).isTrue(); + + + fileClient.toggleExclusion(dossier.getId(),file.getId(),false); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.isExcluded()).isFalse(); + + uploadClient.deleteFile(dossier.getId(),file.getId()); + var softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId()); assertThat(softDeletedFiles.size()).isEqualTo(1); - - var activeFiles = fileClient.getDossierStatus(dossier.getId()); assertThat(activeFiles.size()).isEqualTo(0); + uploadClient.undeleteFiles(dossier.getId(), Sets.newHashSet(file.getId())); + softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId()); + assertThat(softDeletedFiles.size()).isEqualTo(0); + activeFiles = fileClient.getDossierStatus(dossier.getId()); + assertThat(activeFiles.size()).isEqualTo(1); + + + uploadClient.hardDeleteFiles(dossier.getId(), Sets.newHashSet(file.getId())); softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId()); assertThat(softDeletedFiles.size()).isEqualTo(0); @@ -111,5 +126,8 @@ public class FileTest extends AbstractPersistenceServerServiceTest { assertThat(activeFiles.size()).isEqualTo(0); + + + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java index 0715b87a4..1b471443f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/NotificationTest.java @@ -3,6 +3,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.NotificationClient; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.data.audit.AddNotificationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.data.notification.Notification; +import org.assertj.core.util.Lists; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -20,8 +22,48 @@ public class NotificationTest extends AbstractPersistenceServerServiceTest { notificationClient.addNotification(AddNotificationRequest.builder().notificationType("test").issuerId("1").userId("1").target(Map.of("test", "test")).build()); + var notification = getNotification(); + + + assertThat(notification.getReadDate()).isNull(); + notificationClient.toggleRead("1", Lists.newArrayList(notification.getId()), true); + notification = getNotification(); + assertThat(notification.getReadDate()).isNotNull(); + + + + assertThat(notification.getSeenDate()).isNull(); + notificationClient.toggleSeen("1", Lists.newArrayList(notification.getId()), true); + notification = getNotification(); + assertThat(notification.getSeenDate()).isNotNull(); + + var currentNotifications = notificationClient.getNotifications("1", false); + assertThat(currentNotifications).isEmpty(); + + + + notificationClient.toggleRead("1", Lists.newArrayList(notification.getId()), false); + notification = getNotification(); + assertThat(notification.getReadDate()).isNull(); + + + + notificationClient.toggleSeen("1", Lists.newArrayList(notification.getId()), false); + notification = getNotification(); + assertThat(notification.getSeenDate()).isNull(); + + + + notificationClient.softDelete("1",Lists.newArrayList(notification.getId())); + currentNotifications = notificationClient.getNotifications("1", true); + assertThat(currentNotifications).isEmpty(); + + } + + private Notification getNotification() { var currentNotifications = notificationClient.getNotifications("1", true); assertThat(currentNotifications.size()).isEqualTo(1); + return currentNotifications.iterator().next(); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RedactionLogTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RedactionLogTest.java new file mode 100644 index 000000000..3dee37eb3 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/RedactionLogTest.java @@ -0,0 +1,34 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.RedactionLogClient; +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 org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RedactionLogTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private RedactionLogClient redactionLogClient; + + @Test + public void testRedactionLog() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + assertThat(redactionLogClient.getSectionGrid(dossier.getId(), file.getId())).isNotNull(); + assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), true)).isNotNull(); + assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), false)).isNotNull(); + + } +} 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 a28a0f654..7a35cf0fb 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 @@ -1,7 +1,6 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; -import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeRequest; -import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse; +import com.iqser.red.service.pdftron.redaction.v1.api.model.*; import com.iqser.red.service.peristence.v1.server.Application; import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.peristence.v1.server.client.SearchClient; @@ -9,8 +8,13 @@ import com.iqser.red.service.peristence.v1.server.controller.LicenseReportContro import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*; +import com.iqser.red.service.redaction.v1.model.AnnotateRequest; +import com.iqser.red.service.redaction.v1.model.AnnotateResponse; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.RedactionResult; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; +import org.assertj.core.util.Lists; import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; @@ -77,6 +81,17 @@ public abstract class AbstractPersistenceServerServiceTest { public void setupOptimize() { when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> new PdfTronOptimizeResponse(((PdfTronOptimizeRequest) args.getArguments()[0]).getDocument())); + when(pdfTronRedactionClient.redact(Mockito.any())).thenAnswer((args) -> + new PdfTronRedactionResult(((PdfTronRedactionRequest) args.getArguments()[0]).getDocument())); + when(pdfTronRedactionClient.redactionPreview(Mockito.any())).thenAnswer((args) -> + new PdfTronRedactionResult(((PdfTronRedactionRequest) args.getArguments()[0]).getDocument())); + + when(pdfTronRedactionClient.flatDocument(Mockito.any())).thenAnswer((args) -> + new PdfTronFlattenResponse(((PdfTronFlattenRequest) args.getArguments()[0]).getDocument())); + + when(redactionClient.annotate(Mockito.any())).thenReturn(new AnnotateResponse("document".getBytes())); + when(redactionClient.sections(Mockito.any())).thenReturn(new RedactionResult()); + when(redactionClient.getRedactionLog(Mockito.any())).thenReturn(new RedactionLog(1, Lists.newArrayList(),Lists.newArrayList(),0,0,0,0)); } @Configuration @@ -90,6 +105,7 @@ public abstract class AbstractPersistenceServerServiceTest { return new FileSystemBackedStorageService(); } + } @After From 317c93ff71180bf9069dceb6f8554b305cf19814 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 10:29:28 +0300 Subject: [PATCH 03/12] more tests --- .../model/data/configuration/LegalBasis.java | 7 ++- .../data/configuration/LegalBasisMapping.java | 2 +- .../service/DigitalSignatureService.java | 3 + .../LegalBasisMappingController.java | 10 +++- .../client/DigitalSignatureClient.java | 8 +++ .../integration/client/LegalBasisClient.java | 9 +++ .../client/LicenseReportClient.java | 8 +++ .../integration/service/TypeProvider.java | 3 +- .../tests/DigitalSignatureTest.java | 50 +++++++++++++++++ .../server/integration/tests/DossierTest.java | 17 ++++-- .../integration/tests/LegalBasisTest.java | 56 +++++++++++++++++++ .../integration/tests/LicenseReportTest.java | 46 +++++++++++++++ 12 files changed, 206 insertions(+), 13 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DigitalSignatureClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LegalBasisClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LicenseReportClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasis.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasis.java index a71563c0a..02ef895f2 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasis.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasis.java @@ -1,5 +1,7 @@ package com.iqser.red.service.persistence.service.v1.api.model.data.configuration; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,6 +10,8 @@ import javax.persistence.*; @Data @NoArgsConstructor @Entity +@AllArgsConstructor +@Builder @Table(name = "legal_basis") public class LegalBasis { @@ -21,8 +25,5 @@ public class LegalBasis { @Column private String reason; - @ManyToOne - private LegalBasisMapping legalBasisMapping; - } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasisMapping.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasisMapping.java index 348a5dbef..e1ad39f19 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasisMapping.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/configuration/LegalBasisMapping.java @@ -18,7 +18,7 @@ public class LegalBasisMapping { @Column private long version; - @OneToMany(mappedBy = "legalBasisMapping", cascade = CascadeType.ALL) + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List legalBasis = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java index f04a00710..6a61c8e1c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java @@ -10,6 +10,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; + @Slf4j @Service @RequiredArgsConstructor @@ -48,6 +50,7 @@ public class DigitalSignatureService { } + @Transactional public void updateDigitalSignature(DigitalSignature digitalSignatureModel) { digitalSignatureRepository.findById(DigitalSignature.ID).ifPresentOrElse(digitalSignature -> { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java index 7b31a5783..efaf4c9f2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java @@ -1,5 +1,6 @@ package com.iqser.red.service.peristence.v1.server.controller; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.LegalBasis; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.LegalBasisMapping; @@ -9,6 +10,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.util.List; @@ -21,6 +23,7 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { @Override + @Transactional public void setLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody List legalBasisMapping) { legalBasisMappingRepository.findById(dossierTemplateId).ifPresentOrElse((lbm) -> { @@ -31,19 +34,20 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { var lbm = new LegalBasisMapping(); lbm.setDossierTemplateId(dossierTemplateId); lbm.setLegalBasis(legalBasisMapping); - lbm.setVersion(0); + lbm.setVersion(1); legalBasisMappingRepository.save(lbm); }); } @Override + @Transactional public List getLegalBasisMapping(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).get().getLegalBasis(); + return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMapping::getLegalBasis).orElseThrow(() -> new NotFoundException("Legal Basis Not configured!")); } @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).get().getVersion(); + return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMapping::getVersion).orElse(0l); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DigitalSignatureClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DigitalSignatureClient.java new file mode 100644 index 000000000..328797eeb --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DigitalSignatureClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DigitalSignatureResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DigitalSignatureClient", url = "http://localhost:${server.port}") +public interface DigitalSignatureClient extends DigitalSignatureResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LegalBasisClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LegalBasisClient.java new file mode 100644 index 000000000..b31000365 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LegalBasisClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.LegalBasisMappingResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "LegalBasisClient", url = "http://localhost:${server.port}") +public interface LegalBasisClient extends LegalBasisMappingResource { + +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LicenseReportClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LicenseReportClient.java new file mode 100644 index 000000000..fe3363a3b --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/LicenseReportClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.LicenseReportResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "LicenseReportClient", url = "http://localhost:${server.port}") +public interface LicenseReportClient extends LicenseReportResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java index 08b34c420..02139d85b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java @@ -24,8 +24,7 @@ public class TypeProvider { type.setHint(false); type.setRank(100); type.setRecommendation(false); - type.setLabel("test"); - type.setCaseInsensitive(false); + type.setCaseInsensitive(true); type.setDossierTemplateId(dossierTemplate.getId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java new file mode 100644 index 000000000..00e964f05 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java @@ -0,0 +1,50 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.DigitalSignatureClient; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.DigitalSignature; +import feign.FeignException; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DigitalSignatureClient digitalSignatureClient; + + @Test + public void testDigitalSignature() { + + try { + digitalSignatureClient.getDigitalSignature(); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + DigitalSignature digitalSignature = new DigitalSignature(); + digitalSignature.setPassword("test"); + digitalSignature.setCertificateName("test"); + digitalSignature.setReason("test"); + digitalSignature.setLocation("test"); + digitalSignature.setContactInfo("test"); + digitalSignature.setPrivateKey(new byte[]{1, 2, 3, 4}); + + var savedDigitalSignature = digitalSignatureClient.saveDigitalSignature(digitalSignature); + + var loadedSignature = digitalSignatureClient.getDigitalSignature(); + // encrypted + assertThat(savedDigitalSignature.getPassword()).isNotEqualTo(loadedSignature.getPassword()); + assertThat(savedDigitalSignature.getPrivateKey()).isNotEqualTo(loadedSignature.getPrivateKey()); + + + digitalSignature.setReason("new test"); + digitalSignatureClient.updateDigitalSignature(digitalSignature); + loadedSignature = digitalSignatureClient.getDigitalSignature(); + assertThat(loadedSignature.getReason()).isEqualTo("new test"); + + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 495049889..e1b1cea45 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -1,5 +1,6 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import com.google.common.collect.Sets; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -42,12 +43,20 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate).isEqualTo(updated); - dossierClient.getAllDossiers().forEach(ld -> { - dossierClient.delete(ld.getId()); - }); + dossierClient.getAllDossiers().forEach(ld -> dossierClient.delete(ld.getId())); - assertThat(dossierClient.getAllDossiers().isEmpty()).isTrue(); + assertThat(dossierClient.getAllDossiers()).isEmpty(); assertThat(dossierClient.getSoftDeletedDossiers().size()).isEqualTo(1); + dossierClient.undeleteDossiers(Sets.newHashSet(dossier.getId())); + + assertThat(dossierClient.getAllDossiers()).isNotEmpty(); + assertThat(dossierClient.getSoftDeletedDossiers()).isEmpty(); + + + dossierClient.hardDeleteDossiers(Sets.newHashSet(dossier.getId())); + assertThat(dossierClient.getAllDossiers()).isEmpty(); + assertThat(dossierClient.getSoftDeletedDossiers()).isEmpty(); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java new file mode 100644 index 000000000..a595d80fb --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LegalBasisTest.java @@ -0,0 +1,56 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.LegalBasis; +import feign.FeignException; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LegalBasisTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private LegalBasisClient legalBasisClient; + + @Test + public void testLegalBasis() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(0); + + try { + legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + + var mappings = new ArrayList(); + mappings.add(LegalBasis.builder().name("test 1").description("test 1").reason("test 1").build()); + mappings.add(LegalBasis.builder().name("test 2").description("test 2").reason("test 2").build()); + legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), mappings); + assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(1); + + + var mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(2); + assertThat(mapping.stream().map(LegalBasis::getName).collect(Collectors.toList())).containsExactlyInAnyOrder("test 1", "test 2"); + + + legalBasisClient.setLegalBasisMapping(dossierTemplate.getId(), Lists.newArrayList()); + assertThat(legalBasisClient.getLegalBasisMapping(dossierTemplate.getId())).isEmpty(); + assertThat(legalBasisClient.getVersion(dossierTemplate.getId())).isEqualTo(2); + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java new file mode 100644 index 000000000..b6837916e --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/LicenseReportTest.java @@ -0,0 +1,46 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.LicenseReportClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +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.LicenseReportRequest; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.OffsetDateTime; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LicenseReportTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private LicenseReportClient licenseReportClient; + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Test + public void testLicenseReport() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + fileTesterAndProvider.testAndProvideFile(dossier); + + LicenseReportRequest request = new LicenseReportRequest(); + request.setDossierIds(Lists.newArrayList(dossier.getId())); + request.setStartDate(OffsetDateTime.now().minusHours(10).toInstant()); + request.setEndDate(OffsetDateTime.now().plusHours(10).toInstant()); + request.setRequestId("123"); + assertThat(licenseReportClient.getLicenseReport(request, 0, 20)).isNotNull(); + } + +} From e7273d3c470238d68fcc97212029b187314beaa9 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 10:37:42 +0300 Subject: [PATCH 04/12] more tests --- .../v1/server/integration/service/TypeProvider.java | 8 +++++--- .../integration/tests/DigitalSignatureTest.java | 10 ++++++++++ .../server/integration/tests/ManualRedactionTest.java | 2 +- .../v1/server/integration/tests/TypeTest.java | 11 +++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java index 02139d85b..1596b5ae7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/TypeProvider.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.service; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Type; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,7 +15,8 @@ public class TypeProvider { @Autowired private DictionaryClient dictionaryClient; - public Type testAndProvideType(DossierTemplate dossierTemplate, String typeName) { + + public Type testAndProvideType(DossierTemplate dossierTemplate, Dossier dossier, String typeName) { var type = new Type(); type.setType(typeName); @@ -26,7 +28,7 @@ public class TypeProvider { type.setRecommendation(false); type.setCaseInsensitive(true); type.setDossierTemplateId(dossierTemplate.getId()); - + type.setDossierId(dossier != null ? dossier.getId() : null); var createdType = dictionaryClient.addType(type); @@ -40,7 +42,7 @@ public class TypeProvider { } public Type testAndProvideType(DossierTemplate dossierTemplate) { - return testAndProvideType(dossierTemplate, "test"); + return testAndProvideType(dossierTemplate, null, "test"); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java index 00e964f05..87174b0cb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DigitalSignatureTest.java @@ -46,5 +46,15 @@ public class DigitalSignatureTest extends AbstractPersistenceServerServiceTest { assertThat(loadedSignature.getReason()).isEqualTo("new test"); + + digitalSignatureClient.deleteDigitalSignature(); + try { + digitalSignatureClient.getDigitalSignature(); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(404); + } + + + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index faf6719e3..aebc9bf9f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -33,7 +33,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); - var type = typeProvider.testAndProvideType(dossier.getDossierTemplate(), "manual"); + var type = typeProvider.testAndProvideType(dossier.getDossierTemplate(),null, "manual"); var comment = manualRedactionClient.addComment(dossier.getId(), file.getId(), "1", CommentRequest.builder().text("test").user("1").build()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java index 8d89ab59d..8555e5760 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.data.configuration.Colors; @@ -24,6 +25,9 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + @Autowired private DictionaryClient dictionaryClient; @@ -67,6 +71,13 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { var typesForTemplate = dictionaryClient.getAllTypesForDossierTemplate(loadedType.getDossierTemplateId()); assertThat(typesForTemplate).isEmpty(); + + var dossier = dossierTesterAndProvider.provideTestDossier(); + var dossierType = typeProvider.testAndProvideType(dossierTemplate,dossier,"dossier-dict"); + + var typesForDossier = dictionaryClient.getAllTypesForDossier(dossierType.getDossierId()); + assertThat(typesForDossier).isNotEmpty(); + } @Test From 54126895d20a71c00e86407ca3787ba5b0889109 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 10:49:47 +0300 Subject: [PATCH 05/12] more tests --- .../v1/api/model/data/dossier/File.java | 4 + .../client/DossierAttributeClient.java | 8 ++ .../client/DossierAttributeConfigClient.java | 8 ++ .../client/FileAttributeClient.java | 8 ++ .../client/FileAttributeConfigClient.java | 9 ++ .../integration/client/ReanalysisClient.java | 8 ++ .../integration/tests/ReanalysisTest.java | 102 ++++++++++++++++++ 7 files changed, 147 insertions(+) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeConfigClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeConfigClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReanalysisClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java 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 f8842b16a..543f5fa5d 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 @@ -121,4 +121,8 @@ public class File { private Dossier dossier; + @Column(updatable = false, insertable = false, name = "dossier_id") + private String dossierId; + + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeClient.java new file mode 100644 index 000000000..fec2f35db --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DossierAttributeClient", url = "http://localhost:${server.port}") +public interface DossierAttributeClient extends DossierAttributesResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeConfigClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeConfigClient.java new file mode 100644 index 000000000..97024ce0e --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierAttributeConfigClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DossierAttributesConfigResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DossierAttributeConfigClient", url = "http://localhost:${server.port}") +public interface DossierAttributeConfigClient extends DossierAttributesConfigResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeClient.java new file mode 100644 index 000000000..7a2c5aff1 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "FileAttributeClient", url = "http://localhost:${server.port}") +public interface FileAttributeClient extends FileAttributesResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeConfigClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeConfigClient.java new file mode 100644 index 000000000..be37a5116 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileAttributeConfigClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesConfigResource; +import com.iqser.red.service.persistence.service.v1.api.resources.FileAttributesResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "FileAttributeConfigClient", url = "http://localhost:${server.port}") +public interface FileAttributeConfigClient extends FileAttributesConfigResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReanalysisClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReanalysisClient.java new file mode 100644 index 000000000..f878eb3bc --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReanalysisClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "ReanalysisClient", url = "http://localhost:${server.port}") +public interface ReanalysisClient extends ReanalysisResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java new file mode 100644 index 000000000..fb453d234 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java @@ -0,0 +1,102 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +import com.iqser.red.service.peristence.v1.server.integration.client.ReanalysisClient; +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.management.v1.processor.service.persistence.repository.FileRepository; +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.FileStatus; +import org.assertj.core.util.Sets; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ReanalysisTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private ReanalysisClient reanalysisClient; + + @Autowired + private FileClient fileClient; + + @Autowired + private FileRepository fileRepository; + + @Test + public void testReanalysis() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + + reanalysisClient.ocrDossier(dossier.getId()); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + + + resetStatus(file); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + + + resetStatus(file); + reanalysisClient.ocrFile(dossier.getId(), file.getId(), true); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + + + resetStatus(file); + reanalysisClient.ocrFiles(dossier.getId(), Set.of(file.getId())); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.OCR_PROCESSING); + + + resetStatus(file); + reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + + + resetStatus(file); + reanalysisClient.reanalyzeFile(dossier.getId(), file.getId(), Sets.newHashSet()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + + + resetStatus(file); + reanalysisClient.reanalyzeDossier(dossier.getId(), true); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + + + resetStatus(file); + reanalysisClient.reindex(dossier.getId(), Set.of(file.getId())); + fileClient.getFileStatus(dossier.getId(), file.getId()); + + } + + + private void resetStatus(File file) { + + fileRepository.findById(file.getId()).ifPresent(savedFile -> { + + savedFile.setStatus(FileStatus.UNASSIGNED); + fileRepository.save(savedFile); + + }); + + var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + } +} From e036c4183e26a901115def9423d1b76fdd092e91 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 13:08:50 +0300 Subject: [PATCH 06/12] 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 From 2ecb2eeadb5a804595d153ae73628c983866bad2 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 14:21:38 +0300 Subject: [PATCH 07/12] more tests --- .../model/data/dossier/ReportTemplate.java | 6 ++ .../DossierAttributesConfigResource.java | 14 ++-- ...sierAttributeConfigPersistenceService.java | 29 ++++--- .../DossierAttributeRepository.java | 9 +++ .../integration/client/DownloadClient.java | 8 ++ .../client/FileProcessingClient.java | 8 ++ .../client/ReportTemplateClient.java | 10 +++ .../tests/DossierAttributeTest.java | 70 ++++++++++++++++ .../integration/tests/DownloadTest.java | 57 +++++++++++++ .../integration/tests/FileProcessingTest.java | 81 +++++++++++++++++++ .../integration/tests/ReportTemplateTest.java | 54 +++++++++++++ .../AbstractPersistenceServerServiceTest.java | 10 ++- 12 files changed, 335 insertions(+), 21 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DownloadClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileProcessingClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReportTemplateClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/ReportTemplate.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/ReportTemplate.java index 1b93d407a..d0686d7b9 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/ReportTemplate.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/ReportTemplate.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.*; @@ -26,10 +27,15 @@ public class ReportTemplate { @Column private boolean activeByDefault; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) private DossierTemplate dossierTemplate; + @Column(updatable = false,insertable = false,name = "dossier_template_id") + private String dossierTemplateId; + @ManyToMany + @JsonIgnore private List dossiers = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java index 037f29a37..a13434731 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierAttributesConfigResource.java @@ -9,9 +9,7 @@ import java.util.List; public interface DossierAttributesConfigResource { - String DOSSIER_ATTRIBUTES_PATH = "/dossierAttributes"; - String DOSSIER_ATTRIBUTE_PATH = "/dossierAttribute"; - String BASE_CONFIG_PATH = "/baseConfig"; + String DOSSIER_ATTRIBUTE_PATH = "/dossier-attribute"; String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}"; @@ -21,30 +19,30 @@ public interface DossierAttributesConfigResource { @ResponseBody @ResponseStatus(HttpStatus.OK) - @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) DossierAttributeConfig addOrUpdateDossierAttribute(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody DossierAttributeConfig dossierAttributeConfig); @ResponseBody @ResponseStatus(HttpStatus.OK) - @PutMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PutMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) List setDossierAttributesConfig(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestBody List dossierAttributesConfig); @ResponseStatus(HttpStatus.NO_CONTENT) - @DeleteMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + DOSSIER_ATTRIBUTE_ID_PATH_VARIABLE) + @DeleteMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_ATTRIBUTE_ID_PATH_VARIABLE) void deleteDossierAttribute(@PathVariable(DOSSIER_ATTRIBUTE_ID) String dossierAttributeId); @ResponseStatus(HttpStatus.NO_CONTENT) - @PostMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + "/delete") + @PostMapping(value = DOSSIER_ATTRIBUTE_PATH + "/delete") void deleteDossierAttributes(@RequestBody List dossierAttributeIds); @ResponseBody @ResponseStatus(HttpStatus.OK) - @GetMapping(value = DOSSIER_ATTRIBUTES_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = DOSSIER_ATTRIBUTE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) List getDossierAttributes(@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/DossierAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java index dc97801ab..21fb9c066 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java @@ -2,23 +2,25 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.FileAttributeConfig; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; 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 public class DossierAttributeConfigPersistenceService { private final DossierAttributeConfigRepository dossierAttributeConfigRepository; + private final DossierAttributeRepository dossierAttributeRepository; private final DossierTemplateRepository dossierTemplateRepository; public DossierAttributeConfig addOrUpdateDossierAttribute(String dossierTemplateId, DossierAttributeConfig dossierAttributeConfig) { @@ -54,15 +56,22 @@ public class DossierAttributeConfigPersistenceService { @Transactional public List setDossierAttributesConfig(String dossierTemplateId, List dossierAttributesConfig) { - dossierAttributeConfigRepository.deleteByDossierTemplateId(dossierTemplateId); - var dossierTemplate = dossierTemplateRepository.getOne(dossierTemplateId); - dossierAttributesConfig.forEach(d -> { - d.setDossierTemplate(dossierTemplate); - d.setId(UUID.randomUUID().toString()); - setPlaceholder(d); - uniqueLabelAndPlaceholder(d); + + Set toSetIds = dossierAttributesConfig.stream().map(DossierAttributeConfig::getId).filter(Objects::nonNull).collect(Collectors.toSet()); + var currentConfigs = dossierAttributeConfigRepository.findAllByDossierTemplateId(dossierTemplateId); + Set configsToRemove = currentConfigs.stream().filter(c -> !toSetIds.contains(c.getId())).collect(Collectors.toSet()); + + + dossierAttributesConfig.forEach(fac -> addOrUpdateDossierAttribute(dossierTemplateId, fac)); + + configsToRemove.forEach(ctr -> { + dossierAttributeRepository.deleteByDossierAttributeConfigId(ctr.getId()); + dossierAttributeConfigRepository.deleteById(ctr.getId()); }); + return getDossierAttributes(dossierTemplateId); + + } @Transactional diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java index b9d9b95d1..d8bf074a2 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeRepository.java @@ -2,6 +2,8 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import java.util.List; @@ -10,4 +12,11 @@ public interface DossierAttributeRepository extends JpaRepository findByIdDossierId(String dossierId); void deleteByDossierId(String dossierId); + + @Query("SELECT a FROM DossierAttribute a WHERE a.dossierAttributeConfig.dossierTemplate.id = :dossierTemplateId") + List findByDossierTemplateId(String dossierTemplateId); + + @Modifying + @Query("DELETE FROM DossierAttribute e WHERE e.dossierAttributeConfig.id = :id") + void deleteByDossierAttributeConfigId(String id); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DownloadClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DownloadClient.java new file mode 100644 index 000000000..b802543f2 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DownloadClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DownloadResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DownloadClient" ,url = "http://localhost:${server.port}") +public interface DownloadClient extends DownloadResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileProcessingClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileProcessingClient.java new file mode 100644 index 000000000..daf8ce483 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/FileProcessingClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.FileStatusProcessingUpdateResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "FileProcessingClient", url = "http://localhost:${server.port}") +public interface FileProcessingClient extends FileStatusProcessingUpdateResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReportTemplateClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReportTemplateClient.java new file mode 100644 index 000000000..fa0f82026 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/ReportTemplateClient.java @@ -0,0 +1,10 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; +import org.springframework.cloud.openfeign.FeignClient; + + + +@FeignClient(name = "ReportTemplateClient", url = "http://localhost:${server.port}") +public interface ReportTemplateClient extends ReportTemplateResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java new file mode 100644 index 000000000..e4bab268e --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java @@ -0,0 +1,70 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.*; +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.data.dossier.DossierAttribute; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttributeConfig; +import lombok.SneakyThrows; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { + + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private DossierAttributeConfigClient dossierAttributeConfigClient; + + @Autowired + private DossierAttributeClient dossierAttributeClient; + + + @SneakyThrows + @Test + public void testDossierAttributes() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isEmpty(); + + DossierAttributeConfig attribute = new DossierAttributeConfig(); + attribute.setLabel("test"); + attribute.setEditable(true); + attribute.setType(DossierAttributeConfig.DossierAttributeType.TEXT); + + + dossierAttributeConfigClient.addOrUpdateDossierAttribute(dossier.getDossierTemplateId(),attribute); + loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isNotEmpty(); + + + dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList()); + loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isEmpty(); + + + dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList(attribute)); + loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isNotEmpty(); + dossierAttributeConfigClient.deleteDossierAttribute(loadedAttributes.iterator().next().getId()); + + + dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList(attribute)); + loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isNotEmpty(); + dossierAttributeConfigClient.deleteDossierAttributes(Lists.newArrayList(loadedAttributes.iterator().next().getId())); + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java new file mode 100644 index 000000000..2d8314117 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -0,0 +1,57 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; +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.DownloadRequest; +import com.iqser.red.service.persistence.service.v1.api.model.JSONPrimitive; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DownloadTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private DownloadClient downloadClient; + + @Test + public void testDownload() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + + downloadClient.prepareDownload(DownloadRequest.builder() + .userId("1") + .dossierId(dossier.getId()) + .fileIds(Collections.singletonList(file.getId())) + .build()); + + var statuses = downloadClient.getDownloadStatus("1"); + assertThat(statuses).isNotEmpty(); + assertThat(statuses.iterator().next().getLastDownload()).isNull(); + + + downloadClient.setDownloaded(JSONPrimitive.of(statuses.iterator().next().getStorageId())); + statuses = downloadClient.getDownloadStatus("1"); + assertThat(statuses).isNotEmpty(); + assertThat(statuses.iterator().next().getLastDownload()).isNotNull(); + + + downloadClient.deleteDownloadStatus(JSONPrimitive.of(statuses.iterator().next().getStorageId())); + statuses = downloadClient.getDownloadStatus("1"); + assertThat(statuses).isEmpty(); + + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java new file mode 100644 index 000000000..1f900a3d3 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileProcessingTest.java @@ -0,0 +1,81 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient; +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.data.dossier.FileStatus; +import com.iqser.red.service.redaction.v1.model.AnalyzeResult; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class FileProcessingTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private FileProcessingClient fileProcessingClient; + + @Autowired + private FileClient fileClient; + + @Test + public void testFileProcessing() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + assertThat(file.getLastOCRTime()).isNull(); + + fileProcessingClient.analysisFailed(dossier.getId(), file.getId()); + var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + + + fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder() + .analysisVersion(100) + .fileId(file.getId()) + .dossierId(dossier.getId()).build()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); + + + + fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + + + fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.PROCESSING); + assertThat(loadedFile.getLastOCRTime()).isNotNull(); + + + + fileProcessingClient.indexing(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.INDEXING); + assertThat(loadedFile.getLastIndexed()).isNull(); + + + fileProcessingClient.indexingFailed(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.ERROR); + + + fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getStatus()).isEqualTo(FileStatus.UNASSIGNED); + assertThat(loadedFile.getLastIndexed()).isNotNull(); + + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java new file mode 100644 index 000000000..f33d23853 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -0,0 +1,54 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.ReportTemplateUploadRequest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private ReportTemplateClient reportTemplateClient; + + @Test + public void testReportTemplate() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName("test.docx") + .template(new byte[]{1, 2, 3, 4}).build()); + + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator().next().getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + + reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + } +} 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 a6204fc9e..67954b016 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 @@ -177,8 +177,12 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private FileAttributesRepository fileAttributesRepository; + @Autowired + private DownloadStatusRepository downloadStatusRepository; + @After public void afterTests() { + downloadStatusRepository.deleteAll(); fileAttributesRepository.deleteAll(); watermarkRepository.deleteAll(); smtpRepository.deleteAll(); @@ -188,9 +192,6 @@ public abstract class AbstractPersistenceServerServiceTest { reportTemplateRepository.deleteAll(); typeRepository.deleteAll(); viewedPagesRepository.deleteAll(); - fileRepository.deleteAll(); - dossierRepository.deleteAll(); - dossierTemplateRepository.deleteAll(); notificationRepository.deleteAll(); auditRepository.deleteAll(); manualRedactionRepository.deleteAll(); @@ -202,6 +203,9 @@ public abstract class AbstractPersistenceServerServiceTest { watermarkRepository.deleteAll(); ruleSetRepository.deleteAll(); smtpRepository.deleteAll(); + fileRepository.deleteAll(); + dossierRepository.deleteAll(); + dossierTemplateRepository.deleteAll(); } } From 3a1662ef0f2c9916510278bcc3ed56bc7113c59d Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 14:33:04 +0300 Subject: [PATCH 08/12] more tests --- .../model/data/dossier/DossierAttribute.java | 7 ++++ .../DossierAttributePersistenceService.java | 6 ++- .../tests/DossierAttributeTest.java | 40 ++++++++++++++++--- .../AbstractPersistenceServerServiceTest.java | 8 ++++ 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierAttribute.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierAttribute.java index e750c4115..e8f8fd0ea 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierAttribute.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/data/dossier/DossierAttribute.java @@ -1,6 +1,8 @@ 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; @@ -11,6 +13,9 @@ import java.io.Serializable; @Data @Table(name = "dossier_attribute") @Entity +@AllArgsConstructor +@NoArgsConstructor +@Builder public class DossierAttribute { @EmbeddedId @@ -19,10 +24,12 @@ public class DossierAttribute { @Column private String value; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @MapsId("dossierId") private Dossier dossier; + @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @MapsId("dossierAttributeConfigId") private DossierAttributeConfig dossierAttributeConfig; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java index 45ead2a61..07aa6ebe1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributePersistenceService.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierAttribute; @@ -15,15 +16,18 @@ import java.util.List; @SuppressWarnings("PMD.TooManyStaticImports") public class DossierAttributePersistenceService { + private final DossierAttributeConfigRepository dossierAttributeConfigRepository; private final DossierAttributeRepository dossierAttributeRepository; private final DossierRepository dossierRepository; + @Transactional public void insertDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) { DossierAttribute dossierAttribute = new DossierAttribute(); - dossierAttribute.setId(new DossierAttribute.DossierAttributeId(null, dossierAttributeId)); + dossierAttribute.setId(new DossierAttribute.DossierAttributeId(null, null)); dossierAttribute.setValue(dossierAttributeValue); dossierAttribute.setDossier(dossierRepository.getOne(dossierId)); + dossierAttribute.setDossierAttributeConfig(dossierAttributeConfigRepository.getOne(dossierAttributeId)); dossierAttributeRepository.save(dossierAttribute); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java index e4bab268e..8dbcae255 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierAttributeTest.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; -import com.iqser.red.service.peristence.v1.server.integration.client.*; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeClient; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierAttributeConfigClient; 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; @@ -11,16 +12,13 @@ import org.assertj.core.util.Lists; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { - - @Autowired - private FileTesterAndProvider fileTesterAndProvider; - @Autowired private DossierTesterAndProvider dossierTesterAndProvider; @@ -45,7 +43,7 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { attribute.setType(DossierAttributeConfig.DossierAttributeType.TEXT); - dossierAttributeConfigClient.addOrUpdateDossierAttribute(dossier.getDossierTemplateId(),attribute); + dossierAttributeConfigClient.addOrUpdateDossierAttribute(dossier.getDossierTemplateId(), attribute); loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); assertThat(loadedAttributes).isNotEmpty(); @@ -64,7 +62,37 @@ public class DossierAttributeTest extends AbstractPersistenceServerServiceTest { dossierAttributeConfigClient.setDossierAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList(attribute)); loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); assertThat(loadedAttributes).isNotEmpty(); + var configId = loadedAttributes.iterator().next().getId(); + + + List dossierAttributes = new ArrayList<>(); + dossierAttributes.add(DossierAttribute.builder().id(new DossierAttribute.DossierAttributeId(dossier.getId(), configId)).value("lorem ipsum").build()); + dossierAttributeClient.setDossierAttributes(dossier.getId(), dossierAttributes); + + + var loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId()); + assertThat(loadedAttributeValues).isNotEmpty(); + + var firstAttribute = loadedAttributeValues.iterator().next(); + assertThat(firstAttribute.getValue()).isEqualTo("lorem ipsum"); + firstAttribute.setValue("test"); + dossierAttributeClient.addOrUpdateDossierAttribute(dossier.getId(), firstAttribute); + + + loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId()); + assertThat(loadedAttributeValues).isNotEmpty(); + firstAttribute = loadedAttributeValues.iterator().next(); + assertThat(firstAttribute.getValue()).isEqualTo("test"); + + + dossierAttributeClient.deleteDossierAttribute(dossier.getId(), firstAttribute.getId().getDossierAttributeConfigId()); + loadedAttributeValues = dossierAttributeClient.getDossierAttributes(dossier.getId()); + assertThat(loadedAttributeValues).isEmpty(); + + dossierAttributeConfigClient.deleteDossierAttributes(Lists.newArrayList(loadedAttributes.iterator().next().getId())); + loadedAttributes = dossierAttributeConfigClient.getDossierAttributes(dossier.getDossierTemplateId()); + assertThat(loadedAttributes).isEmpty(); } } 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 67954b016..5d8a84352 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 @@ -180,8 +180,16 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired private DownloadStatusRepository downloadStatusRepository; + @Autowired + private DossierAttributeRepository dossierAttributeRepository; + + @Autowired + private DossierAttributeConfigRepository dossierAttributeConfigRepository; + @After public void afterTests() { + dossierAttributeRepository.deleteAll(); + dossierAttributeConfigRepository.deleteAll(); downloadStatusRepository.deleteAll(); fileAttributesRepository.deleteAll(); watermarkRepository.deleteAll(); From 49ced1cb508e17fee4d93747225545c89963b313 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 15:19:58 +0300 Subject: [PATCH 09/12] more tests and refactor downlod package to not use reportType --- .../download/DownloadPreparationService.java | 175 ++++++++---------- .../service/DossierTesterAndProvider.java | 12 +- .../tests/DownloadPreparationTest.java | 102 ++++++++++ .../integration/tests/DownloadTest.java | 1 + .../utils/FileSystemBackedStorageService.java | 12 ++ 5 files changed, 197 insertions(+), 105 deletions(-) create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java index 854504d2f..926d4f624 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java @@ -1,23 +1,21 @@ package com.iqser.red.service.peristence.v1.server.service.download; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronRedactionRequest; import com.iqser.red.service.peristence.v1.server.client.RedactionClient; import com.iqser.red.service.peristence.v1.server.service.FileManagementStorageService; import com.iqser.red.service.peristence.v1.server.service.RedactionLogService; import com.iqser.red.service.peristence.v1.server.utils.FileSystemBackedArchiver; -import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronRedactionRequest; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.service.v1.api.model.FileType; +import com.iqser.red.service.persistence.service.v1.api.model.data.audit.AddNotificationRequest; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DownloadFileType; 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.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.data.download.DownloadStatus; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; -import com.iqser.red.service.redaction.report.v1.api.model.ReportType; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; import com.iqser.red.service.redaction.v1.model.AnnotateRequest; import com.iqser.red.service.redaction.v1.model.RedactionLog; @@ -25,6 +23,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; +import java.util.Map; +import java.util.stream.Collectors; + @Slf4j @Service @RequiredArgsConstructor @@ -36,14 +38,15 @@ public class DownloadPreparationService { private final RedactionClient redactionClient; private final PDFTronRedactionClient pdfTronRedactionClient; private final ReportTemplatePersistenceService reportTemplatePersistenceService; - private final DossierPersistenceService dossierPersistenceService; private final RedactionLogService redactionLogService; + private final NotificationPersistenceService notificationPersistenceService; + private final DossierPersistenceService dossierPersistenceService; - + @Transactional public void createDownload(ReportResultMessage reportResultMessage) { DownloadStatus downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId()); - var dossier = downloadStatus.getDossier(); + Dossier dossier = downloadStatus.getDossier(); try (FileSystemBackedArchiver fileSystemBackedArchiver = new FileSystemBackedArchiver()) { @@ -51,8 +54,14 @@ public class DownloadPreparationService { addReports(reportResultMessage, fileSystemBackedArchiver); storeZipFile(downloadStatus, fileSystemBackedArchiver); - downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatus.DownloadStatusValue.READY, fileSystemBackedArchiver - .getContentLength()); + downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatus.DownloadStatusValue.READY, fileSystemBackedArchiver.getContentLength()); + + notificationPersistenceService.insertNotification(AddNotificationRequest.builder() + .userId(downloadStatus.getUserId()) + .issuerId(downloadStatus.getUserId()) + .notificationType("DOWNLOAD_READY") + .target(Map.of("userId", downloadStatus.getUserId(), "dossierId", dossier.getId(), "downloadId", reportResultMessage.getDownloadId())) + .build()); } } @@ -60,18 +69,18 @@ public class DownloadPreparationService { private void generateAndAddFiles(DownloadStatus downloadStatus, FileSystemBackedArchiver fileSystemBackedArchiver, boolean watermarkEnabled) { - var dossier = downloadStatus.getDossier(); - int i = 1; long fileGenerationStart = System.currentTimeMillis(); - for (File fileStatus : downloadStatus.getFiles()) { + var fileIds = downloadStatus.getFiles().stream().map(File::getId).collect(Collectors.toList()); + for (String fileId : fileIds) { - var fileId = fileStatus.getId(); long start = System.currentTimeMillis(); - byte[] original = fileManagementStorageService.getStoredObjectBytes(dossier.getId(), fileId, FileType.ORIGIN); + File fileStatus = fileStatusPersistenceService.getStatus(fileId); + byte[] original = fileManagementStorageService.getStoredObjectBytes(fileStatus.getDossierId(), fileId, FileType.ORIGIN); - RedactionLog redactionLog = getRedactionLog(dossier.getId(), fileId, fileStatus.isExcluded()); + RedactionLog redactionLog = getRedactionLog(fileStatus.getDossierId(), fileId, fileStatus.isExcluded()); + var dossier = dossierPersistenceService.findByDossierId(fileStatus.getDossierId()); for (DownloadFileType downloadFileType : downloadStatus.getDownloadFileTypes()) { @@ -79,23 +88,20 @@ public class DownloadPreparationService { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", fileStatus.getFilename(), original)); } if (downloadFileType.name().equals(DownloadFileType.ANNOTATED.name())) { - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Annotated", addSuffix(fileStatus - .getFilename(), "annotated"), getAnnotated(dossier.getDossierTemplateId(), dossier.getId(), fileId))); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Annotated", addSuffix(fileStatus.getFilename(), "annotated"), getAnnotated(dossier.getDossierTemplateId(), fileStatus.getDossierId(), fileId))); } if (downloadFileType.name().equals(DownloadFileType.PREVIEW.name())) { - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(fileStatus - .getFilename(), "highlighted"), getPreview(original, redactionLog, dossier.getDossierTemplateId()))); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(fileStatus.getFilename(), "highlighted"), getPreview(original, redactionLog, dossier.getDossierTemplateId()))); } if (downloadFileType.name().equals(DownloadFileType.REDACTED.name())) { - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(fileStatus - .getFilename(), "redacted"), getRedacted(original, redactionLog, dossier.getDossierTemplateId(), watermarkEnabled))); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(fileStatus.getFilename(), "redacted"), getRedacted(original, redactionLog, dossier.getDossierTemplateId(), watermarkEnabled))); } } - log.info("Successfully added file {}/{} for downloadId {}, took {}", i, downloadStatus.getFiles() + log.info("Successfully added file {}/{} for downloadId {}, took {}", i, fileIds .size(), downloadStatus.getStorageId(), System.currentTimeMillis() - start); i++; } - log.info("Successfully added {} files for downloadId {}, took {}", i, downloadStatus.getStorageId(), System.currentTimeMillis() - fileGenerationStart); + log.info("Successfully added {} files for downloadId {}, took {}", fileIds, downloadStatus.getStorageId(), System.currentTimeMillis() - fileGenerationStart); } @@ -104,58 +110,57 @@ public class DownloadPreparationService { long addReportsStart = System.currentTimeMillis(); for (StoredFileInformation storedFileInformation : reportResultMessage.getStoredFileInformation()) { - if (storedFileInformation.getReportType().equals(ReportType.EXCEL_MULTI_FILE)) { - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Excel Reports", "MultiFileReport.xlsx", report)); - continue; + + File fileStatus = null; + + if (storedFileInformation.getFileId() != null) { + fileStatus = fileStatusPersistenceService.getStatus(storedFileInformation.getFileId()); } - if (storedFileInformation.getReportType().equals(ReportType.EXCEL_TEMPLATE_MULTI_FILE)) { - ReportTemplate reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId()); - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate - .getFileName()) + " (multifile)", reportTemplate.getFileName(), report)); - continue; - } + ReportTemplate reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId()); + byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), + createFileName(fileStatus, reportTemplate), report)); - var fileStatus = fileStatusPersistenceService.getStatus(storedFileInformation.getFileId()); - - if (storedFileInformation.getReportType().equals(ReportType.EXCEL_SINGLE_FILE)) { - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Excel Reports", toXlsxFilename(fileStatus - .getFilename()), report)); - } - - if (storedFileInformation.getReportType().equals(ReportType.WORD_SINGLE_FILE_APPENDIX_A1_TEMPLATE)) { - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Justification Appendix A1", toDocxFilename(addSuffix(fileStatus - .getFilename(), "justification")), report)); - } - - if (storedFileInformation.getReportType().equals(ReportType.WORD_SINGLE_FILE_APPENDIX_A2_TEMPLATE)) { - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Justification Appendix A2", toDocxFilename(addSuffix(fileStatus - .getFilename(), "justification")), report)); - } - - if (storedFileInformation.getReportType().equals(ReportType.WORD_SINGLE_FILE)) { - ReportTemplate reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId()); - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate - .getFileName()), toDocxFilename(fileStatus.getFilename()), report)); - } - - if (storedFileInformation.getReportType().equals(ReportType.EXCEL_TEMPLATE_SINGLE_FILE)) { - ReportTemplate reportTemplate = reportTemplatePersistenceService.find(storedFileInformation.getTemplateId()); - byte[] report = fileManagementStorageService.getStoredObjectBytes(storedFileInformation.getStorageId()); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate - .getFileName()), toXlsxFilename(fileStatus.getFilename()), report)); - } } log.info("Successfully added {} reports for downloadId {}, took {}", reportResultMessage.getStoredFileInformation() .size(), reportResultMessage.getDownloadId(), System.currentTimeMillis() - addReportsStart); } + private String createFileName(File fileStatus, ReportTemplate reportTemplate) { + + if (fileStatus != null) { + return removeExtension(fileStatus.getFilename()) + getExtension(reportTemplate.getFileName()); + } else { + return reportTemplate.getFileName(); + } + } + + private String getExtension(String fileName) { + var index = fileName.lastIndexOf("."); + if (index > 0) { + return fileName.substring(index); + } else { + return ""; + } + } + + private String removeExtension(String fileName) { + var index = fileName.lastIndexOf("."); + if (index > 0) { + return fileName.substring(index); + } else { + return fileName; + } + } + + + private String addSuffix(String filename, String suffix) { + var oldExtension = getExtension(filename); + return removeExtension(filename) + "_" + suffix + oldExtension; + + } + private void storeZipFile(DownloadStatus downloadStatus, FileSystemBackedArchiver fileSystemBackedArchiver) { @@ -197,38 +202,6 @@ public class DownloadPreparationService { } - private String toDocxFilename(String filename) { - - if (filename.toLowerCase().endsWith(".pdf")) { - return filename.substring(0, filename.length() - 3) + "docx"; - } else { - return filename + ".docx"; - } - } - - - private String toXlsxFilename(String filename) { - - if (filename.toLowerCase().endsWith(".pdf")) { - return filename.substring(0, filename.length() - 3) + "xlsx"; - } else { - return filename + ".xlsx"; - } - } - - - private String removeExtension(String filename) { - - return filename.substring(0, filename.length() - 5); - } - - - private String addSuffix(String filename, String suffix) { - - return filename.substring(0, filename.length() - 4) + "_" + suffix + ".pdf"; - } - - private RedactionLog getRedactionLog(String dossierId, String fileId, boolean isExcluded) { if (isExcluded) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 4d66b6735..f477784e7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -4,6 +4,7 @@ import com.google.common.collect.Sets; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.persistence.service.v1.api.model.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.Dossier; +import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DossierTemplate; import com.iqser.red.service.persistence.service.v1.api.model.data.dossier.DownloadFileType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -16,14 +17,12 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class DossierTesterAndProvider { @Autowired - private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; @Autowired private DossierClient dossierClient; - public Dossier provideTestDossier(){ - - var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + public Dossier provideTestDossier(DossierTemplate testTemplate) { CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); @@ -48,7 +47,12 @@ public class DossierTesterAndProvider { return loadedDossier; } + public Dossier provideTestDossier() { + var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + return provideTestDossier(testTemplate); + } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java new file mode 100644 index 000000000..c0231fe39 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -0,0 +1,102 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; +import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +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.peristence.v1.server.service.download.DownloadReportMessageReceiver; +import com.iqser.red.service.persistence.service.v1.api.model.DownloadRequest; +import com.iqser.red.service.persistence.service.v1.api.model.ReportTemplateUploadRequest; +import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; +import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; +import com.iqser.red.storage.commons.service.StorageService; +import lombok.SneakyThrows; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DownloadPreparationTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DownloadReportMessageReceiver downloadReportMessageReceiver; + + @Autowired + private StorageService storageService; + + @Autowired + private FileTesterAndProvider fileTesterAndProvider; + + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private DownloadClient downloadClient; + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Autowired + private ReportTemplateClient reportTemplateClient; + + + @Test + @SneakyThrows + public void testReceiveDownloadPackage() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName("test.docx") + .template(new byte[]{1, 2, 3, 4}).build()); + + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + + downloadClient.prepareDownload(DownloadRequest.builder() + .userId("1") + .dossierId(dossier.getId()) + .fileIds(Collections.singletonList(file.getId())) + .build()); + + var statuses = downloadClient.getDownloadStatus("1"); + assertThat(statuses).isNotEmpty(); + assertThat(statuses.iterator().next().getLastDownload()).isNull(); + + + ArrayList sivList = new ArrayList<>(); + + var siv = new StoredFileInformation(); + siv.setFileId(file.getId()); + siv.setStorageId("XYZ"); + siv.setTemplateId(availableTemplates.iterator().next().getTemplateId()); + sivList.add(siv); + storageService.storeObject("XYZ", new ByteArrayInputStream(new byte[]{1, 2, 3, 4})); + + + ReportResultMessage reportResultMessage = new ReportResultMessage(); + reportResultMessage.setUserId("1"); + reportResultMessage.setDownloadId(statuses.iterator().next().getStorageId()); + reportResultMessage.setStoredFileInformation(sivList); + + downloadReportMessageReceiver.receive(objectMapper.writeValueAsString(reportResultMessage)); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 2d8314117..ff8587fab 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -54,4 +54,5 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java index 77fd8ef24..2697696b7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/FileSystemBackedStorageService.java @@ -9,6 +9,7 @@ import org.springframework.core.io.InputStreamResource; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.InputStream; import java.util.HashMap; import java.util.Map; @@ -32,6 +33,17 @@ public class FileSystemBackedStorageService extends StorageService { } + + @SneakyThrows + @Override + public void storeObject(String objectId, InputStream data) { + File tempFile = File.createTempFile("test", ".tmp"); + + IOUtils.copy(data, new FileOutputStream(tempFile)); + + dataMap.put(objectId, tempFile); + } + @SneakyThrows @Override public void storeObject(String objectId, byte[] data) { From 4ed731d1142a5240bf40281ccd6b9a0c5e4f65b1 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 15:34:55 +0300 Subject: [PATCH 10/12] finished basic tests --- .../resources/ManualRedactionResource.java | 6 +- .../service/ManualRedactionService.java | 13 +--- .../tests/ManualRedactionTest.java | 73 ++++++++++++++++++- 3 files changed, 77 insertions(+), 15 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java index 39c01beff..9baf57732 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ManualRedactionResource.java @@ -84,7 +84,7 @@ public interface ManualRedactionResource { @GetMapping(value = MANUAL_REDACTION_REST_PATH + "/comment" + COMMENT_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - Comment getComment( @PathVariable(COMMENT_ID) long commentId); + Comment getComment(@PathVariable(COMMENT_ID) long commentId); @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE) @@ -112,8 +112,8 @@ public interface ManualRedactionResource { @PathVariable(ANNOTATION_ID) String annotationId); - @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/comment" + FILE_ID_PATH_VARIABLE + COMMENT_ID_PATH_VARIABLE) - void deleteComment( @PathVariable(FILE_ID) String fileId,@PathVariable(COMMENT_ID) long commentId); + @DeleteMapping(MANUAL_REDACTION_REST_PATH + "/comment" + FILE_ID_PATH_VARIABLE + COMMENT_ID_PATH_VARIABLE) + void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId); @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/status/add" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + ANNOTATION_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java index ae61f6053..f0fd50623 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/ManualRedactionService.java @@ -12,7 +12,6 @@ import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; @@ -484,11 +483,8 @@ public class ManualRedactionService { dictionaryClient.addEntries(typeId, List.of(value), false); fileStatusService.setStatusReprocess(dossierId, fileId, 100); - } catch (FeignException e) { - if (e.status() == HttpStatus.NOT_FOUND.value()) { - throw new BadRequestException(e.getMessage()); - } - throw e; + } catch (Exception e) { + throw new BadRequestException(e.getMessage()); } } @@ -500,10 +496,7 @@ public class ManualRedactionService { dictionaryClient.deleteEntries(typeId, List.of(value)); fileStatusService.setStatusReprocess(dossierId, fileId, 100); } catch (FeignException e) { - if (e.status() == HttpStatus.NOT_FOUND.value()) { - throw new BadRequestException(e.getMessage()); - } - throw e; + throw new BadRequestException(e.getMessage()); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index aebc9bf9f..9028cab25 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -33,7 +33,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); - var type = typeProvider.testAndProvideType(dossier.getDossierTemplate(),null, "manual"); + var type = typeProvider.testAndProvideType(dossier.getDossierTemplate(), null, "manual"); + + var comment = manualRedactionClient.addComment(dossier.getId(), file.getId(), "1", CommentRequest.builder().text("test").user("1").build()); @@ -41,12 +43,24 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(loadedComment.getText()).isEqualTo("test"); + + var addRedaction = manualRedactionClient.addAddRedaction(dossier.getId(), file.getId(), AddRedactionRequest.builder().addToDictionary(true) - .addToDossierDictionary(false).status(AnnotationStatus.REQUESTED).type(type.getId()).user("user").reason("1").value("1").legalBasis("1").build()); + .addToDossierDictionary(false).status(AnnotationStatus.REQUESTED).type(type.getId()).user("user").reason("1").value("test").legalBasis("1").build()); var loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedAddRedaction.getUser()).isEqualTo("user"); assertThat(loadedAddRedaction.getTypeId()).contains("manual"); + manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), addRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedAddRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + + manualRedactionClient.updateAddRedactionStatus(dossier.getId(), file.getId(), addRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + loadedAddRedaction = manualRedactionClient.getAddRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedAddRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + + + var removeRedaction = manualRedactionClient.addRemoveRedaction(dossier.getId(), file.getId(), RemoveRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").removeFromDictionary(false).build()); @@ -55,24 +69,79 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertThat(loadedRemoveRedaction.isRemoveFromDictionary()).isEqualTo(false); assertThat(loadedRemoveRedaction.getSoftDeletedTime()).isNull(); + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedRemoveRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + + manualRedactionClient.updateRemoveRedactionStatus(dossier.getId(), file.getId(), removeRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + loadedRemoveRedaction = manualRedactionClient.getRemoveRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedRemoveRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + + + var forceRedaction = manualRedactionClient.addForceRedaction(dossier.getId(), file.getId(), ForceRedactionRequest.builder() .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build()); var loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction.getAnnotationId()); assertThat(loadedForceRedaction.getLegalBasis()).isEqualTo("1"); + manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedForceRedaction.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + + manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + loadedForceRedaction = manualRedactionClient.getForceRedaction(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedForceRedaction.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + + + var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossier.getId(), file.getId(), LegalBasisChangeRequest.builder() .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build()); var loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedLegalBasisChange.getId().getId()).isEqualTo(legalBasisChange.getAnnotationId()); + manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), legalBasisChange.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedLegalBasisChange.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + + manualRedactionClient.updateLegalBasisChangeStatus(dossier.getId(), file.getId(), legalBasisChange.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + loadedLegalBasisChange = manualRedactionClient.getLegalBasisChange(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedLegalBasisChange.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + + + var imageRecategorization = manualRedactionClient.addImageRecategorization(dossier.getId(), file.getId(), ImageRecategorizationRequest.builder() .annotationId(addRedaction.getAnnotationId()).comment("comment").status(AnnotationStatus.REQUESTED).user("test").type("new-type").build()); var loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); assertThat(loadedImageRecategorization.getId().getId()).isEqualTo(imageRecategorization.getAnnotationId()); + manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), imageRecategorization.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.APPROVED)); + loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedImageRecategorization.getStatus()).isEqualTo(AnnotationStatus.APPROVED); + + manualRedactionClient.updateImageRecategorizationStatus(dossier.getId(), file.getId(), imageRecategorization.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.DECLINED)); + loadedImageRecategorization = manualRedactionClient.getImageRecategorization(file.getId(), addRedaction.getAnnotationId()); + assertThat(loadedImageRecategorization.getStatus()).isEqualTo(AnnotationStatus.DECLINED); + + + ManualRedactions manualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId()); + assertThat(manualRedactions.getForceRedactions()).isNotEmpty(); + assertThat(manualRedactions.getLegalBasisChanges()).isNotEmpty(); + assertThat(manualRedactions.getEntriesToAdd()).isNotEmpty(); + assertThat(manualRedactions.getIdsToRemove()).isNotEmpty(); + assertThat(manualRedactions.getImageRecategorization()).isNotEmpty(); + assertThat(manualRedactions.getComments()).isNotEmpty(); + + + manualRedactions.getForceRedactions().forEach(e -> manualRedactionClient.deleteForceRedaction(dossier.getId(), file.getId(), e.getId().getId())); + manualRedactions.getLegalBasisChanges().forEach(e -> manualRedactionClient.deleteLegalBasisChange(dossier.getId(), file.getId(), e.getId().getId())); + manualRedactions.getEntriesToAdd().forEach(e -> manualRedactionClient.deleteAddRedaction(dossier.getId(), file.getId(), e.getId().getId())); + manualRedactions.getIdsToRemove().forEach(e -> manualRedactionClient.deleteRemoveRedaction(dossier.getId(), file.getId(), e.getId().getId())); + manualRedactions.getImageRecategorization().forEach(e -> manualRedactionClient.deleteImageRecategorization(dossier.getId(), file.getId(), e.getId().getId())); + + manualRedactions.getComments().forEach((key, value) -> value.forEach(c -> manualRedactionClient.deleteComment(file.getId(), c.getId()))); } } From 188bacfac6ba778e69ad3273929d4094ae3c0afe Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 15:39:29 +0300 Subject: [PATCH 11/12] removed dated file --- .../peristence/v1/server/ResourceLoader.java | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/ResourceLoader.java diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/ResourceLoader.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/ResourceLoader.java deleted file mode 100644 index 24f2541cc..000000000 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/ResourceLoader.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.iqser.red.service.peristence.v1.server; - -import lombok.experimental.UtilityClass; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Set; -import java.util.stream.Collectors; - -@UtilityClass -public class ResourceLoader { - - - public Set load(String classpathPath) { - - URL resource = ResourceLoader.class.getClassLoader().getResource(classpathPath); - if (resource == null) { - throw new IllegalArgumentException("could not load classpath resource: " + classpathPath); - } - try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.openStream(), StandardCharsets.UTF_8))) { - return br.lines().collect(Collectors.toSet()); - } catch (IOException e) { - throw new IllegalArgumentException("could not load classpath resource: " + classpathPath, e); - } - } - - - public String loadToString(String classpathPath) { - - URL resource = ResourceLoader.class.getClassLoader().getResource(classpathPath); - if (resource == null) { - throw new IllegalArgumentException("could not load classpath resource: " + classpathPath); - } - try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.openStream(), StandardCharsets.UTF_8))) { - return br.lines().collect(Collectors.joining("\n")); - } catch (IOException e) { - throw new IllegalArgumentException("could not load classpath resource: " + classpathPath, e); - } - - } - -} From 8e9cc91f72ee0db79217595cc6fcd55168837ba1 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 20 Sep 2021 15:42:16 +0300 Subject: [PATCH 12/12] fixed cx --- .../v1/server/controller/LegalBasisMappingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java index efaf4c9f2..cae881757 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/LegalBasisMappingController.java @@ -48,6 +48,6 @@ public class LegalBasisMappingController implements LegalBasisMappingResource { @Override public long getVersion(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId) { - return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMapping::getVersion).orElse(0l); + return legalBasisMappingRepository.findById(dossierTemplateId).map(LegalBasisMapping::getVersion).orElse(0L); } }