#include #include #include "repo/DatasetFieldDictionary.hpp" using namespace geopro::data; namespace { DsTypeFields parse(const char* js) { return parseFieldMapping(QJsonDocument::fromJson(QByteArray(js)).object()); } } // namespace TEST(ParseFieldMapping, ExtractsArrayTypeAndCollectTimeConfFieldIds) { const DsTypeFields f = parse(R"({"formList":[{"groupName":"基本信息","values":[ {"confFieldId":"f_ct","fieldCode":"collectTime","fieldName":"采集时间","optionsObject":null}, {"confFieldId":"f_at","fieldCode":"arrayType","fieldName":"装置类型","optionsObject":[ {"label":"温纳-施伦贝尔排列","value":"v1"},{"label":"全梯度","value":"v2"}]} ]}]})"); EXPECT_EQ(f.arrayTypeConfFieldId, "f_at"); EXPECT_EQ(f.collectTimeConfFieldId, "f_ct"); ASSERT_EQ(f.arrayTypeLabels.count("v1"), 1u); EXPECT_EQ(f.arrayTypeLabels.at("v1"), "温纳-施伦贝尔排列"); EXPECT_EQ(f.arrayTypeLabels.at("v2"), "全梯度"); } TEST(DatasetFieldDictionary, ArrayValueAndCollectTimeFromRow) { DsTypeFields f; f.arrayTypeConfFieldId = "f_at"; f.collectTimeConfFieldId = "f_ct"; DsRow row; row.properties = {{"f_at", "v2"}, {"f_ct", "2026-03-25 16:48:57"}, {"other", "x"}}; EXPECT_EQ(arrayValueOf(row, f), "v2"); EXPECT_EQ(collectTimeOf(row, f), "2026-03-25 16:48:57"); } TEST(DatasetFieldDictionary, MissingPropReturnsEmpty) { DsTypeFields f; f.arrayTypeConfFieldId = "f_at"; DsRow row; // 无 properties EXPECT_EQ(arrayValueOf(row, f), ""); } TEST(DatasetFieldDictionary, ArrayLabelHitsAndFallsBackToRawValue) { DsTypeFields f; f.arrayTypeLabels = {{"v1", "温纳"}}; EXPECT_EQ(arrayLabel(f, "v1"), "温纳"); // spec §11:原始值不在 optionsObject 时回退显示原值(如实测 1429468249448449)。 EXPECT_EQ(arrayLabel(f, "1429468249448449"), "1429468249448449"); }