use codex_memory::Config;
use std::env;
#[test]
fn test_config_from_env_with_all_vars() {
let orig_db = env::var("DATABASE_URL").ok();
let orig_port = env::var("MCP_PORT").ok();
let orig_level = env::var("LOG_LEVEL").ok();
env::set_var("DATABASE_URL", "postgresql://test:test@localhost/test");
env::set_var("MCP_PORT", "4444");
env::set_var("LOG_LEVEL", "debug");
let config = Config::from_env().expect("Should create config from env");
assert_eq!(config.database_url, "postgresql://test:test@localhost/test");
assert_eq!(config.mcp_port, 4444);
assert_eq!(config.log_level, "debug");
match orig_db {
Some(val) => env::set_var("DATABASE_URL", val),
None => env::remove_var("DATABASE_URL"),
}
match orig_port {
Some(val) => env::set_var("MCP_PORT", val),
None => env::remove_var("MCP_PORT"),
}
match orig_level {
Some(val) => env::set_var("LOG_LEVEL", val),
None => env::remove_var("LOG_LEVEL"),
}
}
#[test]
fn test_config_from_env_with_defaults() {
let orig_db = env::var("DATABASE_URL").ok();
let orig_port = env::var("MCP_PORT").ok();
let orig_level = env::var("LOG_LEVEL").ok();
env::set_var("DATABASE_URL", "postgresql://test:test@localhost/test");
env::remove_var("MCP_PORT");
env::remove_var("LOG_LEVEL");
let config = Config::from_env().expect("Should create config with defaults");
assert_eq!(config.database_url, "postgresql://test:test@localhost/test");
assert_eq!(config.mcp_port, 3333); assert_eq!(config.log_level, "info");
match orig_db {
Some(val) => env::set_var("DATABASE_URL", val),
None => env::remove_var("DATABASE_URL"),
}
match orig_port {
Some(val) => env::set_var("MCP_PORT", val),
None => env::remove_var("MCP_PORT"),
}
match orig_level {
Some(val) => env::set_var("LOG_LEVEL", val),
None => env::remove_var("LOG_LEVEL"),
}
}
#[test]
fn test_config_from_env_missing_database_url() {
let orig_db = env::var("DATABASE_URL").ok();
env::set_var("DATABASE_URL", "");
let result = Config::from_env();
assert!(result.is_err());
if let Err(e) = result {
assert!(e.to_string().contains("DATABASE_URL"));
}
if let Some(val) = orig_db {
env::set_var("DATABASE_URL", val);
} else {
env::remove_var("DATABASE_URL");
}
}
#[test]
fn test_config_from_env_invalid_port() {
let orig_db = env::var("DATABASE_URL").ok();
let orig_port = env::var("MCP_PORT").ok();
env::set_var("DATABASE_URL", "postgresql://test:test@localhost/test");
env::set_var("MCP_PORT", "not_a_number");
let result = Config::from_env();
assert!(result.is_err());
if let Err(e) = result {
assert!(e.to_string().contains("Invalid MCP_PORT"));
}
match orig_db {
Some(val) => env::set_var("DATABASE_URL", val),
None => env::remove_var("DATABASE_URL"),
}
match orig_port {
Some(val) => env::set_var("MCP_PORT", val),
None => env::remove_var("MCP_PORT"),
}
}
#[test]
fn test_config_default() {
let orig_db = env::var("DATABASE_URL").ok();
env::remove_var("DATABASE_URL");
let config = Config::default();
assert_eq!(config.database_url, ""); assert_eq!(config.mcp_port, 3333);
assert_eq!(config.log_level, "info");
env::set_var("DATABASE_URL", "test_url");
let config2 = Config::default();
assert_eq!(config2.database_url, "test_url");
assert_eq!(config2.mcp_port, 3333);
assert_eq!(config2.log_level, "info");
if let Some(val) = orig_db {
env::set_var("DATABASE_URL", val);
} else {
env::remove_var("DATABASE_URL");
}
}
#[test]
fn test_config_clone() {
let orig_db = env::var("DATABASE_URL").ok();
env::set_var("DATABASE_URL", "postgresql://test:test@localhost/test");
let config1 = Config::from_env().expect("Should create config");
let config2 = config1.clone();
assert_eq!(config1.database_url, config2.database_url);
assert_eq!(config1.mcp_port, config2.mcp_port);
assert_eq!(config1.log_level, config2.log_level);
if let Some(val) = orig_db {
env::set_var("DATABASE_URL", val);
} else {
env::remove_var("DATABASE_URL");
}
}