mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-12-24 13:40:31 +01:00
write all the simple tests
This commit is contained in:
parent
661bc21af5
commit
36281a653f
@ -359,25 +359,124 @@ mod tests {
|
|||||||
let mut wtxn = index.write_txn().unwrap();
|
let mut wtxn = index.write_txn().unwrap();
|
||||||
let mut map = index.fields_ids_map(&wtxn).unwrap();
|
let mut map = index.fields_ids_map(&wtxn).unwrap();
|
||||||
map.insert("channel");
|
map.insert("channel");
|
||||||
|
map.insert("dog race");
|
||||||
|
map.insert("subscribers");
|
||||||
index.put_fields_ids_map(&mut wtxn, &map).unwrap();
|
index.put_fields_ids_map(&mut wtxn, &map).unwrap();
|
||||||
let mut builder = Settings::new(&mut wtxn, &index, 0);
|
let mut builder = Settings::new(&mut wtxn, &index, 0);
|
||||||
builder.set_filterable_fields(hashset! { S("channel") });
|
builder.set_filterable_fields(hashset! { S("channel"), S("dog race"), S("subscribers") });
|
||||||
builder.execute(|_, _| ()).unwrap();
|
builder.execute(|_, _| ()).unwrap();
|
||||||
wtxn.commit().unwrap();
|
wtxn.commit().unwrap();
|
||||||
|
|
||||||
// Test that the facet condition is correctly generated.
|
|
||||||
let rtxn = index.read_txn().unwrap();
|
let rtxn = index.read_txn().unwrap();
|
||||||
let condition = FilterCondition::from_str(&rtxn, &index, "channel = Ponce").unwrap();
|
|
||||||
let expected = FilterCondition::Operator(0, Operator::Equal(None, S("ponce")));
|
|
||||||
assert_eq!(condition, expected);
|
|
||||||
|
|
||||||
let condition = FilterCondition::from_str(&rtxn, &index, "channel != ponce").unwrap();
|
use FilterCondition as Fc;
|
||||||
let expected = FilterCondition::Operator(0, Operator::NotEqual(None, S("ponce")));
|
let test_case = [
|
||||||
assert_eq!(condition, expected);
|
// simple test
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "channel = Ponce"),
|
||||||
|
Fc::Operator(0, Operator::Equal(None, S("ponce"))),
|
||||||
|
),
|
||||||
|
// test all the quotes and simple quotes
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "channel = 'Mister Mv'"),
|
||||||
|
Fc::Operator(0, Operator::Equal(None, S("mister mv"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "channel = \"Mister Mv\""),
|
||||||
|
Fc::Operator(0, Operator::Equal(None, S("mister mv"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "'dog race' = Borzoi"),
|
||||||
|
Fc::Operator(1, Operator::Equal(None, S("borzoi"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "\"dog race\" = Chusky"),
|
||||||
|
Fc::Operator(1, Operator::Equal(None, S("chusky"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "\"dog race\" = \"Bernese Mountain\""),
|
||||||
|
Fc::Operator(1, Operator::Equal(None, S("bernese mountain"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "'dog race' = 'Bernese Mountain'"),
|
||||||
|
Fc::Operator(1, Operator::Equal(None, S("bernese mountain"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "\"dog race\" = 'Bernese Mountain'"),
|
||||||
|
Fc::Operator(1, Operator::Equal(None, S("bernese mountain"))),
|
||||||
|
),
|
||||||
|
// test all the operators
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "channel != ponce"),
|
||||||
|
Fc::Operator(0, Operator::NotEqual(None, S("ponce"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT channel = ponce"),
|
||||||
|
Fc::Operator(0, Operator::NotEqual(None, S("ponce"))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "subscribers < 1000"),
|
||||||
|
Fc::Operator(2, Operator::LowerThan(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "subscribers > 1000"),
|
||||||
|
Fc::Operator(2, Operator::GreaterThan(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "subscribers <= 1000"),
|
||||||
|
Fc::Operator(2, Operator::LowerThanOrEqual(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "subscribers >= 1000"),
|
||||||
|
Fc::Operator(2, Operator::GreaterThanOrEqual(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT subscribers < 1000"),
|
||||||
|
Fc::Operator(2, Operator::GreaterThanOrEqual(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT subscribers > 1000"),
|
||||||
|
Fc::Operator(2, Operator::LowerThanOrEqual(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT subscribers <= 1000"),
|
||||||
|
Fc::Operator(2, Operator::GreaterThan(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT subscribers >= 1000"),
|
||||||
|
Fc::Operator(2, Operator::LowerThan(1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "subscribers 100 TO 1000"),
|
||||||
|
Fc::Operator(2, Operator::Between(100., 1000.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT subscribers 100 TO 1000"),
|
||||||
|
Fc::Or(
|
||||||
|
Box::new(Fc::Operator(2, Operator::LowerThan(100.))),
|
||||||
|
Box::new(Fc::Operator(2, Operator::GreaterThan(1000.))),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "_geoRadius(12, 13, 14)"),
|
||||||
|
Fc::Operator(2, Operator::GeoLowerThan([12., 13.], 14.)),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
Fc::from_str(&rtxn, &index, "NOT _geoRadius(12, 13, 14)"),
|
||||||
|
Fc::Operator(2, Operator::GeoGreaterThan([12., 13.], 14.)),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
let condition = FilterCondition::from_str(&rtxn, &index, "NOT channel = ponce").unwrap();
|
for (result, expected) in test_case {
|
||||||
let expected = FilterCondition::Operator(0, Operator::NotEqual(None, S("ponce")));
|
assert!(
|
||||||
assert_eq!(condition, expected);
|
result.is_ok(),
|
||||||
|
"Filter {:?} was supposed to be parsed but failed with the following error: `{}`",
|
||||||
|
expected,
|
||||||
|
result.unwrap_err()
|
||||||
|
);
|
||||||
|
let filter = result.unwrap();
|
||||||
|
assert_eq!(filter, expected,);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user