use versatile_data::*;
fn new_data(name: &str, option: DataOption) -> Data {
let dir = std::env::temp_dir().join(format!("versatile-data-search-{name}"));
let _ = std::fs::remove_dir_all(&dir);
Data::new(&dir, option)
}
async fn insert_n(data: &mut Data, n: u32) {
let name = FieldName::new("n".into());
for i in 0..n {
let fields = [(name.clone(), i.to_string().into_bytes())].into();
data.insert(Activity::Active, Term::Default, Term::Default, fields)
.await;
}
}
#[test]
fn empty_narrow_condition_returns_all_rows() {
let mut data = new_data("empty-narrow", DataOption::default());
futures::executor::block_on(async {
insert_n(&mut data, 3).await;
let empty = vec![];
let rows = data
.begin_search()
.search(Condition::Narrow(&empty))
.result()
.await;
assert_eq!(rows.len(), 3);
});
}
#[test]
fn search_row_with_out_of_range_numbers() {
let mut data = new_data("row-range", DataOption::default());
futures::executor::block_on(async {
insert_n(&mut data, 3).await;
let huge = search::Number::In(vec![-1, 0, 2, 1 << 32, (1 << 32) + 1]);
let rows = data.begin_search().search_row(&huge).result().await;
assert_eq!(rows.into_iter().map(|r| r.get()).collect::<Vec<_>>(), [2]);
let range = search::Number::Range(-10..=isize::MAX);
let rows = data.begin_search().search_row(&range).result().await;
assert_eq!(rows.len(), 3);
});
}
#[test]
fn search_by_disabled_index_returns_nothing() {
let option = DataOption {
uuid: false,
activity: false,
term: false,
last_updated: false,
allocation_lot: 1,
};
let mut data = new_data("disabled", option);
futures::executor::block_on(async {
insert_n(&mut data, 2).await;
let uuids = [1u128];
let uuid = Condition::Uuid(&uuids);
assert!(data.begin_search().search(uuid).result().await.is_empty());
let term = Condition::Term(search::Term::default());
assert!(data.begin_search().search(term).result().await.is_empty());
let n = search::Number::Min(0);
let last_updated = Condition::LastUpdated(&n);
assert!(
data.begin_search()
.search(last_updated)
.result()
.await
.is_empty()
);
assert_eq!(data.search_default().result().await.len(), 2);
});
}