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:
@@ -393,7 +393,7 @@ impl UserService {
|
||||
}
|
||||
|
||||
/// Convert a SeaORM user Model and its role DTOs into a UserResp.
|
||||
fn model_to_resp(m: &user::Model, roles: Vec<RoleResp>) -> UserResp {
|
||||
pub(crate) fn model_to_resp(m: &user::Model, roles: Vec<RoleResp>) -> UserResp {
|
||||
UserResp {
|
||||
id: m.id,
|
||||
username: m.username.clone(),
|
||||
@@ -406,3 +406,82 @@ fn model_to_resp(m: &user::Model, roles: Vec<RoleResp>) -> UserResp {
|
||||
version: m.version,
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use chrono::Utc;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::dto::RoleResp;
|
||||
use crate::entity::user;
|
||||
|
||||
use super::*;
|
||||
|
||||
fn make_user_model(
|
||||
id: Uuid,
|
||||
tenant_id: Uuid,
|
||||
username: &str,
|
||||
status: &str,
|
||||
version: i32,
|
||||
) -> user::Model {
|
||||
user::Model {
|
||||
id,
|
||||
tenant_id,
|
||||
username: username.to_string(),
|
||||
email: None,
|
||||
phone: None,
|
||||
display_name: None,
|
||||
avatar_url: None,
|
||||
status: status.to_string(),
|
||||
last_login_at: None,
|
||||
created_at: Utc::now(),
|
||||
updated_at: Utc::now(),
|
||||
created_by: Uuid::now_v7(),
|
||||
updated_by: Uuid::now_v7(),
|
||||
deleted_at: None,
|
||||
version,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn model_to_resp_maps_basic_fields() {
|
||||
let id = Uuid::now_v7();
|
||||
let tid = Uuid::now_v7();
|
||||
let m = make_user_model(id, tid, "alice", "active", 1);
|
||||
let resp = model_to_resp(&m, vec![]);
|
||||
assert_eq!(resp.id, id);
|
||||
assert_eq!(resp.username, "alice");
|
||||
assert_eq!(resp.status, "active");
|
||||
assert_eq!(resp.version, 1);
|
||||
assert!(resp.roles.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn model_to_resp_includes_roles() {
|
||||
let id = Uuid::now_v7();
|
||||
let tid = Uuid::now_v7();
|
||||
let m = make_user_model(id, tid, "bob", "active", 2);
|
||||
let roles = vec![
|
||||
RoleResp {
|
||||
id: Uuid::now_v7(),
|
||||
name: "管理员".to_string(),
|
||||
code: "admin".to_string(),
|
||||
description: None,
|
||||
is_system: true,
|
||||
version: 1,
|
||||
},
|
||||
RoleResp {
|
||||
id: Uuid::now_v7(),
|
||||
name: "用户".to_string(),
|
||||
code: "user".to_string(),
|
||||
description: None,
|
||||
is_system: false,
|
||||
version: 1,
|
||||
},
|
||||
];
|
||||
let resp = model_to_resp(&m, roles);
|
||||
assert_eq!(resp.roles.len(), 2);
|
||||
assert_eq!(resp.roles[0].code, "admin");
|
||||
assert_eq!(resp.version, 2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user