#include #include #include "dto/Vtk3dRequests.hpp" #include "repo/VolumeBuildParams.hpp" using namespace geopro::data; TEST(Vtk3dRequests, VolumeBuildParamsFromRequest) { VoxelGenerateRequest q; q.sourceDatasetIds = {"d1"}; q.cellXY = 2.0; q.power = 3.0; q.colorScaleId = "cs1"; q.interpModel = "Kriging"; const auto p = fromRequest(q); ASSERT_EQ(p.sourceDatasetIds.size(), 1u); EXPECT_EQ(p.sourceDatasetIds[0], "d1"); EXPECT_DOUBLE_EQ(p.cellXY, 2.0); EXPECT_DOUBLE_EQ(p.power, 3.0); EXPECT_EQ(p.colorScaleId, "cs1"); EXPECT_EQ(p.interpModel, VolumeBuildParams::Model::Kriging); } TEST(Vtk3dRequests, FromRequestDefaultsToIdw) { VoxelGenerateRequest q; // interpModel 默认 "Idw" EXPECT_EQ(fromRequest(q).interpModel, VolumeBuildParams::Model::Idw); } TEST(Vtk3dRequests, VoxelToJsonMatchesContract) { VoxelGenerateRequest q; q.projectId = "p1"; q.structParentId = "g1"; q.structParentConfType = 1; q.name = "体A"; q.sourceDatasetIds = {"d1", "d2"}; const QJsonObject j = q.toJson(); EXPECT_EQ(j["projectId"].toString(), "p1"); EXPECT_EQ(j["structParentId"].toString(), "g1"); EXPECT_EQ(j["structParentConfType"].toInt(), 1); EXPECT_EQ(j["name"].toString(), "体A"); ASSERT_TRUE(j["sourceDatasetIds"].isArray()); EXPECT_EQ(j["sourceDatasetIds"].toArray().size(), 2); EXPECT_EQ(j["interpModel"].toString(), "Idw"); EXPECT_DOUBLE_EQ(j["cellXY"].toDouble(), 1.0); // colorScaleId 为空时不应出现在请求体里。 EXPECT_FALSE(j.contains("colorScaleId")); } TEST(Vtk3dRequests, VoxelColorScaleIncludedWhenSet) { VoxelGenerateRequest q; q.colorScaleId = "cs1"; EXPECT_EQ(q.toJson()["colorScaleId"].toString(), "cs1"); } TEST(Vtk3dRequests, SliceToJsonMatchesContract) { SliceGenerateRequest q; q.projectId = "p1"; q.volumeDsId = "v1"; q.name = "切片1"; q.axis = 3; q.origin = {0, 0, -10}; q.point1 = {100, 0, -10}; q.point2 = {0, 50, -10}; const QJsonObject j = q.toJson(); EXPECT_EQ(j["volumeDsId"].toString(), "v1"); EXPECT_EQ(j["axis"].toInt(), 3); ASSERT_TRUE(j["origin"].isArray()); EXPECT_EQ(j["origin"].toArray().size(), 3); EXPECT_DOUBLE_EQ(j["point1"].toArray()[0].toDouble(), 100.0); }