test: add 149 unit tests across core, auth, config, message crates
Test coverage increased from ~34 to 183 tests (zero failures): - erp-core (21): version check, pagination, API response, error mapping - erp-auth (39): org tree building, DTO validation, error conversion, password hashing, user model mapping - erp-config (57): DTO validation, numbering reset logic, menu tree building, error conversion. Fixed BatchSaveMenusReq nested validation - erp-message (50): DTO validation, template rendering, query defaults, error conversion - erp-workflow (16): unchanged (parser + expression tests) All tests are pure unit tests requiring no database.
This commit is contained in:
@@ -113,3 +113,81 @@ impl TemplateService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn render_replaces_single_variable() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("name".to_string(), "张三".to_string());
|
||||
let result = TemplateService::render("您好,{{name}}", &vars);
|
||||
assert_eq!(result, "您好,张三");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_replaces_multiple_variables() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("name".to_string(), "李四".to_string());
|
||||
vars.insert("code".to_string(), "ORD-001".to_string());
|
||||
let result = TemplateService::render("{{name}},您的订单 {{code}} 已发货", &vars);
|
||||
assert_eq!(result, "李四,您的订单 ORD-001 已发货");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_no_variables_returns_original() {
|
||||
let vars = std::collections::HashMap::new();
|
||||
let result = TemplateService::render("没有变量的模板", &vars);
|
||||
assert_eq!(result, "没有变量的模板");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_missing_variable_leaves_placeholder() {
|
||||
let vars = std::collections::HashMap::new();
|
||||
let result = TemplateService::render("您好,{{name}}", &vars);
|
||||
assert_eq!(result, "您好,{{name}}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_same_variable_multiple_times() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("user".to_string(), "王五".to_string());
|
||||
let result = TemplateService::render("{{user}} 你好,{{user}} 的订单已确认", &vars);
|
||||
assert_eq!(result, "王五 你好,王五 的订单已确认");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_empty_template() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("name".to_string(), "test".to_string());
|
||||
let result = TemplateService::render("", &vars);
|
||||
assert_eq!(result, "");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_empty_variable_value() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("name".to_string(), "".to_string());
|
||||
let result = TemplateService::render("您好,{{name}}!", &vars);
|
||||
assert_eq!(result, "您好,!");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_adjacent_variables() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("a".to_string(), "1".to_string());
|
||||
vars.insert("b".to_string(), "2".to_string());
|
||||
let result = TemplateService::render("{{a}}{{b}}", &vars);
|
||||
assert_eq!(result, "12");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn render_extra_variables_not_in_template_are_ignored() {
|
||||
let mut vars = std::collections::HashMap::new();
|
||||
vars.insert("name".to_string(), "赵六".to_string());
|
||||
vars.insert("unused".to_string(), "ignore".to_string());
|
||||
let result = TemplateService::render("你好 {{name}}", &vars);
|
||||
assert_eq!(result, "你好 赵六");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user