2023-07-25 14:46:23 +02:00
|
|
|
use meili_snap::snapshot;
|
2023-06-28 11:31:52 +02:00
|
|
|
use once_cell::sync::Lazy;
|
|
|
|
|
2023-09-11 16:50:53 +02:00
|
|
|
use crate::common::{Server, Value};
|
|
|
|
use crate::json;
|
2023-06-28 11:31:52 +02:00
|
|
|
|
2023-11-23 12:20:44 +01:00
|
|
|
static DOCUMENTS: Lazy<Value> = Lazy::new(|| {
|
2023-06-28 11:31:52 +02:00
|
|
|
json!([
|
|
|
|
{
|
|
|
|
"title": "Shazam!",
|
|
|
|
"genres": ["Action", "Adventure"],
|
|
|
|
"id": "287947",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"title": "Captain Marvel",
|
|
|
|
"genres": ["Action", "Adventure"],
|
|
|
|
"id": "299537",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"title": "Escape Room",
|
|
|
|
"genres": ["Horror", "Thriller", "Multiple Words"],
|
|
|
|
"id": "522681",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"title": "How to Train Your Dragon: The Hidden World",
|
|
|
|
"genres": ["Action", "Comedy"],
|
|
|
|
"id": "166428",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"title": "Gläss",
|
|
|
|
"genres": ["Thriller"],
|
|
|
|
"id": "450465",
|
|
|
|
}
|
|
|
|
])
|
|
|
|
});
|
|
|
|
|
|
|
|
#[actix_rt::test]
|
|
|
|
async fn simple_facet_search() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.update_settings_filterable_attributes(json!(["genres"])).await;
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(1).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "a"})).await;
|
|
|
|
|
|
|
|
assert_eq!(code, 200, "{}", response);
|
|
|
|
assert_eq!(dbg!(response)["facetHits"].as_array().unwrap().len(), 2);
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "adventure"})).await;
|
|
|
|
|
|
|
|
assert_eq!(code, 200, "{}", response);
|
|
|
|
assert_eq!(response["facetHits"].as_array().unwrap().len(), 1);
|
|
|
|
}
|
|
|
|
|
2023-07-24 18:04:58 +02:00
|
|
|
#[actix_rt::test]
|
|
|
|
async fn advanced_facet_search() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.update_settings_filterable_attributes(json!(["genres"])).await;
|
|
|
|
index.update_settings_typo_tolerance(json!({ "enabled": false })).await;
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(2).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "adventre"})).await;
|
|
|
|
|
2023-07-25 14:46:23 +02:00
|
|
|
snapshot!(code, @"200 OK");
|
|
|
|
snapshot!(response["facetHits"].as_array().unwrap().len(), @"0");
|
2023-07-24 18:04:58 +02:00
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "àdventure"})).await;
|
|
|
|
|
2023-07-25 14:46:23 +02:00
|
|
|
snapshot!(code, @"200 OK");
|
|
|
|
snapshot!(response["facetHits"].as_array().unwrap().len(), @"1");
|
2023-07-24 18:04:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#[actix_rt::test]
|
|
|
|
async fn more_advanced_facet_search() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.update_settings_filterable_attributes(json!(["genres"])).await;
|
|
|
|
index.update_settings_typo_tolerance(json!({ "disableOnWords": ["adventre"] })).await;
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(2).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "adventre"})).await;
|
|
|
|
|
2023-07-25 14:46:23 +02:00
|
|
|
snapshot!(code, @"200 OK");
|
|
|
|
snapshot!(response["facetHits"].as_array().unwrap().len(), @"0");
|
2023-07-24 18:04:58 +02:00
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "adventure"})).await;
|
|
|
|
|
2023-07-25 14:46:23 +02:00
|
|
|
snapshot!(code, @"200 OK");
|
|
|
|
snapshot!(response["facetHits"].as_array().unwrap().len(), @"1");
|
2023-07-24 18:04:58 +02:00
|
|
|
}
|
|
|
|
|
2024-01-10 16:34:40 +01:00
|
|
|
#[actix_rt::test]
|
|
|
|
async fn simple_facet_search_with_max_values() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.update_settings_faceting(json!({ "maxValuesPerFacet": 1 })).await;
|
|
|
|
index.update_settings_filterable_attributes(json!(["genres"])).await;
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(2).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "a"})).await;
|
|
|
|
|
|
|
|
assert_eq!(code, 200, "{}", response);
|
|
|
|
assert_eq!(dbg!(response)["facetHits"].as_array().unwrap().len(), 1);
|
|
|
|
}
|
|
|
|
|
2023-06-28 11:31:52 +02:00
|
|
|
#[actix_rt::test]
|
|
|
|
async fn non_filterable_facet_search_error() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(0).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "a"})).await;
|
|
|
|
assert_eq!(code, 400, "{}", response);
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "adv"})).await;
|
|
|
|
assert_eq!(code, 400, "{}", response);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[actix_rt::test]
|
|
|
|
async fn facet_search_dont_support_words() {
|
|
|
|
let server = Server::new().await;
|
|
|
|
let index = server.index("test");
|
|
|
|
|
|
|
|
let documents = DOCUMENTS.clone();
|
|
|
|
index.update_settings_filterable_attributes(json!(["genres"])).await;
|
|
|
|
index.add_documents(documents, None).await;
|
|
|
|
index.wait_task(1).await;
|
|
|
|
|
|
|
|
let (response, code) =
|
|
|
|
index.facet_search(json!({"facetName": "genres", "facetQuery": "words"})).await;
|
|
|
|
|
|
|
|
assert_eq!(code, 200, "{}", response);
|
|
|
|
assert_eq!(response["facetHits"].as_array().unwrap().len(), 0);
|
|
|
|
}
|