Skip to main content

koi_common/
test.rs

1use std::path::PathBuf;
2use std::sync::OnceLock;
3
4pub fn ensure_data_dir(prefix: &str) -> PathBuf {
5    static DATA_DIR: OnceLock<PathBuf> = OnceLock::new();
6
7    // Disable platform credential store in tests to prevent macOS
8    // Keychain authorization prompts from blocking CI runners.
9    std::env::set_var("KOI_NO_CREDENTIAL_STORE", "1");
10
11    DATA_DIR
12        .get_or_init(|| {
13            let mut base = if let Ok(existing) = std::env::var("KOI_DATA_DIR") {
14                PathBuf::from(existing)
15            } else {
16                let base = std::env::temp_dir().join(format!("{}-{}", prefix, std::process::id()));
17                std::env::set_var("KOI_DATA_DIR", &base);
18                base
19            };
20
21            if std::fs::create_dir_all(&base).is_err() {
22                base = std::env::temp_dir().join(format!("{}-{}", prefix, std::process::id()));
23                std::env::set_var("KOI_DATA_DIR", &base);
24                let _ = std::fs::create_dir_all(&base);
25            }
26
27            base
28        })
29        .clone()
30}