From dc84a9ef55d0e1c7253958e0b806aa0cc8771703 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Tue, 25 Jun 2024 08:15:59 -0500 Subject: [PATCH] CE-1402 add instance validation to CaseChangeBehavior --- .../metadata/fields/CaseChangeBehavior.java | 29 +++++++++++++++++++ .../fields/CaseChangeBehaviorTest.java | 27 +++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehavior.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehavior.java index 56b71ee8..3bf140f4 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehavior.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehavior.java @@ -23,6 +23,8 @@ package com.kingsrook.qqq.backend.core.model.metadata.fields; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Function; @@ -140,4 +142,31 @@ public enum CaseChangeBehavior implements FieldBehavior, Fie return (false); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Override + public List validateBehaviorConfiguration(QTableMetaData tableMetaData, QFieldMetaData fieldMetaData) + { + if(this == NONE) + { + return Collections.emptyList(); + } + + List errors = new ArrayList<>(); + String errorSuffix = " field [" + fieldMetaData.getName() + "] in table [" + tableMetaData.getName() + "]"; + + if(fieldMetaData.getType() != null) + { + if(!fieldMetaData.getType().isStringLike()) + { + errors.add("A CaseChange was a applied to a non-String-like field:" + errorSuffix); + } + } + + return (errors); + } + } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehaviorTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehaviorTest.java index 148413ae..b5851024 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehaviorTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/model/metadata/fields/CaseChangeBehaviorTest.java @@ -44,6 +44,7 @@ import com.kingsrook.qqq.backend.core.utils.collections.ListBuilder; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /******************************************************************************* @@ -212,4 +213,30 @@ class CaseChangeBehaviorTest extends BaseTest assertEquals("Circle", CaseChangeBehavior.NONE.applyToFilterCriteriaValue("Circle", qInstance, table, field)); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testValidation() + { + QTableMetaData table = QContext.getQInstance().getTable(TestUtils.TABLE_NAME_SHAPE); + + /////////////////////////////////////////// + // should be no errors on a string field // + /////////////////////////////////////////// + assertTrue(CaseChangeBehavior.TO_UPPER_CASE.validateBehaviorConfiguration(table, table.getField("name")).isEmpty()); + + ////////////////////////////////////////// + // should be an error on a number field // + ////////////////////////////////////////// + assertEquals(1, CaseChangeBehavior.TO_LOWER_CASE.validateBehaviorConfiguration(table, table.getField("id")).size()); + + ///////////////////////////////////////// + // NONE should be allowed on any field // + ///////////////////////////////////////// + assertTrue(CaseChangeBehavior.NONE.validateBehaviorConfiguration(table, table.getField("id")).isEmpty()); + } + } \ No newline at end of file