79 lines
2.9 KiB
C++
79 lines
2.9 KiB
C++
#include <gtest/gtest.h>
|
||
|
||
#include <QJsonDocument>
|
||
#include <QJsonObject>
|
||
|
||
#include "dto/GridDto.hpp"
|
||
|
||
using namespace geopro::data::dto;
|
||
using geopro::core::TableColumnKind;
|
||
|
||
namespace {
|
||
|
||
// 取自真实夹具 tests/fixtures/dd/ert-grid-rows.json 的 data(rowList 5 行,gridHeaderDisplay
|
||
// 两列 x/y,total=62,逐字一致;端点 dd/ert/grid/rows)。内联避免引入 fixture 路径编译定义。
|
||
const char* kGridData = R"({
|
||
"gridHeaderDisplay": [
|
||
{ "columnCode": "x", "columnNameChn": "x", "columnNameEng": "x", "columnWidth": 10, "columnSort": 1 },
|
||
{ "columnCode": "y", "columnNameChn": "y", "columnNameEng": "y", "columnWidth": 10, "columnSort": 2 }
|
||
],
|
||
"functionList": [],
|
||
"total": 62,
|
||
"rowList": [
|
||
{ "x": 2.904, "y": 25.126, "id": "1438944148742144" },
|
||
{ "x": 4.897, "y": 25.161, "id": "1438944148742145" },
|
||
{ "x": 6.892, "y": 25.247, "id": "1438944148742146" },
|
||
{ "x": 8.892, "y": 25.251, "id": "1438944148742147" },
|
||
{ "x": 10.891, "y": 25.226, "id": "1438944148742148" }
|
||
]
|
||
})";
|
||
|
||
QJsonObject gridData() { return QJsonDocument::fromJson(kGridData).object(); }
|
||
|
||
} // namespace
|
||
|
||
TEST(GridDto, FirstPagePrependsSeqColumnAndReadsTotal) {
|
||
auto t = parseGridTable(gridData(), /*pageNo*/ 1, /*pageSize*/ 50);
|
||
|
||
// 三列:序号 / x / y(序号前插,x/y 来自 gridHeaderDisplay 按 columnSort)。
|
||
ASSERT_EQ(t.columns.size(), 3u);
|
||
EXPECT_EQ(t.columns[0].title.toStdString(), std::string("序号"));
|
||
EXPECT_EQ(t.columns[0].code.toStdString(), "__seq");
|
||
EXPECT_EQ(t.columns[1].title.toStdString(), "x");
|
||
EXPECT_EQ(t.columns[2].title.toStdString(), "y");
|
||
for (const auto& c : t.columns) EXPECT_EQ(c.kind, TableColumnKind::Text); // 无特殊列
|
||
|
||
// 5 行;首行 序号=1 / x=2.904 / y=25.126。
|
||
ASSERT_EQ(t.rows.size(), 5u);
|
||
ASSERT_EQ(t.rows[0].size(), 3u);
|
||
EXPECT_EQ(t.rows[0][0].toStdString(), "1");
|
||
EXPECT_EQ(t.rows[0][1].toStdString(), "2.904");
|
||
EXPECT_EQ(t.rows[0][2].toStdString(), "25.126");
|
||
EXPECT_EQ(t.rows[4][0].toStdString(), "5"); // 第 5 行序号=5
|
||
|
||
// 总数取 data.total=62(非本批 5 行);分页态回填。
|
||
EXPECT_EQ(t.total, 62);
|
||
EXPECT_EQ(t.pageNo, 1);
|
||
EXPECT_EQ(t.pageSize, 50);
|
||
}
|
||
|
||
TEST(GridDto, SeqColumnOffsetsByPage) {
|
||
// 第 2 页、每页 50:本页首行全局序号 = (2-1)*50 + 1 = 51。
|
||
auto t = parseGridTable(gridData(), /*pageNo*/ 2, /*pageSize*/ 50);
|
||
ASSERT_EQ(t.rows.size(), 5u);
|
||
EXPECT_EQ(t.rows[0][0].toStdString(), "51");
|
||
EXPECT_EQ(t.rows[4][0].toStdString(), "55");
|
||
EXPECT_EQ(t.pageNo, 2);
|
||
EXPECT_EQ(t.pageSize, 50);
|
||
}
|
||
|
||
TEST(GridDto, EmptyDataYieldsSeqOnlyColumnNoRows) {
|
||
const QJsonObject empty;
|
||
auto t = parseGridTable(empty, 1, 50);
|
||
// 空数据:仅有前插的「序号」列,无行;total=0。
|
||
ASSERT_EQ(t.columns.size(), 1u);
|
||
EXPECT_EQ(t.columns[0].code.toStdString(), "__seq");
|
||
EXPECT_EQ(t.rows.size(), 0u);
|
||
EXPECT_EQ(t.total, 0);
|
||
}
|