test(workflow): erp-workflow 单元测试从 16 增至 63 — 覆盖 model/error/parser/expression/executor
- 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:
@@ -627,3 +627,73 @@ impl FlowExecutor {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::dto::{EdgeDef, NodeDef, NodeType};
|
||||
|
||||
fn make_node(id: &str, node_type: NodeType) -> NodeDef {
|
||||
NodeDef {
|
||||
id: id.to_string(),
|
||||
node_type,
|
||||
name: id.to_string(),
|
||||
assignee_id: None,
|
||||
candidate_groups: None,
|
||||
service_type: None,
|
||||
service_config: None,
|
||||
position: None,
|
||||
}
|
||||
}
|
||||
|
||||
fn make_edge(id: &str, source: &str, target: &str) -> EdgeDef {
|
||||
EdgeDef {
|
||||
id: id.to_string(),
|
||||
source: source.to_string(),
|
||||
target: target.to_string(),
|
||||
condition: None,
|
||||
label: None,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_join_gateway_with_multiple_incoming() {
|
||||
let nodes = vec![
|
||||
make_node("start", NodeType::StartEvent),
|
||||
make_node("a", NodeType::UserTask),
|
||||
make_node("b", NodeType::ServiceTask),
|
||||
make_node("join", NodeType::ParallelGateway),
|
||||
make_node("end", NodeType::EndEvent),
|
||||
];
|
||||
let edges = vec![
|
||||
make_edge("e1", "start", "a"),
|
||||
make_edge("e2", "start", "b"),
|
||||
make_edge("e3", "a", "join"),
|
||||
make_edge("e4", "b", "join"),
|
||||
make_edge("e5", "join", "end"),
|
||||
];
|
||||
let graph = FlowGraph::build(&nodes, &edges);
|
||||
assert!(FlowExecutor::is_join_gateway("join", &graph));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_not_join_gateway_single_incoming() {
|
||||
let nodes = vec![
|
||||
make_node("start", NodeType::StartEvent),
|
||||
make_node("fork", NodeType::ParallelGateway),
|
||||
make_node("end", NodeType::EndEvent),
|
||||
];
|
||||
let edges = vec![
|
||||
make_edge("e1", "start", "fork"),
|
||||
make_edge("e2", "fork", "end"),
|
||||
];
|
||||
let graph = FlowGraph::build(&nodes, &edges);
|
||||
assert!(!FlowExecutor::is_join_gateway("fork", &graph));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_not_join_gateway_for_nonexistent_node() {
|
||||
let graph = FlowGraph::build(&[], &[]);
|
||||
assert!(!FlowExecutor::is_join_gateway("nonexistent", &graph));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user