diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java index 178c32de1..9f691baa1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java @@ -28,8 +28,8 @@ public class LegalBasisMappingPersistenceService { private final LegalBasisMappingRepository legalBasisMappingRepository; - private final int MAX_NAME_LENGTH = 255; - private final int MAX_LEGAL_BASIS_LENGTH = 4000; + public static final int MAX_NAME_LENGTH = 255; + public static final int MAX_LEGAL_BASIS_FIELD_LENGTH = 4000; @Transactional @@ -75,12 +75,7 @@ public class LegalBasisMappingPersistenceService { @Transactional public void addOrUpdateLegalBasis(String dossierTemplateId, LegalBasis legalBasis) { - if (legalBasis.getTechnicalName() == null) { - throw new BadRequestException("Can not add or update legal basis in dossier template because technical name it is not set."); - } - if (legalBasis.getName() == null) { - throw new BadRequestException("Can not add or update legal basis in dossier template because name it is not set."); - } + validateLegalBasis(legalBasis); var mapping = getLegalBasisMappingOrCreate(dossierTemplateId); @@ -132,20 +127,20 @@ public class LegalBasisMappingPersistenceService { throw new BadRequestException("The name cannot be empty!"); } + if (legalBasis.getTechnicalName().length() > MAX_LEGAL_BASIS_FIELD_LENGTH) { + throw new BadRequestException(String.format("The legal basis is too long (%s), max length %s", legalBasis.getTechnicalName().length(), MAX_LEGAL_BASIS_FIELD_LENGTH)); + } + if (legalBasis.getName().length() > MAX_NAME_LENGTH) { throw new BadRequestException(String.format("The name is too long (%s), max length %s", legalBasis.getName().length(), MAX_NAME_LENGTH)); } - if (legalBasis.getDescription().length() > MAX_LEGAL_BASIS_LENGTH) { - throw new BadRequestException(String.format("The description is too long (%s), max length %s", legalBasis.getDescription().length(), MAX_LEGAL_BASIS_LENGTH)); + if (legalBasis.getDescription() != null && legalBasis.getDescription().length() > MAX_LEGAL_BASIS_FIELD_LENGTH) { + throw new BadRequestException(String.format("The description is too long (%s), max length %s", legalBasis.getDescription().length(), MAX_LEGAL_BASIS_FIELD_LENGTH)); } - if (legalBasis.getReason().length() > MAX_LEGAL_BASIS_LENGTH) { - throw new BadRequestException(String.format("The legal basis is too long (%s), max length %s", legalBasis.getReason().length(), MAX_LEGAL_BASIS_LENGTH)); - } - - if (legalBasis.getTechnicalName().length() > MAX_LEGAL_BASIS_LENGTH) { - throw new BadRequestException(String.format("The legal basis is too long (%s), max length %s", legalBasis.getTechnicalName().length(), MAX_LEGAL_BASIS_LENGTH)); + if (legalBasis.getReason() != null && legalBasis.getReason().length() > MAX_LEGAL_BASIS_FIELD_LENGTH) { + throw new BadRequestException(String.format("The legal basis is too long (%s), max length %s", legalBasis.getReason().length(), MAX_LEGAL_BASIS_FIELD_LENGTH)); } } @@ -153,6 +148,8 @@ public class LegalBasisMappingPersistenceService { @Transactional public void setLegalBasisMapping(String dossierTemplateId, List legalBasisMapping) { + legalBasisMapping.forEach(this::validateLegalBasis); + legalBasisMappingRepository.findById(dossierTemplateId).ifPresentOrElse((lbm) -> { lbm.setVersion(lbm.getVersion() + 1); lbm.setLegalBasis(convert(legalBasisMapping, LegalBasisEntity.class)); 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 index 1ae5de781..24b6f3ca4 100644 --- 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 @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; import org.assertj.core.util.Lists; @@ -15,6 +16,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.LegalBasisC import com.iqser.red.service.peristence.v1.server.integration.client.VersionClient; 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.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis; import feign.FeignException; @@ -88,12 +90,67 @@ public class LegalBasisTest extends AbstractPersistenceServerServiceTest { mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); assertThat(mapping.size()).isEqualTo(2); - LegalBasis finalLegalBasis2 = LegalBasis.builder().name(null).description("test").reason("test").technicalName("test").build(); - var e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), finalLegalBasis2)); + LegalBasis finalLegalBasis1 = LegalBasis.builder().name(null).description("test").reason("test").technicalName("test").build(); + var e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), finalLegalBasis1)); assertEquals(e.status(), 400); - LegalBasis finalLegalBasis1 = LegalBasis.builder().name("test").description("test").reason("test").technicalName(null).build(); - e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), finalLegalBasis1)); + LegalBasis finalLegalBasis2 = LegalBasis.builder().name("test").description("test").reason("test").technicalName(null).build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), finalLegalBasis2)); + assertEquals(e.status(), 400); + + legalBasis = LegalBasis.builder().name("test 4").description(null).reason("test ").technicalName("test 4").build(); + legalBasisClient.setLegalBasisMapping(List.of(legalBasis), dossierTemplate.getId()); + mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(1); + + legalBasis = LegalBasis.builder().name("test 5").description("test 5").reason(null).technicalName("test 5").build(); + legalBasisClient.setLegalBasisMapping(List.of(legalBasis), dossierTemplate.getId()); + mapping = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId()); + assertThat(mapping.size()).isEqualTo(1); + + LegalBasis finalLegalBasis3 = LegalBasis.builder().name(null).description("test").reason("test").technicalName("test").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(finalLegalBasis3), dossierTemplate.getId())); + assertEquals(e.status(), 400); + + LegalBasis finalLegalBasis4 = LegalBasis.builder().name("test").description("test").reason("test").technicalName(null).build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(finalLegalBasis4), dossierTemplate.getId())); + assertEquals(e.status(), 400); + + + String longName = "a".repeat(LegalBasisMappingPersistenceService.MAX_NAME_LENGTH + 1); + String longField = "a".repeat(LegalBasisMappingPersistenceService.MAX_LEGAL_BASIS_FIELD_LENGTH + 1); + + LegalBasis longNameLegalBasis = LegalBasis.builder().name(longName).description("valid description").reason("valid reason").technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), longNameLegalBasis)); + assertEquals(e.status(), 400); + + LegalBasis validLegalBasis = LegalBasis.builder().name("valid name").description("valid description").reason("valid reason").technicalName("valid technical name").build(); + LegalBasis longNameSetLegalBasis = LegalBasis.builder().name(longName).description("valid description").reason("valid reason").technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(validLegalBasis, longNameSetLegalBasis), dossierTemplate.getId())); + assertEquals(e.status(), 400); + + LegalBasis longDescriptionLegalBasis = LegalBasis.builder().name("valid name").description(longField).reason("valid reason").technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), longDescriptionLegalBasis)); + assertEquals(e.status(), 400); + + LegalBasis longDescriptionSetLegalBasis = LegalBasis.builder().name("valid name").description(longField).reason("valid reason").technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(validLegalBasis, longDescriptionSetLegalBasis), dossierTemplate.getId())); + assertEquals(e.status(), 400); + + LegalBasis longReasonLegalBasis = LegalBasis.builder().name("valid name").description("valid description").reason(longField).technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), longReasonLegalBasis)); + assertEquals(e.status(), 400); + + LegalBasis longReasonSetLegalBasis = LegalBasis.builder().name("valid name").description("valid description").reason(longField).technicalName("valid technical name").build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(validLegalBasis, longReasonSetLegalBasis), dossierTemplate.getId())); + assertEquals(e.status(), 400); + + LegalBasis longTechnicalNameLegalBasis = LegalBasis.builder().name("valid name").description("valid description").reason("valid reason").technicalName(longField).build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), longTechnicalNameLegalBasis)); + assertEquals(e.status(), 400); + + LegalBasis longTechnicalNameSetLegalBasis = LegalBasis.builder().name("valid name").description("valid description").reason("valid reason").technicalName(longField).build(); + e = assertThrows(FeignException.class, () -> legalBasisClient.setLegalBasisMapping(List.of(validLegalBasis, longTechnicalNameSetLegalBasis), dossierTemplate.getId())); assertEquals(e.status(), 400); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/DossierTemplate.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/DossierTemplate.zip index 5d533fdd9..1813ca48c 100644 Binary files a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/DossierTemplate.zip and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/DossierTemplate.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip index ea870134e..660af38d0 100644 Binary files a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1_adress_parts.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1_adress_parts.zip index 492219dfc..7be90d881 100644 Binary files a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1_adress_parts.zip and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/EFSA_sanitisation_GFL_v1_adress_parts.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/Flora.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/Flora.zip index 22e403ded..24282703f 100644 Binary files a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/Flora.zip and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/Flora.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip index b183fac80..4d78d48d1 100644 Binary files a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip differ