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 com.kingsrook.qqq.backend.core.model.actions.AbstractQFieldMapping;
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.utils.JsonUtils;
import com.kingsrook.qqq.backend.core.utils.StringUtils;
@ -40,7 +41,7 @@ public class JsonToQRecordAdapter
if(JsonUtils.looksLikeObject(json))
{
JSONObject jsonObject = JsonUtils.toJSONObject(json);
rs.add(buildRecordFromJsonObject(jsonObject));
rs.add(buildRecordFromJsonObject(jsonObject, table, mapping));
}
else if(JsonUtils.looksLikeArray(json))
{
@ -49,7 +50,7 @@ public class JsonToQRecordAdapter
{
if(object instanceof JSONObject jsonObject)
{
rs.add(buildRecordFromJsonObject(jsonObject));
rs.add(buildRecordFromJsonObject(jsonObject, table, mapping));
}
else
{
@ -75,15 +76,20 @@ public class JsonToQRecordAdapter
/*******************************************************************************
** 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();
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);

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
** object) corresponding to a propery qqq table fieldName.
** object) corresponding to a proper qqq table fieldName.
**
*******************************************************************************/
@Override

View File

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