diff --git a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ExternalControllerAdviceV2.java b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ExternalControllerAdviceV2.java index fcd0314e8..f3a3a76db 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ExternalControllerAdviceV2.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v2/src/main/java/com/iqser/red/persistence/service/v2/external/api/impl/controller/ExternalControllerAdviceV2.java @@ -178,6 +178,8 @@ public class ExternalControllerAdviceV2 { String message = Objects.requireNonNull(exception.getRootCause()).getMessage(); if (message.contains("uq_component_definition_technical_name_template")) { message = "A component with the same technical name already exists in the given dossier template."; + } else if (message.contains("value too long for type character varying")) { + message = "Value is too long. Please use a shorter value."; } else { message = "Database error occurred."; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index 76065253f..97fd16e95 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -212,4 +212,6 @@ databaseChangeLog: - include: file: db/changelog/tenant/129-add-component-table.yaml - include: - file: db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml \ No newline at end of file + file: db/changelog/tenant/130-add-primary-key-constraint-download-status-reports.yaml + - include: + file: db/changelog/tenant/131-changed-max-size-for-id-in-entity.yaml \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/131-changed-max-size-for-id-in-entity.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/131-changed-max-size-for-id-in-entity.yaml new file mode 100644 index 000000000..24f2e315e --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/131-changed-max-size-for-id-in-entity.yaml @@ -0,0 +1,9 @@ +databaseChangeLog: + - changeSet: + id: changed-max-size-for-id-in-entity + author: ali + changes: + - modifyDataType: + columnName: id + newDataType: VARCHAR(512) + tableName: entity \ No newline at end of file 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 c91e8d10e..807410667 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 @@ -1,25 +1,36 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +import java.util.Set; import org.assertj.core.util.Lists; import org.junit.jupiter.api.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; 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.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.service.DossierService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateTypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; + +import feign.FeignException; public class TypeTest extends AbstractPersistenceServerServiceTest { @@ -133,7 +144,9 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { var types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); assertEquals(types.getTypes().size(), 2); - assertTrue(types.getTypes().stream().allMatch(typeValue -> typeValue.getSoftDeletedTime() == null)); + assertTrue(types.getTypes() + .stream() + .allMatch(typeValue -> typeValue.getSoftDeletedTime() == null)); dictionaryClient.deleteType(type2.getType(), dossierTemplate.getId()); types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); @@ -144,10 +157,44 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { .findFirst() .get().getSoftDeletedTime()); assertNotNull(types.getTypes() - .stream() - .filter(t -> t.getType().equals(type2.getType())) - .findFirst() - .get().getSoftDeletedTime()); + .stream() + .filter(t -> t.getType().equals(type2.getType())) + .findFirst() + .get().getSoftDeletedTime()); } + + @Test + public void testAddTypeWithLongName() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + + var type = new CreateTypeValue(); + type.setAddToDictionaryAction(false); + type.setAutoHideSkipped(false); + type.setCaseInsensitive(false); + type.setDossierDictionaryOnly(false); + type.setDossierTemplateId(dossierTemplate.getId()); + type.setHasDictionary(false); + type.setHexColor("#dddddd"); + type.setHint(false); + String label = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdf"; + type.setLabel(label); + type.setRank(-4); + type.setRecommendation(false); + type.setRecommendationHexColor("#aaaaaa"); + type.setSkippedHexColor("#aaaaaa"); + String typeName = "lorem_ipsum_dolor_sit_amet_consectetuer_adipiscing_elit_aenean_commodo_ligula_eget_dolor_aenean_massa_cum_sociis_natoque_penatibus_et_magnis_dis_parturient_montes_nascetur_ridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdfridiculussdf"; + type.setType(typeName); + + String typeId = toTypeId(typeName, dossierTemplate.getId(), dossier.getId()); + + assertTrue(label.length() > 255 || typeId.length() > 512); + assertThatThrownBy(() -> dictionaryClient.addType(type)).hasMessageContaining("Value is too long.").isInstanceOf(FeignException.class); + + } + + + }