pub mod classification;
pub mod draft;
pub mod entity;
pub mod file;
pub mod models;
pub mod repo;
use crate::{
core::config::Config,
service::lingo::{
classification::ClassificationService, draft::DraftService, entity::EntityService,
file::FileService, repo::RepoService,
},
};
pub struct LingoService {
pub draft: DraftService,
pub entity: EntityService,
pub classification: ClassificationService,
pub repo: RepoService,
pub file: FileService,
}
impl LingoService {
pub fn new(config: Config) -> Self {
Self {
draft: DraftService::new(config.clone()),
entity: EntityService::new(config.clone()),
classification: ClassificationService::new(config.clone()),
repo: RepoService::new(config.clone()),
file: FileService::new(config),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::time::Duration;
#[test]
fn test_lingo_service_creation() {
let config = Config::default();
let service = LingoService::new(config.clone());
assert_eq!(service.draft.config.app_id, config.app_id);
assert_eq!(service.draft.config.app_secret, config.app_secret);
assert_eq!(service.entity.config.app_id, config.app_id);
assert_eq!(service.classification.config.app_id, config.app_id);
assert_eq!(service.repo.config.app_id, config.app_id);
assert_eq!(service.file.config.app_secret, config.app_secret);
}
#[test]
fn test_lingo_service_with_custom_config() {
let config = Config::builder()
.app_id("lingo_test_app")
.app_secret("lingo_test_secret")
.req_timeout(Duration::from_secs(270))
.build();
let service = LingoService::new(config.clone());
assert_eq!(service.draft.config.app_id, "lingo_test_app");
assert_eq!(service.draft.config.app_secret, "lingo_test_secret");
assert_eq!(
service.draft.config.req_timeout,
Some(Duration::from_secs(270))
);
assert_eq!(service.entity.config.app_id, "lingo_test_app");
assert_eq!(
service.classification.config.req_timeout,
Some(Duration::from_secs(270))
);
assert_eq!(service.repo.config.app_id, "lingo_test_app");
assert_eq!(
service.file.config.req_timeout,
Some(Duration::from_secs(270))
);
}
#[test]
fn test_lingo_service_config_independence() {
let config1 = Config::builder().app_id("lingo_app_1").build();
let config2 = Config::builder().app_id("lingo_app_2").build();
let service1 = LingoService::new(config1);
let service2 = LingoService::new(config2);
assert_eq!(service1.draft.config.app_id, "lingo_app_1");
assert_eq!(service2.draft.config.app_id, "lingo_app_2");
assert_ne!(service1.draft.config.app_id, service2.draft.config.app_id);
assert_ne!(service1.entity.config.app_id, service2.entity.config.app_id);
assert_ne!(
service1.classification.config.app_id,
service2.classification.config.app_id
);
assert_ne!(service1.repo.config.app_id, service2.repo.config.app_id);
assert_ne!(service1.file.config.app_id, service2.file.config.app_id);
}
#[test]
fn test_lingo_service_sub_services_accessible() {
let config = Config::default();
let service = LingoService::new(config.clone());
assert_eq!(service.draft.config.app_id, config.app_id);
assert_eq!(service.entity.config.app_id, config.app_id);
assert_eq!(service.classification.config.app_id, config.app_id);
assert_eq!(service.repo.config.app_id, config.app_id);
assert_eq!(service.file.config.app_id, config.app_id);
}
#[test]
fn test_lingo_service_config_cloning() {
let config = Config::builder()
.app_id("clone_test_app")
.app_secret("clone_test_secret")
.build();
let service = LingoService::new(config.clone());
assert_eq!(service.draft.config.app_id, "clone_test_app");
assert_eq!(service.draft.config.app_secret, "clone_test_secret");
assert_eq!(service.entity.config.app_secret, "clone_test_secret");
assert_eq!(service.classification.config.app_id, "clone_test_app");
assert_eq!(service.repo.config.app_secret, "clone_test_secret");
assert_eq!(service.file.config.app_id, "clone_test_app");
}
#[test]
fn test_lingo_service_timeout_propagation() {
let config = Config::builder()
.req_timeout(Duration::from_secs(280))
.build();
let service = LingoService::new(config);
assert_eq!(
service.draft.config.req_timeout,
Some(Duration::from_secs(280))
);
assert_eq!(
service.entity.config.req_timeout,
Some(Duration::from_secs(280))
);
assert_eq!(
service.classification.config.req_timeout,
Some(Duration::from_secs(280))
);
assert_eq!(
service.repo.config.req_timeout,
Some(Duration::from_secs(280))
);
assert_eq!(
service.file.config.req_timeout,
Some(Duration::from_secs(280))
);
}
#[test]
fn test_lingo_service_multiple_instances() {
let config = Config::default();
let service1 = LingoService::new(config.clone());
let service2 = LingoService::new(config.clone());
assert_eq!(service1.draft.config.app_id, service2.draft.config.app_id);
assert_eq!(
service1.draft.config.app_secret,
service2.draft.config.app_secret
);
assert_eq!(service1.entity.config.app_id, service2.entity.config.app_id);
assert_eq!(
service1.classification.config.app_secret,
service2.classification.config.app_secret
);
assert_eq!(service1.repo.config.app_id, service2.repo.config.app_id);
assert_eq!(
service1.file.config.app_secret,
service2.file.config.app_secret
);
}
#[test]
fn test_lingo_service_config_consistency() {
let config = Config::builder()
.app_id("consistency_test")
.app_secret("consistency_secret")
.req_timeout(Duration::from_secs(190))
.build();
let service = LingoService::new(config);
assert_eq!(service.draft.config.app_id, "consistency_test");
assert_eq!(service.draft.config.app_secret, "consistency_secret");
assert_eq!(
service.draft.config.req_timeout,
Some(Duration::from_secs(190))
);
assert_eq!(service.entity.config.app_id, "consistency_test");
assert_eq!(service.entity.config.app_secret, "consistency_secret");
assert_eq!(
service.entity.config.req_timeout,
Some(Duration::from_secs(190))
);
assert_eq!(service.classification.config.app_id, "consistency_test");
assert_eq!(
service.classification.config.app_secret,
"consistency_secret"
);
assert_eq!(
service.classification.config.req_timeout,
Some(Duration::from_secs(190))
);
assert_eq!(service.repo.config.app_id, "consistency_test");
assert_eq!(service.repo.config.app_secret, "consistency_secret");
assert_eq!(
service.repo.config.req_timeout,
Some(Duration::from_secs(190))
);
assert_eq!(service.file.config.app_id, "consistency_test");
assert_eq!(service.file.config.app_secret, "consistency_secret");
assert_eq!(
service.file.config.req_timeout,
Some(Duration::from_secs(190))
);
}
}