#include #include #include "ims_types.hpp" #include "user_manager.hpp" #include "business_manager.hpp" #include "audit_logger.hpp" #include "integration_service.hpp" using namespace ims; /// @brief 测试用户管理模块。 /// /// @requirement(name="用户管理", id="SRS-IMS_F-001") /// @requirement(name="角色管理", id="SRS-IMS_F-002") /// @requirement(name="部门管理", id="SRS-IMS_F-003") /// @requirement(name="字典管理", id="SRS-IMS_F-004") /// @requirement(name="参数配置", id="SRS-IMS_F-005") /// @requirement(name="角色权限分配", id="SRS-IMS_F-006") /// @requirement(name="菜单权限管理", id="SRS-IMS_F-007") /// @requirement(name="按钮权限管理", id="SRS-IMS_F-008") /// @requirement(name="数据权限分级管控", id="SRS-IMS_F-009") void test_user_manager() { UserManager um; // 用户 CRUD User u; u.username = "test_user"; u.real_name = "测试用户"; u.password = "Test@123"; int64_t uid = um.addUser(u); assert(uid > 0); std::cout << "[PASS] SRS-IMS_F-001: addUser\n"; u.user_id = uid; u.real_name = "测试用户已修改"; bool updated = um.updateUser(u); assert(updated); std::cout << "[PASS] SRS-IMS_F-001: updateUser\n"; bool deleted = um.deleteUser(uid); assert(deleted); std::cout << "[PASS] SRS-IMS_F-001: deleteUser\n"; // 角色 CRUD Role r; r.role_name = "测试角色"; int64_t rid = um.addRole(r); assert(rid > 0); std::cout << "[PASS] SRS-IMS_F-002: addRole\n"; r.role_id = rid; r.description = "测试描述"; assert(um.updateRole(r)); std::cout << "[PASS] SRS-IMS_F-002: updateRole\n"; assert(um.deleteRole(rid)); std::cout << "[PASS] SRS-IMS_F-002: deleteRole\n"; // 部门 CRUD + 树形 Department d; d.dept_name = "测试部门"; int64_t did = um.addDepartment(d); assert(did > 0); std::cout << "[PASS] SRS-IMS_F-003: addDepartment\n"; Department sub; sub.dept_name = "子部门"; sub.parent_id = did; int64_t sub_id = um.addDepartment(sub); assert(sub_id > 0); auto tree = um.getDepartmentTree(0); assert(!tree.empty()); auto sub_tree = um.getDepartmentTree(did); assert(!sub_tree.empty()); std::cout << "[PASS] SRS-IMS_F-003: getDepartmentTree\n"; assert(um.deleteDepartment(did)); std::cout << "[PASS] SRS-IMS_F-003: deleteDepartment\n"; // 字典管理 DictItem di; di.dict_type = "test_dict"; di.item_key = "k1"; di.item_value = "v1"; um.addDictItem(di); auto dict_items = um.getDictByType("test_dict"); assert(dict_items.size() == 1); std::cout << "[PASS] SRS-IMS_F-004: addDictItem / getDictByType\n"; assert(um.removeDictItem("test_dict", "k1")); std::cout << "[PASS] SRS-IMS_F-004: removeDictItem\n"; // 参数配置 SysParam sp; sp.param_key = "test.param"; sp.param_value = "test_value"; um.setParameter(sp); assert(um.getParameter("test.param") == "test_value"); std::cout << "[PASS] SRS-IMS_F-005: setParameter / getParameter\n"; // 角色权限分配 Permission perm; perm.perm_id = 100; perm.perm_code = "test:perm"; perm.perm_name = "测试权限"; bool assigned = um.assignPermissionsToRole(rid, {100}); assert(assigned); auto perms = um.getPermissionsByRole(rid); assert(perms.size() == 1); std::cout << "[PASS] SRS-IMS_F-006: assignPermissionsToRole\n"; // 菜单权限 perm.is_menu = true; assigned = um.assignPermissionsToRole(rid, {100}); // 重新添加一个用户并关联角色 User u2; u2.username = "menu_user"; u2.role_id = rid; int64_t uid2 = um.addUser(u2); auto menu = um.getMenuByUserId(uid2); assert(menu.size() == 1); std::cout << "[PASS] SRS-IMS_F-007: getMenuByUserId\n"; // 按钮权限 perm.is_menu = false; perm.perm_code = "btn:delete"; assigned = um.assignPermissionsToRole(rid, {100}); bool has_btn = um.hasButtonPermission(uid2, "btn:delete"); assert(has_btn); std::cout << "[PASS] SRS-IMS_F-008: hasButtonPermission\n"; // 数据权限 Department dept_a; dept_a.dept_name = "部门A"; int64_t da_id = um.addDepartment(dept_a); Department dept_b; dept_b.dept_name = "部门B"; dept_b.parent_id = da_id; um.addDepartment(dept_b); // 将用户放入部门A u2.dept_id = da_id; um.updateUser(u2); auto accessible = um.getAccessibleDeptIds(uid2); assert(accessible.find(da_id) != accessible.end()); std::cout << "[PASS] SRS-IMS_F-009: getAccessibleDeptIds\n"; } /// @brief 测试业务数据管理模块。 /// /// @requirement(name="业务新增", id="SRS-IMS_F-010") /// @requirement(name="业务编辑", id="SRS-IMS_F-011") /// @requirement(name="业务删除", id="SRS-IMS_F-012") /// @requirement(name="业务提交", id="SRS-IMS_F-013") /// @requirement(name="业务审核", id="SRS-IMS_F-014") /// @requirement(name="业务驳回", id="SRS-IMS_F-015") /// @requirement(name="业务归档", id="SRS-IMS_F-016") /// @requirement(name="查询筛选", id="SRS-IMS_F-017") /// @requirement(name="数据汇总", id="SRS-IMS_F-018") /// @requirement(name="图表展示", id="SRS-IMS_F-019") /// @requirement(name="自定义查询", id="SRS-IMS_F-020") /// @requirement(name="报表导出", id="SRS-IMS_F-021") /// @requirement(name="数据台账生成", id="SRS-IMS_F-022") void test_business_manager() { BusinessManager bm; BusinessData biz; biz.title = "测试业务"; biz.content = "测试内容"; biz.creator_id = 1; int64_t bid = bm.createBusiness(biz); assert(bid > 0); std::cout << "[PASS] SRS-IMS_F-010: createBusiness\n"; BusinessData edit; edit.biz_id = bid; edit.title = "已修改标题"; edit.content = "已修改内容"; assert(bm.editBusiness(edit)); std::cout << "[PASS] SRS-IMS_F-011: editBusiness\n"; assert(bm.submitBusiness(bid)); std::cout << "[PASS] SRS-IMS_F-013: submitBusiness\n"; assert(bm.approveBusiness(bid)); std::cout << "[PASS] SRS-IMS_F-014: approveBusiness\n"; // 新增一个用于测试驳回 int64_t bid2 = bm.createBusiness(biz); bm.submitBusiness(bid2); assert(bm.rejectBusiness(bid2)); std::cout << "[PASS] SRS-IMS_F-015: rejectBusiness\n"; assert(bm.archiveBusiness(bid)); std::cout << "[PASS] SRS-IMS_F-016: archiveBusiness\n"; // 删除 assert(bm.deleteBusiness(bid2)); std::cout << "[PASS] SRS-IMS_F-012: deleteBusiness\n"; // 查询筛选 auto results = bm.queryBusiness({{"biz_status", "eq", "4"}}, {1, 10}); assert(results.total >= 1); std::cout << "[PASS] SRS-IMS_F-017: queryBusiness\n"; // 数据汇总 auto summary = bm.summarizeData("biz_status"); assert(!summary.empty()); std::cout << "[PASS] SRS-IMS_F-018: summarizeData\n"; // 图表数据 auto chart = bm.generateChartData("biz_status"); assert(!chart.empty()); std::cout << "[PASS] SRS-IMS_F-019: generateChartData\n"; // 自定义查询 auto custom = bm.customQuery({}); assert(!custom.empty()); std::cout << "[PASS] SRS-IMS_F-020: customQuery\n"; // 报表导出 std::string report = bm.exportReport({}, ExportFormat::EXCEL); assert(!report.empty()); std::cout << "[PASS] SRS-IMS_F-021: exportReport\n"; // 台账生成 std::string ledger = bm.generateLedger("2025-01-01 ~ 2025-12-31"); assert(!ledger.empty()); std::cout << "[PASS] SRS-IMS_F-022: generateLedger\n"; } /// @brief 测试审计日志模块。 /// /// @requirement(name="登录日志记录", id="SRS-IMS_F-023") /// @requirement(name="操作日志记录", id="SRS-IMS_F-024") /// @requirement(name="异常日志记录", id="SRS-IMS_F-025") /// @requirement(name="日志溯源查询", id="SRS-IMS_F-026") void test_audit_logger() { AuditLogger al; al.logLogin(1, "admin", true, "192.168.1.1"); al.logOperation(1, "admin", "删除用户", "删除用户ID:2"); al.logException("NullPointerException", "业务模块空指针异常"); auto login_logs = al.queryLogs(LogType::LOGIN, 0, "", std::chrono::system_clock::time_point::min(), std::chrono::system_clock::now()); assert(login_logs.size() == 1); std::cout << "[PASS] SRS-IMS_F-023: logLogin\n"; auto op_logs = al.queryLogs(LogType::OPERATION, 0, "", std::chrono::system_clock::time_point::min(), std::chrono::system_clock::now()); assert(op_logs.size() >= 1); std::cout << "[PASS] SRS-IMS_F-024: logOperation\n"; auto exc_logs = al.queryLogs(LogType::EXCEPTION, 0, "", std::chrono::system_clock::time_point::min(), std::chrono::system_clock::now()); assert(exc_logs.size() == 1); std::cout << "[PASS] SRS-IMS_F-025: logException\n"; // 溯源查询:按用户过滤 auto user_logs = al.queryLogs(LogType::OPERATION, 1, "", std::chrono::system_clock::time_point::min(), std::chrono::system_clock::now()); assert(user_logs.size() >= 1); std::cout << "[PASS] SRS-IMS_F-026: queryLogs (溯源查询)\n"; } /// @brief 测试集成服务模块。 /// /// @requirement(name="标准化接口预留", id="SRS-IMS_F-027") /// @requirement(name="第三方数据对接", id="SRS-IMS_F-028") /// @requirement(name="数据同步", id="SRS-IMS_F-029") void test_integration_service() { IntegrationService isvc; bool reg = isvc.registerInterface("query_user", "/api/user", "GET", "查询用户"); assert(reg); reg = isvc.registerInterface("create_user", "/api/user", "POST", "新增用户"); assert(reg); auto apis = isvc.listRegisteredInterfaces(); assert(apis.size() == 2); std::cout << "[PASS] SRS-IMS_F-027: registerInterface\n"; ExchangeMessage msg; msg.source_system = "ERP"; msg.data_type = "order"; msg.payload = "{\"id\": 1}"; bool pushed = isvc.pushToThirdParty("ERP", msg); assert(pushed); std::cout << "[PASS] SRS-IMS_F-028: pushToThirdParty\n"; bool synced = isvc.syncData("HR_System", "employee", true); assert(synced); std::cout << "[PASS] SRS-IMS_F-029: syncData\n"; int32_t task_id = isvc.registerSyncTask("HR_System", "employee", 3600, []() -> bool { return true; }); assert(task_id > 0); std::cout << "[PASS] SRS-IMS_F-029: registerSyncTask\n"; } int main() { std::cout << "=== IMS 基本功能测试 ===\n\n"; test_user_manager(); test_business_manager(); test_audit_logger(); test_integration_service(); std::cout << "\n=== 所有测试通过! ===\n"; return 0; }