mirror of
https://github.com/meilisearch/MeiliSearch
synced 2024-12-25 14:10:06 +01:00
350 lines
8.3 KiB
Rust
350 lines
8.3 KiB
Rust
use assert_json_diff::assert_json_eq;
|
|
use serde_json::json;
|
|
|
|
mod common;
|
|
|
|
#[actix_rt::test]
|
|
async fn index_new_fields_default() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
let body = json!({
|
|
"uid": "movies",
|
|
"primaryKey": "id",
|
|
});
|
|
server.create_index(body).await;
|
|
|
|
// 1 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 2 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
// 3 - Add a document with more fields
|
|
|
|
let body = json!([{
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 4 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(2).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
}
|
|
|
|
#[actix_rt::test]
|
|
async fn index_new_fields_true() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
let body = json!({
|
|
"uid": "movies",
|
|
"primaryKey": "id",
|
|
});
|
|
server.create_index(body).await;
|
|
|
|
// 1 - Set indexNewFields = true
|
|
|
|
server.update_accept_new_fields(json!(true)).await;
|
|
|
|
// 2 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 3 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
// 4 - Add a document with more fields
|
|
|
|
let body = json!([{
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 5 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(2).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
}
|
|
|
|
#[actix_rt::test]
|
|
async fn index_new_fields_false() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
let body = json!({
|
|
"uid": "movies",
|
|
"primaryKey": "id",
|
|
});
|
|
server.create_index(body).await;
|
|
|
|
// 1 - Set indexNewFields = false
|
|
|
|
server.update_accept_new_fields(json!(false)).await;
|
|
|
|
// 2 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 3 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
// 4 - Add a document with more fields
|
|
|
|
let body = json!([{
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 5 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 2,
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(2).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
}
|
|
|
|
#[actix_rt::test]
|
|
async fn index_new_fields_true_then_false() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
let body = json!({
|
|
"uid": "movies",
|
|
"primaryKey": "id",
|
|
});
|
|
server.create_index(body).await;
|
|
|
|
// 1 - Set indexNewFields = true
|
|
|
|
server.update_accept_new_fields(json!(true)).await;
|
|
|
|
// 2 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 3 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
// 4 - Set indexNewFields = false
|
|
|
|
server.update_accept_new_fields(json!(false)).await;
|
|
|
|
// 5 - Add a document with more fields
|
|
|
|
let body = json!([{
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 6 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(2).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
}
|
|
|
|
#[actix_rt::test]
|
|
async fn index_new_fields_false_then_true() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
let body = json!({
|
|
"uid": "movies",
|
|
"primaryKey": "id",
|
|
});
|
|
server.create_index(body).await;
|
|
|
|
// 1 - Set indexNewFields = false
|
|
|
|
server.update_accept_new_fields(json!(false)).await;
|
|
|
|
// 2 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "I'm a legend",
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 3 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
// 4 - Set indexNewFields = false
|
|
|
|
server.update_accept_new_fields(json!(true)).await;
|
|
|
|
// 5 - Add a document with more fields
|
|
|
|
let body = json!([{
|
|
"id": 2,
|
|
"title": "I'm not a legend",
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 6 - Get the complete document
|
|
|
|
let expected = json!({
|
|
"id": 1,
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(1).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
|
|
let expected = json!({
|
|
"id": 2,
|
|
"description": "A bad copy of the original movie I'm a lengend"
|
|
});
|
|
|
|
let (response, status_code) = server.get_document(2).await;
|
|
assert_eq!(status_code, 200);
|
|
assert_json_eq!(response, expected);
|
|
}
|
|
|
|
// Fix issue https://github.com/meilisearch/MeiliSearch/issues/518
|
|
#[actix_rt::test]
|
|
async fn accept_new_fields_does_not_take_into_account_the_primary_key() {
|
|
let mut server = common::Server::with_uid("movies");
|
|
|
|
// 1 - Create an index with no primary-key
|
|
|
|
let body = json!({
|
|
"uid": "movies",
|
|
});
|
|
let (response, status_code) = server.create_index(body).await;
|
|
assert_eq!(status_code, 201);
|
|
assert_eq!(response["primaryKey"], json!(null));
|
|
|
|
// 2 - Add searchable and displayed attributes as: ["title"] & Set acceptNewFields to false
|
|
|
|
let body = json!({
|
|
"searchableAttributes": ["title"],
|
|
"displayedAttributes": ["title"],
|
|
"acceptNewFields": false,
|
|
});
|
|
|
|
server.update_all_settings(body).await;
|
|
|
|
// 4 - Add a document
|
|
|
|
let body = json!([{
|
|
"id": 1,
|
|
"title": "Test",
|
|
"comment": "comment test"
|
|
}]);
|
|
|
|
server.add_or_replace_multiple_documents(body).await;
|
|
|
|
// 5 - Get settings, they should not changed
|
|
|
|
let (response, _status_code) = server.get_all_settings().await;
|
|
|
|
let expected = json!({
|
|
"rankingRules": [
|
|
"typo",
|
|
"words",
|
|
"proximity",
|
|
"attribute",
|
|
"wordsPosition",
|
|
"exactness",
|
|
],
|
|
"distinctAttribute": null,
|
|
"searchableAttributes": ["title"],
|
|
"displayedAttributes": ["title"],
|
|
"stopWords": [],
|
|
"synonyms": {},
|
|
"attributesForFaceting": [],
|
|
"acceptNewFields": false,
|
|
});
|
|
|
|
assert_json_eq!(response, expected, ordered: false);
|
|
}
|