pub mod models;
pub mod v1;
use crate::core::config::Config;
pub struct MailService {
pub v1: v1::V1,
}
impl MailService {
pub fn new(config: Config) -> Self {
Self {
v1: v1::V1::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_mail_service_creation() {
let config = create_test_config();
let _mail_service = MailService::new(config);
}
#[test]
fn test_mail_service_with_custom_config() {
let config = Config::builder()
.app_id("mail_app")
.app_secret("mail_secret")
.req_timeout(std::time::Duration::from_millis(14000))
.base_url("https://mail.api.com")
.build();
let _mail_service = MailService::new(config);
}
#[test]
fn test_mail_service_configuration_scenarios() {
let test_configs = vec![
Config::builder()
.app_id("mail_basic")
.app_secret("basic_secret")
.build(),
Config::builder()
.app_id("mail_timeout")
.app_secret("timeout_secret")
.req_timeout(std::time::Duration::from_millis(16000))
.build(),
Config::builder()
.app_id("mail_custom")
.app_secret("custom_secret")
.base_url("https://custom.mail.com")
.build(),
Config::builder()
.app_id("mail_enterprise")
.app_secret("enterprise_secret")
.req_timeout(std::time::Duration::from_millis(30000))
.base_url("https://enterprise.mail.com")
.enable_token_cache(false)
.build(),
];
for config in test_configs {
let _mail_service = MailService::new(config);
}
}
#[test]
fn test_mail_service_multiple_instances() {
let config1 = create_test_config();
let config2 = Config::builder()
.app_id("mail2")
.app_secret("secret2")
.build();
let mail_service1 = MailService::new(config1);
let mail_service2 = MailService::new(config2);
let service1_ptr = std::ptr::addr_of!(mail_service1) as *const _;
let service2_ptr = std::ptr::addr_of!(mail_service2) as *const _;
assert_ne!(
service1_ptr, service2_ptr,
"Services should be independent instances"
);
}
#[test]
fn test_mail_service_config_cloning_behavior() {
let original_config = create_test_config();
let mail_service1 = MailService::new(original_config.clone());
let mail_service2 = MailService::new(original_config);
let service1_ptr = std::ptr::addr_of!(mail_service1) as *const _;
let service2_ptr = std::ptr::addr_of!(mail_service2) as *const _;
assert_ne!(service1_ptr, service2_ptr);
}
#[test]
fn test_mail_service_v1_api_structure() {
let config = create_test_config();
let _mail_service = MailService::new(config);
}
}