use crate::core::config::Config;
pub mod audit_log;
pub mod environment_variable;
pub mod flow;
pub mod function;
pub mod models;
pub mod object;
pub mod permission;
pub mod seat;
use audit_log::AuditLogService;
use environment_variable::EnvironmentVariableService;
use flow::FlowService;
use function::FunctionService;
use object::ObjectService;
use permission::PermissionService;
use seat::SeatService;
pub struct ApassService {
pub seat: SeatService,
pub audit_log: AuditLogService,
pub permission: PermissionService,
pub object: ObjectService,
pub function: FunctionService,
pub environment_variable: EnvironmentVariableService,
pub flow: FlowService,
}
impl ApassService {
pub fn new(config: Config) -> Self {
Self {
seat: SeatService::new(config.clone()),
audit_log: AuditLogService::new(config.clone()),
permission: PermissionService::new(config.clone()),
object: ObjectService::new(config.clone()),
function: FunctionService::new(config.clone()),
environment_variable: EnvironmentVariableService::new(config.clone()),
flow: FlowService::new(config),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::time::Duration;
#[test]
fn test_apass_service_creation() {
let config = Config::default();
let service = ApassService::new(config.clone());
assert_eq!(service.seat.config.app_id, config.app_id);
assert_eq!(service.audit_log.config.app_id, config.app_id);
assert_eq!(service.permission.config.app_id, config.app_id);
assert_eq!(service.object.config.app_id, config.app_id);
assert_eq!(service.function.config.app_id, config.app_id);
assert_eq!(service.environment_variable.config.app_id, config.app_id);
assert_eq!(service.flow.config.app_id, config.app_id);
}
#[test]
fn test_apass_service_with_custom_config() {
let config = Config::builder()
.app_id("apass_test_app")
.app_secret("apass_test_secret")
.req_timeout(Duration::from_secs(180))
.build();
let service = ApassService::new(config.clone());
assert_eq!(service.seat.config.app_id, "apass_test_app");
assert_eq!(service.seat.config.app_secret, "apass_test_secret");
assert_eq!(
service.seat.config.req_timeout,
Some(Duration::from_secs(180))
);
assert_eq!(service.audit_log.config.app_id, "apass_test_app");
assert_eq!(
service.audit_log.config.req_timeout,
Some(Duration::from_secs(180))
);
assert_eq!(service.permission.config.app_id, "apass_test_app");
assert_eq!(service.object.config.app_id, "apass_test_app");
assert_eq!(service.function.config.app_id, "apass_test_app");
assert_eq!(service.environment_variable.config.app_id, "apass_test_app");
assert_eq!(service.flow.config.app_id, "apass_test_app");
}
#[test]
fn test_apass_service_config_independence() {
let config1 = Config::builder().app_id("apass_app_1").build();
let config2 = Config::builder().app_id("apass_app_2").build();
let service1 = ApassService::new(config1);
let service2 = ApassService::new(config2);
assert_eq!(service1.seat.config.app_id, "apass_app_1");
assert_eq!(service2.seat.config.app_id, "apass_app_2");
assert_ne!(service1.seat.config.app_id, service2.seat.config.app_id);
assert_eq!(service1.audit_log.config.app_id, "apass_app_1");
assert_eq!(service2.audit_log.config.app_id, "apass_app_2");
}
#[test]
fn test_apass_service_all_sub_services_accessible() {
let config = Config::default();
let service = ApassService::new(config.clone());
assert_eq!(service.seat.config.app_id, config.app_id);
assert_eq!(service.audit_log.config.app_id, config.app_id);
assert_eq!(service.permission.config.app_id, config.app_id);
assert_eq!(service.object.config.app_id, config.app_id);
assert_eq!(service.function.config.app_id, config.app_id);
assert_eq!(service.environment_variable.config.app_id, config.app_id);
assert_eq!(service.flow.config.app_id, config.app_id);
}
#[test]
fn test_apass_service_config_cloning() {
let config = Config::builder()
.app_id("clone_test_app")
.app_secret("clone_test_secret")
.build();
let service = ApassService::new(config.clone());
let services_configs = [
&service.seat.config,
&service.audit_log.config,
&service.permission.config,
&service.object.config,
&service.function.config,
&service.environment_variable.config,
&service.flow.config,
];
for service_config in &services_configs {
assert_eq!(service_config.app_id, "clone_test_app");
assert_eq!(service_config.app_secret, "clone_test_secret");
}
}
#[test]
fn test_apass_service_timeout_propagation() {
let config = Config::builder()
.req_timeout(Duration::from_secs(300))
.build();
let service = ApassService::new(config);
assert_eq!(
service.seat.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.audit_log.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.permission.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.object.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.function.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.environment_variable.config.req_timeout,
Some(Duration::from_secs(300))
);
assert_eq!(
service.flow.config.req_timeout,
Some(Duration::from_secs(300))
);
}
#[test]
fn test_apass_service_multiple_instances() {
let config = Config::default();
let service1 = ApassService::new(config.clone());
let service2 = ApassService::new(config.clone());
assert_eq!(service1.seat.config.app_id, service2.seat.config.app_id);
assert_eq!(
service1.audit_log.config.app_id,
service2.audit_log.config.app_id
);
assert_eq!(
service1.permission.config.app_id,
service2.permission.config.app_id
);
assert_eq!(service1.object.config.app_id, service2.object.config.app_id);
assert_eq!(
service1.function.config.app_id,
service2.function.config.app_id
);
assert_eq!(
service1.environment_variable.config.app_id,
service2.environment_variable.config.app_id
);
assert_eq!(service1.flow.config.app_id, service2.flow.config.app_id);
}
#[test]
fn test_apass_service_config_consistency() {
let config = Config::builder()
.app_id("consistency_test")
.app_secret("consistency_secret")
.req_timeout(Duration::from_secs(120))
.build();
let service = ApassService::new(config);
let configs = [
&service.seat.config,
&service.audit_log.config,
&service.permission.config,
&service.object.config,
&service.function.config,
&service.environment_variable.config,
&service.flow.config,
];
for config in &configs {
assert_eq!(config.app_id, "consistency_test");
assert_eq!(config.app_secret, "consistency_secret");
assert_eq!(config.req_timeout, Some(Duration::from_secs(120)));
}
for i in 1..configs.len() {
assert_eq!(configs[0].app_id, configs[i].app_id);
assert_eq!(configs[0].app_secret, configs[i].app_secret);
assert_eq!(configs[0].req_timeout, configs[i].req_timeout);
}
}
}