use std::fs;
use serde::Serialize;
#[derive(Serialize)]
struct LegacyIndex {
schema_ver: u16,
files: std::collections::BTreeMap<String, LegacyEntry>,
}
#[derive(Serialize)]
struct LegacyEntry {
hash_hex: String,
language: String,
size_bytes: u64,
mtime: i64,
}
#[test]
fn opening_against_stale_schema_index_wipes_cache() {
let dir = tempfile::tempdir().unwrap();
let root = dir.path();
let basemind_dir = root.join(".basemind");
let blobs_dir = basemind_dir.join("blobs");
fs::create_dir_all(&blobs_dir).unwrap();
let blob_path = blobs_dir.join("deadbeef.l1.msgpack");
fs::write(&blob_path, b"not really a blob").unwrap();
let mut files = std::collections::BTreeMap::new();
files.insert(
"a.rs".to_string(),
LegacyEntry {
hash_hex: "deadbeef".repeat(8),
language: "rust".to_string(),
size_bytes: 42,
mtime: 0,
},
);
let legacy = LegacyIndex {
schema_ver: 99,
files,
};
let bytes = rmp_serde::to_vec_named(&legacy).unwrap();
fs::write(basemind_dir.join("index.msgpack"), bytes).unwrap();
let store = basemind::store::Store::open(root, basemind::store::VIEW_WORKING)
.expect("open should succeed via auto-wipe");
assert!(
store.index.files.is_empty(),
"in-memory index should be empty after wipe"
);
assert!(!blob_path.exists(), "stale blob should have been removed");
assert!(blobs_dir.exists());
}