mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-11-26 06:44:27 +01:00
tests
This commit is contained in:
parent
d7f099d3ba
commit
0ce2666d2f
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -863,6 +863,9 @@ name = "either"
|
|||||||
version = "1.5.3"
|
version = "1.5.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "encoding_rs"
|
name = "encoding_rs"
|
||||||
@ -1643,6 +1646,7 @@ dependencies = [
|
|||||||
"assert-json-diff",
|
"assert-json-diff",
|
||||||
"chrono",
|
"chrono",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
"either",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"futures",
|
"futures",
|
||||||
"heed",
|
"heed",
|
||||||
|
1613
meilisearch-http/tests/assets/test_set.json
Normal file
1613
meilisearch-http/tests/assets/test_set.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,74 @@ impl Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn test_server() -> Self {
|
||||||
|
|
||||||
|
let mut server = Self::with_uid("test");
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"uid": "test",
|
||||||
|
"primaryKey": "id",
|
||||||
|
});
|
||||||
|
|
||||||
|
server.create_index(body).await;
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"rankingRules": [
|
||||||
|
"typo",
|
||||||
|
"words",
|
||||||
|
"proximity",
|
||||||
|
"attribute",
|
||||||
|
"wordsPosition",
|
||||||
|
"exactness",
|
||||||
|
],
|
||||||
|
"searchableAttributes": [
|
||||||
|
"balance",
|
||||||
|
"picture",
|
||||||
|
"age",
|
||||||
|
"color",
|
||||||
|
"name",
|
||||||
|
"gender",
|
||||||
|
"email",
|
||||||
|
"phone",
|
||||||
|
"address",
|
||||||
|
"about",
|
||||||
|
"registered",
|
||||||
|
"latitude",
|
||||||
|
"longitude",
|
||||||
|
"tags",
|
||||||
|
],
|
||||||
|
"displayedAttributes": [
|
||||||
|
"id",
|
||||||
|
"isActive",
|
||||||
|
"balance",
|
||||||
|
"picture",
|
||||||
|
"age",
|
||||||
|
"color",
|
||||||
|
"name",
|
||||||
|
"gender",
|
||||||
|
"email",
|
||||||
|
"phone",
|
||||||
|
"address",
|
||||||
|
"about",
|
||||||
|
"registered",
|
||||||
|
"latitude",
|
||||||
|
"longitude",
|
||||||
|
"tags",
|
||||||
|
],
|
||||||
|
"acceptNewFields": false,
|
||||||
|
});
|
||||||
|
|
||||||
|
server.update_all_settings(body).await;
|
||||||
|
|
||||||
|
let dataset = include_bytes!("assets/test_set.json");
|
||||||
|
|
||||||
|
let body: Value = serde_json::from_slice(dataset).unwrap();
|
||||||
|
|
||||||
|
server.add_or_replace_multiple_documents(body).await;
|
||||||
|
server
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
pub async fn wait_update_id(&mut self, update_id: u64) {
|
pub async fn wait_update_id(&mut self, update_id: u64) {
|
||||||
loop {
|
loop {
|
||||||
let (response, status_code) = self.get_update_status(update_id).await;
|
let (response, status_code) = self.get_update_status(update_id).await;
|
||||||
@ -90,6 +158,7 @@ impl Server {
|
|||||||
eprintln!("post_request_async: {}", url);
|
eprintln!("post_request_async: {}", url);
|
||||||
|
|
||||||
let (response, status_code) = self.post_request(url, body).await;
|
let (response, status_code) = self.post_request(url, body).await;
|
||||||
|
eprintln!("response: {}", response);
|
||||||
assert_eq!(status_code, 202);
|
assert_eq!(status_code, 202);
|
||||||
assert!(response["updateId"].as_u64().is_some());
|
assert!(response["updateId"].as_u64().is_some());
|
||||||
self.wait_update_id(response["updateId"].as_u64().unwrap())
|
self.wait_update_id(response["updateId"].as_u64().unwrap())
|
||||||
|
@ -2,6 +2,7 @@ use std::convert::Into;
|
|||||||
|
|
||||||
use assert_json_diff::assert_json_eq;
|
use assert_json_diff::assert_json_eq;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use serde_json::Value;
|
||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
|
|
||||||
@ -1133,3 +1134,161 @@ async fn search_with_differents_attributes_8() {
|
|||||||
let (response, _status_code) = server.search(query).await;
|
let (response, _status_code) = server.search(query).await;
|
||||||
assert_json_eq!(expected, response["hits"].clone(), ordered: false);
|
assert_json_eq!(expected, response["hits"].clone(), ordered: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_faceted_search_valid() {
|
||||||
|
let mut server = common::Server::test_server().await;
|
||||||
|
|
||||||
|
// simple tests on attributes with string value
|
||||||
|
let body = json!({
|
||||||
|
"attributesForFaceting": ["color"]
|
||||||
|
});
|
||||||
|
server.update_all_settings(body).await;
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Agreen%22%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value| value.get("color").unwrap() == "green"));
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Ablue%22%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value| value.get("color").unwrap() == "blue"));
|
||||||
|
|
||||||
|
// test case insensitive : ["color:Blue"]
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3ABlue%22%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value| value.get("color").unwrap() == "blue"));
|
||||||
|
|
||||||
|
// test on arrays: ["tags:bug"]
|
||||||
|
let body = json!({
|
||||||
|
"attributesForFaceting": ["color", "tags"]
|
||||||
|
});
|
||||||
|
server.update_all_settings(body).await;
|
||||||
|
|
||||||
|
let query = "q=a&facetFilters=%5B%22tags%3Abug%22%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value| value.get("tags").unwrap().as_array().unwrap().contains(&Value::String("bug".to_owned()))));
|
||||||
|
|
||||||
|
// test and: ["color:blue", "tags:bug"]
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Ablue%22,%20%22tags%3Abug%22%20%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value| value
|
||||||
|
.get("color")
|
||||||
|
.unwrap() == "blue"
|
||||||
|
&& value.get("tags").unwrap().as_array().unwrap().contains(&Value::String("bug".to_owned()))));
|
||||||
|
|
||||||
|
// test or: [["color:blue", "color:green"]]
|
||||||
|
let query = "q=a&facetFilters=%5B%5B%22color%3Ablue%22,%20%22color%3Agreen%22%5D%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value|
|
||||||
|
value
|
||||||
|
.get("color")
|
||||||
|
.unwrap() == "blue"
|
||||||
|
|| value
|
||||||
|
.get("color")
|
||||||
|
.unwrap() == "green"));
|
||||||
|
// test and-or: ["tags:bug", ["color:blue", "color:green"]]
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Ablue%22,%20%22tags%3Abug%22%20%5D";
|
||||||
|
let (response, _status_code) = server.search(query).await;
|
||||||
|
assert!(!response.get("hits").unwrap().as_array().unwrap().is_empty());
|
||||||
|
assert!(response
|
||||||
|
.get("hits")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.all(|value|
|
||||||
|
value
|
||||||
|
.get("tags")
|
||||||
|
.unwrap()
|
||||||
|
.as_array()
|
||||||
|
.unwrap()
|
||||||
|
.contains(&Value::String("bug".to_owned()))
|
||||||
|
&& (value
|
||||||
|
.get("color")
|
||||||
|
.unwrap() == "blue"
|
||||||
|
|| value
|
||||||
|
.get("color")
|
||||||
|
.unwrap() == "green")));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_faceted_search_invalid() {
|
||||||
|
let mut server = common::Server::test_server().await;
|
||||||
|
|
||||||
|
//no faceted attributes set
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Ablue%22,%20%22tags%3Abug%22%20%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
|
||||||
|
let body = json!({
|
||||||
|
"attributesForFaceting": ["color", "tags"]
|
||||||
|
});
|
||||||
|
server.update_all_settings(body).await;
|
||||||
|
// empty arrays are error
|
||||||
|
// []
|
||||||
|
let query = "q=a&facetFilters=%5B%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
// [[]]
|
||||||
|
let query = "q=a&facetFilters=%5B%5B%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
// ["color:green", []]
|
||||||
|
let query = "q=a&facetFilters=%5B%22color%3Agreen%22,%20%5B%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
|
||||||
|
// too much depth
|
||||||
|
// [[[]]]
|
||||||
|
let query = "q=a&facetFilters=%5B%5B%5B%5D%5D%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
// [["color:green", ["color:blue"]]]
|
||||||
|
let query = "q=a&facetFilters=%5B%5B%22color%3Agreen%22,%20%5B%22color%3Ablue%22%5D%5D%5D";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
// "color:green"
|
||||||
|
let query = "q=a&facetFilters=%22color%3Agreen%22";
|
||||||
|
let (_response, status_code) = server.search(query).await;
|
||||||
|
assert_ne!(status_code, 202);
|
||||||
|
}
|
||||||
|
@ -341,6 +341,7 @@ async fn accept_new_fields_does_not_take_into_account_the_primary_key() {
|
|||||||
"displayedAttributes": ["title"],
|
"displayedAttributes": ["title"],
|
||||||
"stopWords": [],
|
"stopWords": [],
|
||||||
"synonyms": {},
|
"synonyms": {},
|
||||||
|
"attributesForFaceting": null,
|
||||||
"acceptNewFields": false,
|
"acceptNewFields": false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user