From e1007dc5c42cf6770fcb172072a084af930eec2b Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Wed, 1 Nov 2023 10:16:14 +0100 Subject: [PATCH] RED-7677 - dossier-template endpoint should return a 400 if validFrom > validTo --- .../DossierTemplatePersistenceService.java | 9 +++++++ .../tests/DossierTemplateTest.java | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index cc3c0d40b..8bb15d261 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -48,6 +48,7 @@ public class DossierTemplatePersistenceService { public DossierTemplateEntity createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest createOrUpdateDossierRequest) { if (createOrUpdateDossierRequest.getDossierTemplateId() != null) { + validateDossierTemplateDates(createOrUpdateDossierRequest.getValidFrom(), createOrUpdateDossierRequest.getValidTo()); validateDossierTemplate(createOrUpdateDossierRequest.getName(), createOrUpdateDossierRequest.getDescription()); Optional dossierTemplate = dossierTemplateRepository.findById(createOrUpdateDossierRequest.getDossierTemplateId()); if (dossierTemplate.isPresent()) { @@ -87,6 +88,14 @@ public class DossierTemplatePersistenceService { } + private void validateDossierTemplateDates(OffsetDateTime validFrom, OffsetDateTime validTo) { + + if (validFrom != null && validTo != null && validFrom.isAfter(validTo)) { + throw new BadRequestException("Invalid dates! validFrom can't be after validTo."); + } + } + + @Transactional public void validateDossierTemplateNameIsUnique(String templateName) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 20fa8a29e..a17264fd7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -1,9 +1,13 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.InputStream; import java.time.OffsetDateTime; +import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.Collections; import java.util.List; @@ -30,6 +34,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkCl 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.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.model.DownloadJob; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.export.ExportDownloadMessageReceiver; @@ -784,4 +789,25 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(loadedTemplate.isRemoveWatermark()).isFalse(); } + @Test + public void testUpdateDossierTemplateWithInvalidDates() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var allTemplates = dossierTemplateClient.getAllDossierTemplates(); + assertThat(allTemplates.size()).isEqualTo(1); + assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); + + // update + var cru = new DossierTemplateModel(); + cru.setDossierTemplateId(dossierTemplate.getId()); + BeanUtils.copyProperties(dossierTemplate, cru); + cru.setName("Template 1 Update"); + cru.setValidTo(OffsetDateTime.of(2020, 1, 1, 1, 1, 1, 1, ZoneOffset.UTC)); + cru.setValidFrom(OffsetDateTime.of(2020, 1, 2, 1, 1, 1, 1, ZoneOffset.UTC)); + + FeignException exception = assertThrows(FeignException.class, () -> dossierTemplateClient.createOrUpdateDossierTemplate(cru)); + assertTrue(exception.getMessage().contains("Invalid dates! validFrom can't be after validTo.")); + } + }