#![allow(dead_code)]
use std::path::PathBuf;
pub fn splashboard_home() -> Option<PathBuf> {
if let Ok(p) = std::env::var("SPLASHBOARD_HOME") {
return Some(PathBuf::from(p));
}
dirs::home_dir().map(|h| h.join(".splashboard"))
}
pub fn settings_path() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("settings.toml"))
}
pub fn secrets_path() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("secrets.toml"))
}
pub fn home_dashboard_path() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("home.dashboard.toml"))
}
pub fn project_dashboard_path() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("project.dashboard.toml"))
}
pub fn trust_store_path() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("trust.toml"))
}
pub fn cache_dir() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("cache"))
}
pub fn read_store_dir() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("store"))
}
pub fn logs_dir() -> Option<PathBuf> {
splashboard_home().map(|d| d.join("logs"))
}
pub static TEST_ENV_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
#[cfg(test)]
mod tests {
use super::*;
fn restore_env(previous: Option<String>) {
unsafe {
match previous {
Some(value) => std::env::set_var("SPLASHBOARD_HOME", value),
None => std::env::remove_var("SPLASHBOARD_HOME"),
}
}
}
#[test]
fn env_var_overrides_home() {
let _lock = TEST_ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
let tmp = tempfile::tempdir().unwrap();
let path = tmp.path().to_path_buf();
let outer_previous = std::env::var("SPLASHBOARD_HOME").ok();
unsafe {
std::env::set_var("SPLASHBOARD_HOME", tmp.path().join("before"));
}
let previous = std::env::var("SPLASHBOARD_HOME").ok();
unsafe {
std::env::set_var("SPLASHBOARD_HOME", &path);
}
assert_eq!(splashboard_home(), Some(path.clone()));
assert_eq!(settings_path(), Some(path.join("settings.toml")));
assert_eq!(secrets_path(), Some(path.join("secrets.toml")));
assert_eq!(
home_dashboard_path(),
Some(path.join("home.dashboard.toml"))
);
assert_eq!(
project_dashboard_path(),
Some(path.join("project.dashboard.toml"))
);
assert_eq!(trust_store_path(), Some(path.join("trust.toml")));
assert_eq!(cache_dir(), Some(path.join("cache")));
assert_eq!(read_store_dir(), Some(path.join("store")));
assert_eq!(logs_dir(), Some(path.join("logs")));
restore_env(previous);
restore_env(outer_previous);
}
#[test]
fn falls_back_to_dot_splashboard_under_home_dir_when_env_is_missing() {
let _lock = TEST_ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
let previous = std::env::var("SPLASHBOARD_HOME").ok();
unsafe {
std::env::remove_var("SPLASHBOARD_HOME");
}
let home = dirs::home_dir().expect("test host should provide a home directory");
assert_eq!(splashboard_home(), Some(home.join(".splashboard")));
restore_env(previous);
}
}