mod common;
use common::TestEnvironment;
use lc::config::Config;
use std::fs;
#[test]
fn test_config_directory_isolation() {
let config_dir = Config::config_dir().expect("Failed to get config directory");
let config_path_str = config_dir.to_string_lossy();
assert!(
config_path_str.contains("lc_test")
|| config_path_str.contains("tmp")
|| config_path_str.contains("temp")
|| config_path_str.contains("Temp"),
"Config directory should be in temp location for tests: {}",
config_path_str
);
#[cfg(target_os = "macos")]
assert!(
!config_path_str.contains("Library/Application Support/lc")
|| config_path_str.contains("test"),
"Should not use production config directory in tests: {}",
config_path_str
);
#[cfg(target_os = "linux")]
assert!(
!config_path_str.contains(".local/share/lc") || config_path_str.contains("test"),
"Should not use production config directory in tests: {}",
config_path_str
);
#[cfg(target_os = "windows")]
assert!(
!config_path_str.contains("AppData\\Local\\lc") || config_path_str.contains("Temp"),
"Should not use production config directory in tests: {}",
config_path_str
);
let mut config = Config::load().expect("Failed to load config");
config
.add_provider(
"test-provider".to_string(),
"https://api.test.com".to_string(),
)
.expect("Failed to add provider");
let config_file = config_dir.join("config.toml");
assert!(
config_file.exists(),
"Config file should exist in test directory"
);
let providers_dir = config_dir.join("providers");
assert!(
providers_dir.exists(),
"Providers directory should exist in test directory"
);
let provider_file = providers_dir.join("test-provider.toml");
assert!(
provider_file.exists(),
"Provider file should exist in test directory"
);
}
#[test]
fn test_automatic_test_isolation() {
let config_dir = Config::config_dir().expect("Failed to get config directory");
let test_env = TestEnvironment::new();
test_env.verify_test_isolation();
assert_eq!(config_dir, test_env.config_dir);
}
#[test]
fn test_config_operations_in_test_environment() {
let mut config = Config::load().expect("Failed to load config");
config
.add_provider(
"test-provider".to_string(),
"https://api.test.com".to_string(),
)
.expect("Failed to add provider");
config.save().expect("Failed to save config");
let config2 = Config::load().expect("Failed to reload config");
assert!(config2.has_provider("test-provider"));
let provider = config2
.get_provider("test-provider")
.expect("Provider should exist");
assert_eq!(provider.endpoint, "https://api.test.com");
}
#[test]
fn test_no_production_config_modification() {
let config_dir = Config::config_dir().expect("Failed to get config directory");
let path_str = config_dir.to_string_lossy();
assert!(
path_str.contains("test") || path_str.contains("tmp") || path_str.contains("temp"),
"Test should use temporary directory, got: {}",
path_str
);
let test_marker = config_dir.join("test_marker.txt");
fs::write(&test_marker, "This is a test file").expect("Failed to write test marker");
assert!(test_marker.exists());
fs::remove_file(test_marker).ok();
}