Merge branch 'main' into indexer-edition-2024

This commit is contained in:
Louis Dureuil 2024-11-20 16:59:58 +01:00
commit 6e6acfcf1b
No known key found for this signature in database
330 changed files with 10063 additions and 1499 deletions

View file

@ -293,6 +293,7 @@ async fn add_csv_document() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "pets",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -357,6 +358,7 @@ async fn add_csv_document_with_types() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "pets",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -432,6 +434,7 @@ async fn add_csv_document_with_custom_delimiter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "pets",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -985,6 +988,7 @@ async fn add_documents_no_index_creation() {
@r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1063,6 +1067,7 @@ async fn document_addition_with_primary_key() {
@r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1111,6 +1116,7 @@ async fn document_addition_with_huge_int_primary_key() {
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1183,6 +1189,7 @@ async fn replace_document() {
@r###"
{
"uid": 1,
"batchUid": 1,
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1271,6 +1278,7 @@ async fn error_add_documents_bad_document_id() {
@r###"
{
"uid": 1,
"batchUid": 1,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1312,6 +1320,7 @@ async fn error_add_documents_missing_document_id() {
@r###"
{
"uid": 1,
"batchUid": 1,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1407,6 +1416,7 @@ async fn error_document_field_limit_reached_over_multiple_documents() {
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1441,6 +1451,7 @@ async fn error_document_field_limit_reached_over_multiple_documents() {
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1490,6 +1501,7 @@ async fn error_document_field_limit_reached_in_one_nested_document() {
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1533,6 +1545,7 @@ async fn error_document_field_limit_reached_over_multiple_documents_with_nested_
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1568,6 +1581,7 @@ async fn error_document_field_limit_reached_over_multiple_documents_with_nested_
@r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1615,6 +1629,7 @@ async fn add_documents_with_geo_field() {
@r###"
{
"uid": 1,
"batchUid": 1,
"indexUid": "doggo",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -1655,6 +1670,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 2,
"batchUid": 2,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1692,6 +1708,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 3,
"batchUid": 3,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1729,6 +1746,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 4,
"batchUid": 4,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1766,6 +1784,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 5,
"batchUid": 5,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1803,6 +1822,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 6,
"batchUid": 6,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1840,6 +1860,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 7,
"batchUid": 7,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1877,6 +1898,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 8,
"batchUid": 8,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1914,6 +1936,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 9,
"batchUid": 9,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1951,6 +1974,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 10,
"batchUid": 10,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -1988,6 +2012,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 11,
"batchUid": 11,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2025,6 +2050,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 12,
"batchUid": 12,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2062,6 +2088,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 13,
"batchUid": 13,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2100,6 +2127,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 14,
"batchUid": 14,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2136,6 +2164,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 15,
"batchUid": 15,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2172,6 +2201,7 @@ async fn add_documents_invalid_geo_field() {
@r###"
{
"uid": 16,
"batchUid": 16,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2214,6 +2244,7 @@ async fn add_invalid_geo_and_then_settings() {
snapshot!(ret, @r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",
@ -2236,6 +2267,7 @@ async fn add_invalid_geo_and_then_settings() {
snapshot!(ret, @r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "test",
"status": "failed",
"type": "settingsUpdate",
@ -2307,6 +2339,7 @@ async fn error_primary_key_inference() {
@r###"
{
"uid": 0,
"batchUid": 0,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2347,6 +2380,7 @@ async fn error_primary_key_inference() {
@r###"
{
"uid": 1,
"batchUid": 1,
"indexUid": "test",
"status": "failed",
"type": "documentAdditionOrUpdate",
@ -2385,6 +2419,7 @@ async fn error_primary_key_inference() {
@r###"
{
"uid": 2,
"batchUid": 2,
"indexUid": "test",
"status": "succeeded",
"type": "documentAdditionOrUpdate",

View file

@ -184,6 +184,7 @@ async fn delete_document_by_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 2,
"batchUid": 2,
"indexUid": "doggo",
"status": "succeeded",
"type": "documentDeletion",
@ -249,6 +250,7 @@ async fn delete_document_by_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 3,
"batchUid": 3,
"indexUid": "doggo",
"status": "succeeded",
"type": "documentDeletion",
@ -333,6 +335,7 @@ async fn delete_document_by_complex_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 2,
"batchUid": 2,
"indexUid": "doggo",
"status": "succeeded",
"type": "documentDeletion",
@ -391,6 +394,7 @@ async fn delete_document_by_complex_filter() {
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{
"uid": 3,
"batchUid": 3,
"indexUid": "doggo",
"status": "succeeded",
"type": "documentDeletion",

View file

@ -563,6 +563,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "DOES_NOT_EXISTS",
"status": "failed",
"type": "documentDeletion",
@ -592,6 +593,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "EMPTY_INDEX",
"status": "failed",
"type": "documentDeletion",
@ -623,6 +625,7 @@ async fn delete_document_by_filter() {
snapshot!(response, @r###"
{
"uid": "[uid]",
"batchUid": "[batch_uid]",
"indexUid": "SHARED_DOCUMENTS",
"status": "failed",
"type": "documentDeletion",

View file

@ -4,24 +4,27 @@ use meili_snap::*;
use urlencoding::encode as urlencode;
use crate::common::encoder::Encoder;
use crate::common::{GetAllDocumentsOptions, Server, Value};
use crate::common::{
shared_does_not_exists_index, shared_empty_index, shared_index_with_test_set,
GetAllDocumentsOptions, Server, Value,
};
use crate::json;
// TODO: partial test since we are testing error, amd error is not yet fully implemented in
// transplant
#[actix_rt::test]
async fn get_unexisting_index_single_document() {
let server = Server::new().await;
let (_response, code) = server.index("test").get_document(1, None).await;
let (_response, code) = shared_does_not_exists_index().await.get_document(1, None).await;
assert_eq!(code, 404);
}
#[actix_rt::test]
async fn error_get_unexisting_document() {
let server = Server::new().await;
let index = server.index("test");
index.create(None).await;
index.wait_task(0).await;
let server = Server::new_shared();
let index = server.unique_index();
let (task, _code) = index.create(None).await;
index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_document(1, None).await;
let expected_response = json!({
@ -37,18 +40,19 @@ async fn error_get_unexisting_document() {
#[actix_rt::test]
async fn get_document() {
let server = Server::new().await;
let index = server.index("test");
index.create(None).await;
let server = Server::new_shared();
let index = server.unique_index();
let (task, _code) = index.create(None).await;
index.wait_task(task.uid()).await.succeeded();
let documents = json!([
{
"id": 0,
"nested": { "content": "foobar" },
}
]);
let (_, code) = index.add_documents(documents, None).await;
let (task, code) = index.add_documents(documents, None).await;
assert_eq!(code, 202);
index.wait_task(1).await;
index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_document(0, None).await;
assert_eq!(code, 200);
assert_eq!(
@ -81,12 +85,11 @@ async fn get_document() {
#[actix_rt::test]
async fn error_get_unexisting_index_all_documents() {
let server = Server::new().await;
let (response, code) =
server.index("test").get_all_documents(GetAllDocumentsOptions::default()).await;
let index = shared_does_not_exists_index().await;
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
let expected_response = json!({
"message": "Index `test` not found.",
"message": "Index `DOES_NOT_EXISTS` not found.",
"code": "index_not_found",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#index_not_found"
@ -98,12 +101,7 @@ async fn error_get_unexisting_index_all_documents() {
#[actix_rt::test]
async fn get_no_document() {
let server = Server::new().await;
let index = server.index("test");
let (_, code) = index.create(None).await;
assert_eq!(code, 202);
index.wait_task(0).await;
let index = shared_empty_index().await;
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200);
@ -112,14 +110,12 @@ async fn get_no_document() {
#[actix_rt::test]
async fn get_all_documents_no_options() {
let server = Server::new().await;
let index = server.index("test");
index.load_test_set().await;
let index = shared_index_with_test_set().await;
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200);
let arr = response["results"].as_array().unwrap();
assert_eq!(arr.len(), 20);
let results = response["results"].as_array().unwrap();
assert_eq!(results.len(), 20);
let first = json!({
"id":0,
"isActive":false,
@ -138,19 +134,16 @@ async fn get_all_documents_no_options() {
"longitude":-145.725388,
"tags":["bug"
,"bug"]});
assert_eq!(first, arr[0]);
assert_eq!(first, results[0]);
}
#[actix_rt::test]
async fn get_all_documents_no_options_with_response_compression() {
let server = Server::new().await;
let index_uid = "test";
let index = server.index(index_uid);
index.load_test_set().await;
let index = shared_index_with_test_set().await;
let app = server.init_web_app().await;
let app = Server::new_shared().init_web_app().await;
let req = test::TestRequest::get()
.uri(&format!("/indexes/{}/documents?", urlencode(index_uid)))
.uri(&format!("/indexes/{}/documents?", urlencode(&index.uid)))
.insert_header((ACCEPT_ENCODING, "gzip"))
.to_request();
@ -169,9 +162,7 @@ async fn get_all_documents_no_options_with_response_compression() {
#[actix_rt::test]
async fn test_get_all_documents_limit() {
let server = Server::new().await;
let index = server.index("test");
index.load_test_set().await;
let index = shared_index_with_test_set().await;
let (response, code) = index
.get_all_documents(GetAllDocumentsOptions { limit: Some(5), ..Default::default() })
@ -186,9 +177,7 @@ async fn test_get_all_documents_limit() {
#[actix_rt::test]
async fn test_get_all_documents_offset() {
let server = Server::new().await;
let index = server.index("test");
index.load_test_set().await;
let index = shared_index_with_test_set().await;
let (response, code) = index
.get_all_documents(GetAllDocumentsOptions { offset: Some(5), ..Default::default() })
@ -203,9 +192,7 @@ async fn test_get_all_documents_offset() {
#[actix_rt::test]
async fn test_get_all_documents_attributes_to_retrieve() {
let server = Server::new().await;
let index = server.index("test");
index.load_test_set().await;
let index = shared_index_with_test_set().await;
let (response, code) = index
.get_all_documents(GetAllDocumentsOptions {
@ -286,9 +273,11 @@ async fn test_get_all_documents_attributes_to_retrieve() {
#[actix_rt::test]
async fn get_document_s_nested_attributes_to_retrieve() {
let server = Server::new().await;
let index = server.index("test");
index.create(None).await;
let server = Server::new_shared();
let index = server.unique_index();
let (task, _code) = index.create(None).await;
index.wait_task(task.uid()).await.succeeded();
let documents = json!([
{
"id": 0,
@ -302,9 +291,9 @@ async fn get_document_s_nested_attributes_to_retrieve() {
},
},
]);
let (_, code) = index.add_documents(documents, None).await;
let (task, code) = index.add_documents(documents, None).await;
assert_eq!(code, 202);
index.wait_task(1).await;
index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_document(0, Some(json!({ "fields": ["content"] }))).await;
assert_eq!(code, 200);
@ -343,10 +332,10 @@ async fn get_document_s_nested_attributes_to_retrieve() {
#[actix_rt::test]
async fn get_documents_displayed_attributes_is_ignored() {
let server = Server::new().await;
let index = server.index("test");
index.update_settings(json!({"displayedAttributes": ["gender"]})).await;
let server = Server::new_shared();
let index = server.unique_index();
index.load_test_set().await;
index.update_settings(json!({"displayedAttributes": ["gender"]})).await;
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200);
@ -366,10 +355,10 @@ async fn get_documents_displayed_attributes_is_ignored() {
#[actix_rt::test]
async fn get_document_by_filter() {
let server = Server::new().await;
let index = server.index("doggo");
let server = Server::new_shared();
let index = server.unique_index();
index.update_settings_filterable_attributes(json!(["color"])).await;
index
let (task, _code) = index
.add_documents(
json!([
{ "id": 0, "color": "red" },
@ -380,7 +369,7 @@ async fn get_document_by_filter() {
Some("id"),
)
.await;
index.wait_task(1).await;
index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_document_by_filter(json!({})).await;
let (response2, code2) = index.get_all_documents_raw("").await;
@ -552,7 +541,7 @@ async fn get_document_with_vectors() {
}))
.await;
snapshot!(code, @"202 Accepted");
server.wait_task(response.uid()).await;
server.wait_task(response.uid()).await.succeeded();
let documents = json!([
{"id": 0, "name": "kefir", "_vectors": { "manual": [0, 0, 0] }},
@ -560,7 +549,7 @@ async fn get_document_with_vectors() {
]);
let (value, code) = index.add_documents(documents, None).await;
snapshot!(code, @"202 Accepted");
index.wait_task(value.uid()).await;
index.wait_task(value.uid()).await.succeeded();
// by default you shouldn't see the `_vectors` object
let (documents, _code) = index.get_all_documents(Default::default()).await;