#[cfg(test)]
mod server_config_tests {
use crate::server_config::ServerConfig;
#[test]
fn default_cors_allow_all_is_true() {
let cfg = ServerConfig::default();
assert!(cfg.cors_allow_all);
}
#[test]
fn custom_config_isolates_from_env() {
let cfg = ServerConfig {
cors_allow_all: false,
cors_allow_origins: "https://example.com".to_string(),
cors_max_age: "3600".to_string(),
..ServerConfig::default()
};
assert!(!cfg.cors_allow_all);
assert_eq!("https://example.com", cfg.cors_allow_origins);
assert_eq!("3600", cfg.cors_max_age);
}
#[test]
fn from_env_defaults_match_struct_defaults() {
let cfg = ServerConfig::from_env();
let _ = cfg.cors_allow_origins;
let _ = cfg.cors_allow_methods;
}
}
#[test]
fn current_is_cached_until_invalidated() {
let _g = crate::test_env::lock();
let var = crate::entry_point::Config::RWS_CONFIG_CORS_ALLOW_ORIGINS;
let saved = std::env::var(var).ok();
std::env::set_var(var, "https://first.example");
crate::server_config::invalidate();
let first = crate::server_config::ServerConfig::current();
assert_eq!(first.cors_allow_origins, "https://first.example");
assert!(std::sync::Arc::ptr_eq(&first, &crate::server_config::ServerConfig::current()));
std::env::set_var(var, "https://second.example");
assert_eq!(crate::server_config::ServerConfig::current().cors_allow_origins, "https://first.example", "not re-read without invalidate");
crate::server_config::invalidate();
assert_eq!(crate::server_config::ServerConfig::current().cors_allow_origins, "https://second.example");
match saved { Some(v) => std::env::set_var(var, v), None => std::env::remove_var(var) }
crate::server_config::invalidate();
}
#[test]
fn config_reload_refreshes_the_snapshot() {
let _g = crate::test_env::lock();
let before = crate::server_config::ServerConfig::current();
crate::config_reload::reload();
assert!(!std::sync::Arc::ptr_eq(&before, &crate::server_config::ServerConfig::current()), "reload must rebuild the snapshot");
}