Fixing tests and mappings

This commit is contained in:
Darin Kelkhoff
2021-12-13 22:05:49 -06:00
parent c2d4014cb0
commit 72f6137a47
3 changed files with 23 additions and 17 deletions

View File

@ -6,6 +6,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.AbstractQFieldMapping; import com.kingsrook.qqq.backend.core.model.actions.AbstractQFieldMapping;
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.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.QTableMetaData;
import com.kingsrook.qqq.backend.core.utils.JsonUtils; import com.kingsrook.qqq.backend.core.utils.JsonUtils;
import com.kingsrook.qqq.backend.core.utils.StringUtils; import com.kingsrook.qqq.backend.core.utils.StringUtils;
@ -40,7 +41,7 @@ public class JsonToQRecordAdapter
if(JsonUtils.looksLikeObject(json)) if(JsonUtils.looksLikeObject(json))
{ {
JSONObject jsonObject = JsonUtils.toJSONObject(json); JSONObject jsonObject = JsonUtils.toJSONObject(json);
rs.add(buildRecordFromJsonObject(jsonObject)); rs.add(buildRecordFromJsonObject(jsonObject, table, mapping));
} }
else if(JsonUtils.looksLikeArray(json)) else if(JsonUtils.looksLikeArray(json))
{ {
@ -49,7 +50,7 @@ public class JsonToQRecordAdapter
{ {
if(object instanceof JSONObject jsonObject) if(object instanceof JSONObject jsonObject)
{ {
rs.add(buildRecordFromJsonObject(jsonObject)); rs.add(buildRecordFromJsonObject(jsonObject, table, mapping));
} }
else else
{ {
@ -75,15 +76,20 @@ public class JsonToQRecordAdapter
/******************************************************************************* /*******************************************************************************
** private method to build one QRecord from one jsonObject ** private method to build one QRecord from one jsonObject
** **
** todo - meta-data validation, mapping, type handling ** todo - meta-data validation, type handling
*******************************************************************************/ *******************************************************************************/
private QRecord buildRecordFromJsonObject(JSONObject jsonObject) private QRecord buildRecordFromJsonObject(JSONObject jsonObject, QTableMetaData table, AbstractQFieldMapping<?> mapping)
{ {
QRecord record = new QRecord(); QRecord record = new QRecord();
for(String key : jsonObject.keySet()) for(QFieldMetaData field : table.getFields().values())
{ {
record.setValue(key, (Serializable) jsonObject.get(key)); String fieldSource = mapping == null ? field.getName() : String.valueOf(mapping.getFieldSource(field.getName()));
// todo - so if the mapping didn't say how to map this field, does that mean we should use the default name for the field?
if(jsonObject.has(fieldSource))
{
record.setValue(field.getName(), (Serializable) jsonObject.get(fieldSource));
}
} }
return (record); return (record);

View File

@ -18,7 +18,7 @@ public class QKeyBasedFieldMapping extends AbstractQFieldMapping<String>
/******************************************************************************* /*******************************************************************************
** Get the source field (e.g., name that's in the CSV header or the input json ** Get the source field (e.g., name that's in the CSV header or the input json
** object) corresponding to a propery qqq table fieldName. ** object) corresponding to a proper qqq table fieldName.
** **
*******************************************************************************/ *******************************************************************************/
@Override @Override

View File

@ -104,14 +104,14 @@ class JsonToQRecordAdapterTest
JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter(); JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter();
List<QRecord> qRecords = jsonToQRecordAdapter.buildRecordsFromJson(""" List<QRecord> qRecords = jsonToQRecordAdapter.buildRecordsFromJson("""
{ {
"field1":"value1", "firstName":"Joe",
"field2":"value2" "lastName":"Dimagio"
} }
""", TestUtils.defineTablePerson(), null); """, TestUtils.defineTablePerson(), null);
assertNotNull(qRecords); assertNotNull(qRecords);
assertEquals(1, qRecords.size()); assertEquals(1, qRecords.size());
assertEquals("value1", qRecords.get(0).getValue("field1")); assertEquals("Joe", qRecords.get(0).getValue("firstName"));
assertEquals("value2", qRecords.get(0).getValue("field2")); assertEquals("Dimagio", qRecords.get(0).getValue("lastName"));
} }
@ -125,16 +125,16 @@ class JsonToQRecordAdapterTest
JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter(); JsonToQRecordAdapter jsonToQRecordAdapter = new JsonToQRecordAdapter();
List<QRecord> qRecords = jsonToQRecordAdapter.buildRecordsFromJson(""" List<QRecord> qRecords = jsonToQRecordAdapter.buildRecordsFromJson("""
[ [
{ "field1":"value1", "field2":"value2" }, { "firstName":"Tyler", "lastName":"Samples" },
{ "fieldA":"valueA", "fieldB":"valueB" } { "firstName":"Tim", "lastName":"Chamberlain" }
] ]
""", TestUtils.defineTablePerson(), null); """, TestUtils.defineTablePerson(), null);
assertNotNull(qRecords); assertNotNull(qRecords);
assertEquals(2, qRecords.size()); assertEquals(2, qRecords.size());
assertEquals("value1", qRecords.get(0).getValue("field1")); assertEquals("Tyler", qRecords.get(0).getValue("firstName"));
assertEquals("value2", qRecords.get(0).getValue("field2")); assertEquals("Samples", qRecords.get(0).getValue("lastName"));
assertEquals("valueA", qRecords.get(1).getValue("fieldA")); assertEquals("Tim", qRecords.get(1).getValue("firstName"));
assertEquals("valueB", qRecords.get(1).getValue("fieldB")); assertEquals("Chamberlain", qRecords.get(1).getValue("lastName"));
} }