pub mod basic_info;
pub mod employee;
pub mod job_management;
pub mod lifecycle;
pub mod models;
pub mod organization;
use crate::core::config::Config;
use basic_info::BasicInfoService;
use employee::EmployeeService;
use job_management::JobManagementService;
use lifecycle::LifecycleService;
use organization::OrganizationService;
pub struct CoreHRService {
pub basic_info: BasicInfoService,
pub employee: EmployeeService,
pub organization: OrganizationService,
pub job_management: JobManagementService,
pub lifecycle: LifecycleService,
}
impl CoreHRService {
pub fn new(config: Config) -> Self {
Self {
basic_info: BasicInfoService::new(config.clone()),
employee: EmployeeService::new(config.clone()),
organization: OrganizationService::new(config.clone()),
job_management: JobManagementService::new(config.clone()),
lifecycle: LifecycleService::new(config),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::time::Duration;
#[test]
fn test_corehr_service_creation() {
let config = Config::default();
let service = CoreHRService::new(config.clone());
assert_eq!(service.basic_info.config.app_id, config.app_id);
assert_eq!(service.basic_info.config.app_secret, config.app_secret);
assert_eq!(service.employee.config.app_id, config.app_id);
assert_eq!(service.organization.config.app_id, config.app_id);
assert_eq!(service.job_management.config.app_id, config.app_id);
assert_eq!(service.lifecycle.config.app_id, config.app_id);
}
#[test]
fn test_corehr_service_with_custom_config() {
let config = Config::builder()
.app_id("corehr_test_app")
.app_secret("corehr_test_secret")
.req_timeout(Duration::from_secs(180))
.build();
let service = CoreHRService::new(config.clone());
assert_eq!(service.basic_info.config.app_id, "corehr_test_app");
assert_eq!(service.basic_info.config.app_secret, "corehr_test_secret");
assert_eq!(service.employee.config.app_id, "corehr_test_app");
assert_eq!(service.organization.config.app_id, "corehr_test_app");
assert_eq!(service.job_management.config.app_id, "corehr_test_app");
assert_eq!(service.lifecycle.config.app_id, "corehr_test_app");
}
#[test]
fn test_corehr_service_config_independence() {
let config1 = Config::builder().app_id("corehr_app_1").build();
let config2 = Config::builder().app_id("corehr_app_2").build();
let service1 = CoreHRService::new(config1);
let service2 = CoreHRService::new(config2);
assert_eq!(service1.basic_info.config.app_id, "corehr_app_1");
assert_eq!(service2.basic_info.config.app_id, "corehr_app_2");
assert_ne!(
service1.basic_info.config.app_id,
service2.basic_info.config.app_id
);
assert_ne!(
service1.employee.config.app_id,
service2.employee.config.app_id
);
assert_ne!(
service1.organization.config.app_id,
service2.organization.config.app_id
);
assert_ne!(
service1.job_management.config.app_id,
service2.job_management.config.app_id
);
assert_ne!(
service1.lifecycle.config.app_id,
service2.lifecycle.config.app_id
);
}
#[test]
fn test_corehr_service_sub_services_accessible() {
let config = Config::default();
let service = CoreHRService::new(config.clone());
assert_eq!(service.basic_info.config.app_id, config.app_id);
assert_eq!(service.employee.config.app_id, config.app_id);
assert_eq!(service.organization.config.app_id, config.app_id);
assert_eq!(service.job_management.config.app_id, config.app_id);
assert_eq!(service.lifecycle.config.app_id, config.app_id);
}
#[test]
fn test_corehr_service_config_cloning() {
let config = Config::builder()
.app_id("clone_test_app")
.app_secret("clone_test_secret")
.build();
let service = CoreHRService::new(config.clone());
assert_eq!(service.basic_info.config.app_id, "clone_test_app");
assert_eq!(service.basic_info.config.app_secret, "clone_test_secret");
assert_eq!(service.employee.config.app_id, "clone_test_app");
assert_eq!(service.organization.config.app_id, "clone_test_app");
assert_eq!(service.job_management.config.app_id, "clone_test_app");
assert_eq!(service.lifecycle.config.app_id, "clone_test_app");
}
#[test]
fn test_corehr_service_timeout_propagation() {
let config = Config::builder()
.req_timeout(Duration::from_secs(300))
.build();
let service = CoreHRService::new(config);
assert_eq!(
service.basic_info.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.employee.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.organization.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.job_management.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.lifecycle.config.req_timeout,
Some(Duration::from_secs(300))
);
}
#[test]
fn test_corehr_service_multiple_instances() {
let config = Config::default();
let service1 = CoreHRService::new(config.clone());
let service2 = CoreHRService::new(config.clone());
assert_eq!(
service1.basic_info.config.app_id,
service2.basic_info.config.app_id
);
assert_eq!(
service1.basic_info.config.app_secret,
service2.basic_info.config.app_secret
);
assert_eq!(
service1.employee.config.app_id,
service2.employee.config.app_id
);
assert_eq!(
service1.organization.config.app_id,
service2.organization.config.app_id
);
assert_eq!(
service1.job_management.config.app_id,
service2.job_management.config.app_id
);
assert_eq!(
service1.lifecycle.config.app_id,
service2.lifecycle.config.app_id
);
}
#[test]
fn test_corehr_service_config_consistency() {
let config = Config::builder()
.app_id("consistency_test")
.app_secret("consistency_secret")
.req_timeout(Duration::from_secs(240))
.build();
let service = CoreHRService::new(config);
assert_eq!(service.basic_info.config.app_id, "consistency_test");
assert_eq!(service.basic_info.config.app_secret, "consistency_secret");
assert_eq!(
service.basic_info.config.req_timeout,
Some(Duration::from_secs(240))
);
assert_eq!(service.employee.config.app_id, "consistency_test");
assert_eq!(service.organization.config.app_id, "consistency_test");
assert_eq!(service.job_management.config.app_id, "consistency_test");
assert_eq!(service.lifecycle.config.app_id, "consistency_test");
}
}