use std::fs;
use std::path::PathBuf;
use reference_query::index::{self, Refresh};
use reference_query::search;
use reference_query::store::Store;
fn scratch_dir() -> PathBuf {
let dir = std::env::temp_dir().join(format!("rq-stale-{}", std::process::id()));
fs::create_dir_all(&dir).unwrap();
dir
}
#[test]
fn refresh_picks_up_edits_and_deletes() {
let dir = scratch_dir();
let file = dir.join("a.rb");
fs::write(&file, "class Foo\nend\n").unwrap();
let mut store = Store::open_in_memory().unwrap();
index::index_path(&mut store, &dir).unwrap();
let repo = store
.repository_id(&index::detect_identity(&dir).to_string())
.unwrap()
.unwrap();
assert_eq!(
search::search(&store, "Foo", None, &search::ActiveFiles::default(), 5).unwrap()[0].name,
"Foo"
);
fs::write(&file, "class Bar\nend\n").unwrap();
assert_eq!(
index::refresh_file(&mut store, repo, &dir, "a.rb").unwrap(),
Refresh::Updated
);
assert!(
search::search(&store, "Foo", None, &search::ActiveFiles::default(), 5)
.unwrap()
.is_empty()
);
assert_eq!(
search::search(&store, "Bar", None, &search::ActiveFiles::default(), 5).unwrap()[0].name,
"Bar"
);
fs::remove_file(&file).unwrap();
assert_eq!(
index::refresh_file(&mut store, repo, &dir, "a.rb").unwrap(),
Refresh::Unchanged
);
assert!(
!search::search(&store, "Bar", None, &search::ActiveFiles::default(), 5)
.unwrap()
.is_empty(),
"a search never forgets — the entry survives until a reindex reconciles it"
);
index::index_path(&mut store, &dir).unwrap();
assert!(
search::search(&store, "Bar", None, &search::ActiveFiles::default(), 5)
.unwrap()
.is_empty(),
"reconciled away by indexing"
);
fs::remove_dir_all(&dir).ok();
}