#include #include "app.hpp" #include #include namespace ocpm { TEST(PlanManagerTest, testQueryPlansNormalInput) { PlanManager manager; manager.loadSampleData(); PlanQueryRequest req; req.status_filter = -1; req.priority_min = 0; req.keyword = ""; req.page = 1; req.page_size = 10; SortParam sort{"priority", SortDirection::DESC}; auto result = manager.queryPlans(req, sort); EXPECT_EQ(result.size(), 5); EXPECT_EQ(result[0].priority, 95); } TEST(PlanManagerTest, testQueryPlansBoundaryPagination) { PlanManager manager; manager.loadSampleData(); PlanQueryRequest req; req.page = 3; req.page_size = 2; auto result = manager.queryPlans(req, SortParam{}); EXPECT_TRUE(result.empty()); } TEST(PlanManagerTest, testGetPlanDetailValidId) { PlanManager manager; manager.loadSampleData(); auto plan = manager.getPlanDetail("PLAN-001"); EXPECT_EQ(plan.plan_name, "突击行动-甲"); } TEST(PlanManagerTest, testGetPlanDetailInvalidId) { PlanManager manager; manager.loadSampleData(); EXPECT_THROW(manager.getPlanDetail("INVALID"), std::invalid_argument); } TEST(PlanManagerTest, testComparePlansIdentical) { PlanManager manager; manager.loadSampleData(); auto diffs = manager.comparePlans("PLAN-001", "PLAN-001"); EXPECT_EQ(diffs.size(), 1); EXPECT_EQ(diffs[0], "(no differences)"); } TEST(PlanManagerTest, testReconstructSuccess) { PlanManager manager; manager.loadSampleData(); ReconstructCommand cmd{"PLAN-001", {"mod1", "mod2"}}; auto result = manager.reconstruct(cmd); EXPECT_TRUE(result.success); EXPECT_EQ(result.new_version, "PLAN-001-v2"); } TEST(PlanManagerTest, testReconstructFailure) { PlanManager manager; ReconstructCommand cmd{"NONEXIST", {}}; auto result = manager.reconstruct(cmd); EXPECT_FALSE(result.success); } TEST(PlanManagerTest, testLoadSampleData) { PlanManager manager; manager.loadSampleData(); EXPECT_NO_THROW(manager.getPlanDetail("PLAN-005")); } TEST(DistributedPlanManagerTest, testAddRemoveNode) { DistributedPlanManager mgr; TopoNode node{"N1", "Test", 0, 0}; mgr.addNode(node); mgr.removeNode("N1"); EXPECT_TRUE(mgr.isConnected()); } TEST(DistributedPlanManagerTest, testIsConnectedGraph) { DistributedPlanManager mgr; mgr.loadSampleData(); EXPECT_TRUE(mgr.isConnected()); } TEST(DispatchManagerTest, testDispatchPlanValidAssets) { DispatchManager mgr; mgr.loadSampleData(); int count = mgr.dispatchPlan("P1", {"ASSET-001", "ASSET-004"}); EXPECT_EQ(count, 2); } TEST(DispatchManagerTest, testGetAssetStatusOffline) { DispatchManager mgr; EXPECT_EQ(mgr.getAssetStatus("UNKNOWN"), AssetStatusCode::OFFLINE); } TEST(DispatchManagerTest, testGetAlertsFiltered) { DispatchManager mgr; mgr.loadSampleData(); AlertLevel filter = AlertLevel::ERROR; auto alerts = mgr.getAlerts(&filter); EXPECT_EQ(alerts.size(), 1); } TEST(DispatchManagerTest, testClearAlerts) { DispatchManager mgr; mgr.loadSampleData(); mgr.clearAlerts(); EXPECT_TRUE(mgr.getAlerts().empty()); } } // namespace ocpm