From 6157154378ef830bd69bcd1dcf57a008d202fee0 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 3 Jul 2024 15:42:43 +0200 Subject: [PATCH 1/2] RED-9499: increased id size of entity fo fit typeId length of a created entity * catch too long names * added JUnit test --- .../ExternalControllerAdviceV2.java | 2 + .../db/changelog/db.changelog-tenant.yaml | 4 +- ...131-changed-max-size-for-id-in-entity.yaml | 9 +++ .../v1/server/integration/tests/TypeTest.java | 62 +++++++++++++++++-- 4 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/131-changed-max-size-for-id-in-entity.yaml 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..1d6e8f002 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 { @@ -35,6 +46,9 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { @Autowired private DictionaryClient dictionaryClient; +// @Autowired +// private DossierService dossierService; + @Test public void testType() { @@ -133,7 +147,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 +160,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); + + } + + + } From d8c5668a384e8e4af8cfd9caa79086a18ee184d9 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 3 Jul 2024 16:17:30 +0200 Subject: [PATCH 2/2] Update TypeTest.java --- .../peristence/v1/server/integration/tests/TypeTest.java | 3 --- 1 file changed, 3 deletions(-) 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 1d6e8f002..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 @@ -46,9 +46,6 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { @Autowired private DictionaryClient dictionaryClient; -// @Autowired -// private DossierService dossierService; - @Test public void testType() {