test(workflow): erp-workflow 单元测试从 16 增至 63 — 覆盖 model/error/parser/expression/executor
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

- model.rs: 13 个 FlowGraph 测试(build/outgoing/incoming/start-end 边界)
- error.rs: 7 个 WorkflowError → AppError 转换测试
- parser.rs: 11 个新增验证边界测试(空图/多起点/幽灵边/网关约束)
- expression.rs: 13 个新增求值测试(float/bool/string/复合表达式/空白容错)
- executor.rs: 3 个 is_join_gateway 纯函数测试
This commit is contained in:
iven
2026-04-28 18:04:06 +08:00
parent 5941a6b764
commit dde6b09017
5 changed files with 733 additions and 0 deletions

View File

@@ -51,3 +51,78 @@ impl From<WorkflowError> for AppError {
}
pub type WorkflowResult<T> = Result<T, WorkflowError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn validation_maps_to_app_error_validation() {
let err = WorkflowError::Validation("字段缺失".to_string());
let app: AppError = err.into();
match app {
AppError::Validation(msg) => assert!(msg.contains("字段缺失")),
other => panic!("期望 AppError::Validation得到 {:?}", other),
}
}
#[test]
fn not_found_maps_to_app_error_not_found() {
let err = WorkflowError::NotFound("流程不存在".to_string());
let app: AppError = err.into();
match app {
AppError::NotFound(msg) => assert!(msg.contains("流程不存在")),
other => panic!("期望 AppError::NotFound得到 {:?}", other),
}
}
#[test]
fn duplicate_definition_maps_to_app_error_conflict() {
let err = WorkflowError::DuplicateDefinition("key 已存在".to_string());
let app: AppError = err.into();
match app {
AppError::Conflict(msg) => assert!(msg.contains("key 已存在")),
other => panic!("期望 AppError::Conflict得到 {:?}", other),
}
}
#[test]
fn invalid_diagram_maps_to_validation() {
let err = WorkflowError::InvalidDiagram("缺少 StartEvent".to_string());
let app: AppError = err.into();
match app {
AppError::Validation(msg) => assert!(msg.contains("缺少 StartEvent")),
other => panic!("期望 AppError::Validation得到 {:?}", other),
}
}
#[test]
fn invalid_state_maps_to_validation() {
let err = WorkflowError::InvalidState("流程已结束".to_string());
let app: AppError = err.into();
match app {
AppError::Validation(msg) => assert!(msg.contains("流程已结束")),
other => panic!("期望 AppError::Validation得到 {:?}", other),
}
}
#[test]
fn expression_error_maps_to_validation() {
let err = WorkflowError::ExpressionError("语法错误".to_string());
let app: AppError = err.into();
match app {
AppError::Validation(msg) => assert!(msg.contains("语法错误")),
other => panic!("期望 AppError::Validation得到 {:?}", other),
}
}
#[test]
fn version_mismatch_maps_directly() {
let err = WorkflowError::VersionMismatch;
let app: AppError = err.into();
match app {
AppError::VersionMismatch => {},
other => panic!("期望 AppError::VersionMismatch得到 {:?}", other),
}
}
}