Fix formatting of booleans when value is string (e.g., format based on QFieldMetaData type, not value object class)

This commit is contained in:
2024-08-01 15:11:20 -05:00
parent ba3cf53c30
commit a11d584c8a
2 changed files with 14 additions and 4 deletions

View File

@ -68,7 +68,7 @@ public class QValueFormatter
*******************************************************************************/ *******************************************************************************/
public static String formatValue(QFieldMetaData field, Serializable value) public static String formatValue(QFieldMetaData field, Serializable value)
{ {
return (formatValue(field.getDisplayFormat(), field.getName(), value)); return (formatValue(field.getDisplayFormat(), field.getType(), field.getName(), value));
} }
@ -78,7 +78,7 @@ public class QValueFormatter
*******************************************************************************/ *******************************************************************************/
public static String formatValue(String displayFormat, Serializable value) public static String formatValue(String displayFormat, Serializable value)
{ {
return (formatValue(displayFormat, "", value)); return (formatValue(displayFormat, null, "", value));
} }
@ -87,7 +87,7 @@ public class QValueFormatter
** For a display format string, an optional fieldName (only used for logging), ** For a display format string, an optional fieldName (only used for logging),
** and a value, apply the format. ** and a value, apply the format.
*******************************************************************************/ *******************************************************************************/
private static String formatValue(String displayFormat, String fieldName, Serializable value) private static String formatValue(String displayFormat, QFieldType fieldType, String fieldName, Serializable value)
{ {
////////////////////////////////// //////////////////////////////////
// null values get null results // // null values get null results //
@ -107,6 +107,11 @@ public class QValueFormatter
return formatBoolean(b); return formatBoolean(b);
} }
if(QFieldType.BOOLEAN.equals(fieldType))
{
return formatBoolean(ValueUtils.getValueAsBoolean(value));
}
if(value instanceof LocalTime lt) if(value instanceof LocalTime lt)
{ {
return formatLocalTime(lt); return formatLocalTime(lt);
@ -404,6 +409,7 @@ public class QValueFormatter
} }
/******************************************************************************* /*******************************************************************************
** For a single record, set its display values - where caller (meant to stay private) ** For a single record, set its display values - where caller (meant to stay private)
** can specify if they've already done fieldBehaviors (to avoid re-doing). ** can specify if they've already done fieldBehaviors (to avoid re-doing).

View File

@ -36,10 +36,10 @@ import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.fields.DateTimeDisplayValueBehavior;
import com.kingsrook.qqq.backend.core.model.metadata.fields.DisplayFormat; import com.kingsrook.qqq.backend.core.model.metadata.fields.DisplayFormat;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType;
import com.kingsrook.qqq.backend.core.model.metadata.fields.DateTimeDisplayValueBehavior;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.utils.TestUtils; import com.kingsrook.qqq.backend.core.utils.TestUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -89,6 +89,10 @@ class QValueFormatterTest extends BaseTest
assertNull(QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), null)); assertNull(QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), null));
assertEquals("Yes", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), true)); assertEquals("Yes", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), true));
assertEquals("No", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), false)); assertEquals("No", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), false));
assertEquals("Yes", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), "true"));
assertEquals("No", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.BOOLEAN), "false"));
assertEquals("true", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.STRING), "true"));
assertEquals("false", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.STRING), "false"));
assertNull(QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.TIME), null)); assertNull(QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.TIME), null));
assertEquals("5:00:00 AM", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.TIME), LocalTime.of(5, 0))); assertEquals("5:00:00 AM", QValueFormatter.formatValue(new QFieldMetaData().withType(QFieldType.TIME), LocalTime.of(5, 0)));