geopro/tests/data/test_dataset_field_dictiona...

49 lines
1.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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");
}