49 lines
1.9 KiB
C++
49 lines
1.9 KiB
C++
#include <gtest/gtest.h>
|
||
#include <QJsonDocument>
|
||
#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");
|
||
}
|