pub mod attachment;
pub mod candidate_management;
pub mod ecological_docking;
pub mod get_candidates;
pub mod models;
pub mod recruitment_config;
pub mod referral_account;
pub mod v1;
use crate::core::config::Config;
use attachment::AttachmentService;
use candidate_management::CandidateManagementService;
use ecological_docking::EcologicalDockingService;
use get_candidates::GetCandidatesService;
use recruitment_config::RecruitmentConfigService;
use referral_account::ReferralAccountService;
pub struct HireService {
pub recruitment_config: RecruitmentConfigService,
pub get_candidates: GetCandidatesService,
pub candidate_management: CandidateManagementService,
pub ecological_docking: EcologicalDockingService,
pub referral_account: ReferralAccountService,
pub attachment: AttachmentService,
}
impl HireService {
pub fn new(config: Config) -> Self {
Self {
recruitment_config: RecruitmentConfigService::new(config.clone()),
get_candidates: GetCandidatesService::new(config.clone()),
candidate_management: CandidateManagementService::new(config.clone()),
ecological_docking: EcologicalDockingService::new(config.clone()),
referral_account: ReferralAccountService::new(config.clone()),
attachment: AttachmentService::new(config),
}
}
}
#[cfg(test)]
#[allow(unused_variables, unused_unsafe)]
mod tests {
use super::*;
use crate::core::config::Config;
fn create_test_config() -> Config {
Config::default()
}
#[test]
fn test_hire_service_creation() {
let config = create_test_config();
let hire_service = HireService::new(config);
}
#[test]
fn test_hire_service_configuration_scenarios() {
let test_configs = vec![
Config::builder()
.app_id("hire_basic")
.app_secret("basic_secret")
.build(),
Config::builder()
.app_id("hire_timeout")
.app_secret("timeout_secret")
.req_timeout(std::time::Duration::from_millis(25000))
.build(),
Config::builder()
.app_id("hire_custom")
.app_secret("custom_secret")
.base_url("https://custom.hire.com")
.build(),
Config::builder()
.app_id("hire_enterprise")
.app_secret("enterprise_secret")
.req_timeout(std::time::Duration::from_millis(40000))
.base_url("https://enterprise.hire.com")
.enable_token_cache(false)
.build(),
];
for config in test_configs {
let hire_service = HireService::new(config);
}
}
#[test]
fn test_hire_service_multiple_instances() {
let config1 = create_test_config();
let config2 = Config::builder()
.app_id("hire2")
.app_secret("secret2")
.build();
let _hire_service1 = HireService::new(config1);
let _hire_service2 = HireService::new(config2);
let service1_ptr = std::ptr::addr_of!(_hire_service1) as *const _;
let service2_ptr = std::ptr::addr_of!(_hire_service2) as *const _;
assert_ne!(
service1_ptr, service2_ptr,
"Services should be independent instances"
);
}
#[test]
fn test_hire_service_config_cloning_behavior() {
let original_config = create_test_config();
let _hire_service1 = HireService::new(original_config.clone());
let _hire_service2 = HireService::new(original_config);
let service1_ptr = std::ptr::addr_of!(_hire_service1) as *const _;
let service2_ptr = std::ptr::addr_of!(_hire_service2) as *const _;
assert_ne!(service1_ptr, service2_ptr);
}
#[test]
fn test_hire_service_sub_services_independence() {
let config = create_test_config();
let hire_service = HireService::new(config);
let recruitment_config_ptr =
std::ptr::addr_of!(hire_service.recruitment_config) as *const _;
let get_candidates_ptr = std::ptr::addr_of!(hire_service.get_candidates) as *const _;
let candidate_management_ptr =
std::ptr::addr_of!(hire_service.candidate_management) as *const _;
let ecological_docking_ptr =
std::ptr::addr_of!(hire_service.ecological_docking) as *const _;
let referral_account_ptr = std::ptr::addr_of!(hire_service.referral_account) as *const _;
let attachment_ptr = std::ptr::addr_of!(hire_service.attachment) as *const _;
assert_ne!(
recruitment_config_ptr, get_candidates_ptr,
"Sub-services should be independent"
);
assert_ne!(
get_candidates_ptr, candidate_management_ptr,
"Sub-services should be independent"
);
assert_ne!(
candidate_management_ptr, ecological_docking_ptr,
"Sub-services should be independent"
);
assert_ne!(
ecological_docking_ptr, referral_account_ptr,
"Sub-services should be independent"
);
assert_ne!(
referral_account_ptr, attachment_ptr,
"Sub-services should be independent"
);
}
}