mirror of
https://github.com/PR0M3TH3AN/Marlin.git
synced 2025-09-08 23:28:44 +00:00
test(config): verify fallback when no home
This commit is contained in:
@@ -35,12 +35,15 @@ impl Config {
|
|||||||
let digest = h.finish(); // 64-bit
|
let digest = h.finish(); // 64-bit
|
||||||
let file_name = format!("index_{digest:016x}.db");
|
let file_name = format!("index_{digest:016x}.db");
|
||||||
|
|
||||||
if let Some(dirs) = ProjectDirs::from("io", "Marlin", "marlin") {
|
// If HOME and XDG_DATA_HOME are missing we can't resolve an XDG path
|
||||||
let dir = dirs.data_dir();
|
if std::env::var_os("HOME").is_some() || std::env::var_os("XDG_DATA_HOME").is_some() {
|
||||||
std::fs::create_dir_all(dir)?;
|
if let Some(dirs) = ProjectDirs::from("io", "Marlin", "marlin") {
|
||||||
return Ok(Self {
|
let dir = dirs.data_dir();
|
||||||
db_path: dir.join(file_name),
|
std::fs::create_dir_all(dir)?;
|
||||||
});
|
return Ok(Self {
|
||||||
|
db_path: dir.join(file_name),
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3) very last resort – workspace-relative DB
|
// 3) very last resort – workspace-relative DB
|
||||||
|
@@ -20,3 +20,42 @@ fn load_xdg_or_fallback() {
|
|||||||
let cfg = Config::load().unwrap();
|
let cfg = Config::load().unwrap();
|
||||||
assert!(cfg.db_path.to_string_lossy().ends_with(".db"));
|
assert!(cfg.db_path.to_string_lossy().ends_with(".db"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn load_fallback_current_dir() {
|
||||||
|
// Save and clear HOME & XDG_DATA_HOME
|
||||||
|
let orig_home = env::var_os("HOME");
|
||||||
|
let orig_xdg = env::var_os("XDG_DATA_HOME");
|
||||||
|
env::remove_var("HOME");
|
||||||
|
env::remove_var("XDG_DATA_HOME");
|
||||||
|
env::remove_var("MARLIN_DB_PATH");
|
||||||
|
|
||||||
|
let cfg = Config::load().unwrap();
|
||||||
|
|
||||||
|
// Compute expected file name based on current directory hash
|
||||||
|
let cwd = env::current_dir().unwrap();
|
||||||
|
use std::collections::hash_map::DefaultHasher;
|
||||||
|
use std::hash::{Hash, Hasher};
|
||||||
|
let mut h = DefaultHasher::new();
|
||||||
|
cwd.hash(&mut h);
|
||||||
|
let digest = h.finish();
|
||||||
|
let expected_name = format!("index_{:016x}.db", digest);
|
||||||
|
|
||||||
|
assert_eq!(cfg.db_path, std::path::PathBuf::from(&expected_name));
|
||||||
|
assert!(cfg
|
||||||
|
.db_path
|
||||||
|
.file_name()
|
||||||
|
.unwrap()
|
||||||
|
.to_string_lossy()
|
||||||
|
.starts_with("index_"));
|
||||||
|
|
||||||
|
// Restore environment variables
|
||||||
|
match orig_home {
|
||||||
|
Some(val) => env::set_var("HOME", val),
|
||||||
|
None => env::remove_var("HOME"),
|
||||||
|
}
|
||||||
|
match orig_xdg {
|
||||||
|
Some(val) => env::set_var("XDG_DATA_HOME", val),
|
||||||
|
None => env::remove_var("XDG_DATA_HOME"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user