From c6a91a4762bb58f19d3043e9064248ef4d0b89b7 Mon Sep 17 00:00:00 2001 From: iceteaSA <171169159+iceteaSA@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:47:12 +0200 Subject: [PATCH 1/2] test(store-types): reach the HOME tier on every platform, cover APPDATA on Windows --- crates/cortexkit-store-types/src/lib.rs | 68 +++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/crates/cortexkit-store-types/src/lib.rs b/crates/cortexkit-store-types/src/lib.rs index 9ac3652..efaa885 100644 --- a/crates/cortexkit-store-types/src/lib.rs +++ b/crates/cortexkit-store-types/src/lib.rs @@ -330,9 +330,29 @@ mod resolver_tests { #[test] fn module_store_path_defaults_to_home_local_share() { let _g = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + #[cfg(windows)] + let appdata = std::env::var_os("APPDATA"); + #[cfg(windows)] + let userprofile = std::env::var_os("USERPROFILE"); std::env::remove_var("XDG_DATA_HOME"); + #[cfg(windows)] + { + std::env::remove_var("APPDATA"); + std::env::remove_var("USERPROFILE"); + } std::env::set_var("HOME", "/tmp/home-test"); let got = module_store_path("astrocyte"); + #[cfg(windows)] + { + match appdata { + Some(value) => std::env::set_var("APPDATA", value), + None => std::env::remove_var("APPDATA"), + } + match userprofile { + Some(value) => std::env::set_var("USERPROFILE", value), + None => std::env::remove_var("USERPROFILE"), + } + } assert_eq!( got, "/tmp/home-test/.local/share/cortexkit/astrocyte/store.db" @@ -360,13 +380,61 @@ mod resolver_tests { // Mirrors the daemon's non_empty_os_var: an empty XDG_DATA_HOME falls // through to the next rule rather than resolving an empty data home. let _g = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + #[cfg(windows)] + let appdata = std::env::var_os("APPDATA"); + #[cfg(windows)] + let userprofile = std::env::var_os("USERPROFILE"); std::env::set_var("XDG_DATA_HOME", ""); + #[cfg(windows)] + { + std::env::remove_var("APPDATA"); + std::env::remove_var("USERPROFILE"); + } std::env::set_var("HOME", "/tmp/home-test"); let got = module_store_path("m"); std::env::remove_var("XDG_DATA_HOME"); + #[cfg(windows)] + { + match appdata { + Some(value) => std::env::set_var("APPDATA", value), + None => std::env::remove_var("APPDATA"), + } + match userprofile { + Some(value) => std::env::set_var("USERPROFILE", value), + None => std::env::remove_var("USERPROFILE"), + } + } assert_eq!(got, "/tmp/home-test/.local/share/cortexkit/m/store.db"); } + #[cfg(windows)] + #[test] + fn module_store_path_prefers_appdata_over_home() { + // APPDATA is a resolver tier only on Windows, so its coverage must be + // platform-gated too. + let _g = ENV_LOCK.lock().unwrap_or_else(|p| p.into_inner()); + let xdg_data_home = std::env::var_os("XDG_DATA_HOME"); + let appdata = std::env::var_os("APPDATA"); + let home = std::env::var_os("HOME"); + std::env::remove_var("XDG_DATA_HOME"); + std::env::set_var("APPDATA", "C:\\tmp\\appdata-test"); + std::env::set_var("HOME", "/tmp/home-test"); + let got = module_store_path("astrocyte"); + match xdg_data_home { + Some(value) => std::env::set_var("XDG_DATA_HOME", value), + None => std::env::remove_var("XDG_DATA_HOME"), + } + match appdata { + Some(value) => std::env::set_var("APPDATA", value), + None => std::env::remove_var("APPDATA"), + } + match home { + Some(value) => std::env::set_var("HOME", value), + None => std::env::remove_var("HOME"), + } + assert_eq!(got, "C:\\tmp\\appdata-test/cortexkit/astrocyte/store.db"); + } + #[test] fn feeding_a_module_dir_as_data_home_doubles_the_nesting() { // The astrocyte defect, pinned as a NEGATIVE example: this is what the From 634a2d46617b6168b2536267752a335bb98fd1b5 Mon Sep 17 00:00:00 2001 From: iceteaSA <171169159+iceteaSA@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:54:26 +0200 Subject: [PATCH 2/2] test(store-types): expect platform separators in the HOME-tier assertions --- crates/cortexkit-store-types/src/lib.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/crates/cortexkit-store-types/src/lib.rs b/crates/cortexkit-store-types/src/lib.rs index efaa885..d4a74a2 100644 --- a/crates/cortexkit-store-types/src/lib.rs +++ b/crates/cortexkit-store-types/src/lib.rs @@ -353,10 +353,20 @@ mod resolver_tests { None => std::env::remove_var("USERPROFILE"), } } + #[cfg(not(windows))] assert_eq!( got, "/tmp/home-test/.local/share/cortexkit/astrocyte/store.db" ); + #[cfg(windows)] + { + // PathBuf joins the data-home tier while module paths retain the + // daemon's forward slashes, so this mixed form is byte-identical. + assert_eq!( + got, + "/tmp/home-test\\.local\\share/cortexkit/astrocyte/store.db" + ); + } } #[test] @@ -404,7 +414,14 @@ mod resolver_tests { None => std::env::remove_var("USERPROFILE"), } } + #[cfg(not(windows))] assert_eq!(got, "/tmp/home-test/.local/share/cortexkit/m/store.db"); + #[cfg(windows)] + { + // PathBuf joins the data-home tier while module paths retain the + // daemon's forward slashes, so this mixed form is byte-identical. + assert_eq!(got, "/tmp/home-test\\.local\\share/cortexkit/m/store.db"); + } } #[cfg(windows)]