use std::sync::{Mutex, OnceLock};
use road_runner_common::config::ServiceConfig;
fn env_lock() -> &'static Mutex<()> {
static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
LOCK.get_or_init(|| Mutex::new(()))
}
#[test]
fn default_service_config_uses_platform_defaults() {
let cfg = ServiceConfig::default();
assert_eq!(cfg.service_name, "my-service");
assert_eq!(cfg.log_level, "info");
assert_eq!(cfg.log_format, "json");
assert_eq!(cfg.max_page_size, 100);
}
#[test]
fn from_env_fallback_overrides_valid_values_and_clamps_page_size() {
let _guard = env_lock().lock().unwrap();
std::env::set_var("SERVICE_NAME", "orders");
std::env::set_var("LOG_LEVEL", "debug");
std::env::set_var("LOG_FORMAT", "pretty");
std::env::set_var("MAX_PAGE_SIZE", "0");
let cfg = ServiceConfig::from_env_fallback();
assert_eq!(cfg.service_name, "orders");
assert_eq!(cfg.log_level, "debug");
assert_eq!(cfg.log_format, "pretty");
assert_eq!(cfg.max_page_size, 1);
std::env::remove_var("SERVICE_NAME");
std::env::remove_var("LOG_LEVEL");
std::env::remove_var("LOG_FORMAT");
std::env::remove_var("MAX_PAGE_SIZE");
}
#[test]
fn from_env_fallback_keeps_default_for_invalid_page_size() {
let _guard = env_lock().lock().unwrap();
std::env::set_var("MAX_PAGE_SIZE", "not-a-number");
let cfg = ServiceConfig::from_env_fallback();
assert_eq!(cfg.max_page_size, 100);
std::env::remove_var("MAX_PAGE_SIZE");
}
#[cfg(feature = "config")]
#[test]
fn load_reads_environment_and_optional_config_file() {
let _guard = env_lock().lock().unwrap();
std::env::set_var("CONFIG_FILE", "/tmp/cex-common-test-config-that-does-not-exist");
std::env::set_var("SERVICE_NAME", "matching");
std::env::set_var("LOG_LEVEL", "trace");
std::env::set_var("LOG_FORMAT", "json");
std::env::set_var("MAX_PAGE_SIZE", "250");
let cfg = ServiceConfig::load().unwrap();
assert_eq!(cfg.service_name, "matching");
assert_eq!(cfg.log_level, "trace");
assert_eq!(cfg.log_format, "json");
assert_eq!(cfg.max_page_size, 250);
std::env::remove_var("CONFIG_FILE");
std::env::remove_var("SERVICE_NAME");
std::env::remove_var("LOG_LEVEL");
std::env::remove_var("LOG_FORMAT");
std::env::remove_var("MAX_PAGE_SIZE");
}