use std::error::Error;
use std::sync::Arc;
use mindb::db::{Database, DatabaseOptions, SecondaryIndexConfig};
#[test]
fn database_facade_crud_roundtrip() -> Result<(), Box<dyn Error>> {
let tempdir = tempfile::tempdir()?;
let mut options = DatabaseOptions::new(tempdir.path());
options.wal_direct_io = false;
options.secondary_indexes = SecondaryIndexConfig {
full_text: Some(Arc::new(|_, value: &[u8]| {
String::from_utf8(value.to_vec()).ok()
})),
..SecondaryIndexConfig::default()
};
let db = Database::open(options)?;
let key = b"crud-key".to_vec();
let initial = b"alpha".to_vec();
db.put(key.clone(), initial.clone())?;
let fetched = db.get(&key)?;
assert_eq!(fetched.as_deref(), Some(initial.as_slice()));
let search_results = db.search("alpha")?.collect(&db)?;
assert_eq!(search_results.len(), 1);
assert_eq!(search_results[0], (key.clone(), initial.clone()));
db.delete(key.clone())?;
assert!(db.get(&key)?.is_none());
db.sync()?;
Ok(())
}