RED-7677 - dossier-template endpoint should return a 400 if validFrom > validTo

This commit is contained in:
Andrei Isvoran 2023-11-01 10:16:14 +01:00
parent 0a8347d326
commit e1007dc5c4
2 changed files with 35 additions and 0 deletions

View File

@ -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<DossierTemplateEntity> 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) {

View File

@ -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."));
}
}