Merge pull request #5619 from martin-g/faster-documents-delete_documents-it-tests

tests: Faster documents::delete_documents IT tests
This commit is contained in:
Tamo 2025-06-03 12:06:07 +00:00 committed by GitHub
commit 2cfd363dc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,39 +1,35 @@
use meili_snap::{json_string, snapshot}; use meili_snap::{json_string, snapshot};
use crate::common::{GetAllDocumentsOptions, Server}; use crate::common::{shared_does_not_exists_index, GetAllDocumentsOptions, Server};
use crate::json; use crate::json;
#[actix_rt::test] #[actix_rt::test]
async fn delete_one_document_unexisting_index() { async fn delete_one_document_unexisting_index() {
let server = Server::new().await; let index = shared_does_not_exists_index().await;
let index = server.index("test"); let (task, code) = index.delete_document_by_filter_fail(json!({"filter": "a = b"})).await;
let (task, code) = index.delete_document(0).await;
assert_eq!(code, 202); assert_eq!(code, 202);
let response = index.wait_task(task.uid()).await; index.wait_task(task.uid()).await.failed();
assert_eq!(response["status"], "failed");
} }
#[actix_rt::test] #[actix_rt::test]
async fn delete_one_unexisting_document() { async fn delete_one_unexisting_document() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
index.create(None).await; index.create(None).await;
let (response, code) = index.delete_document(0).await; let (response, code) = index.delete_document(0).await;
assert_eq!(code, 202, "{}", response); assert_eq!(code, 202, "{response}");
let update = index.wait_task(response.uid()).await; index.wait_task(response.uid()).await.succeeded();
assert_eq!(update["status"], "succeeded");
} }
#[actix_rt::test] #[actix_rt::test]
async fn delete_one_document() { async fn delete_one_document() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task, _status_code) = let (task, _status_code) =
index.add_documents(json!([{ "id": 0, "content": "foobar" }]), None).await; index.add_documents(json!([{ "id": 0, "content": "foobar" }]), None).await;
index.wait_task(task.uid()).await.succeeded(); index.wait_task(task.uid()).await.succeeded();
let (task, status_code) = server.index("test").delete_document(0).await; let (task, status_code) = index.delete_document(0).await;
assert_eq!(status_code, 202); assert_eq!(status_code, 202);
index.wait_task(task.uid()).await.succeeded(); index.wait_task(task.uid()).await.succeeded();
@ -43,20 +39,18 @@ async fn delete_one_document() {
#[actix_rt::test] #[actix_rt::test]
async fn clear_all_documents_unexisting_index() { async fn clear_all_documents_unexisting_index() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task, code) = index.clear_all_documents().await; let (task, code) = index.clear_all_documents().await;
assert_eq!(code, 202); assert_eq!(code, 202);
let response = index.wait_task(task.uid()).await; index.wait_task(task.uid()).await.failed();
assert_eq!(response["status"], "failed");
} }
#[actix_rt::test] #[actix_rt::test]
async fn clear_all_documents() { async fn clear_all_documents() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task, _status_code) = index let (task, _status_code) = index
.add_documents( .add_documents(
json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }]), json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }]),
@ -67,7 +61,7 @@ async fn clear_all_documents() {
let (task, code) = index.clear_all_documents().await; let (task, code) = index.clear_all_documents().await;
assert_eq!(code, 202); assert_eq!(code, 202);
let _update = index.wait_task(task.uid()).await; let _update = index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await; let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200); assert_eq!(code, 200);
assert!(response["results"].as_array().unwrap().is_empty()); assert!(response["results"].as_array().unwrap().is_empty());
@ -75,14 +69,14 @@ async fn clear_all_documents() {
#[actix_rt::test] #[actix_rt::test]
async fn clear_all_documents_empty_index() { async fn clear_all_documents_empty_index() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task, _status_code) = index.create(None).await; let (task, _status_code) = index.create(None).await;
index.wait_task(task.uid()).await.succeeded(); index.wait_task(task.uid()).await.succeeded();
let (task, code) = index.clear_all_documents().await; let (task, code) = index.clear_all_documents().await;
assert_eq!(code, 202); assert_eq!(code, 202);
let _update = index.wait_task(task.uid()).await; let _update = index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await; let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200); assert_eq!(code, 200);
assert!(response["results"].as_array().unwrap().is_empty()); assert!(response["results"].as_array().unwrap().is_empty());
@ -90,33 +84,31 @@ async fn clear_all_documents_empty_index() {
#[actix_rt::test] #[actix_rt::test]
async fn error_delete_batch_unexisting_index() { async fn error_delete_batch_unexisting_index() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task, code) = index.delete_batch(vec![]).await; let (task, code) = index.delete_batch(vec![]).await;
let expected_response = json!({ let expected_response = json!({
"message": "Index `test` not found.", "message": format!("Index `{}` not found.", index.uid),
"code": "index_not_found", "code": "index_not_found",
"type": "invalid_request", "type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#index_not_found" "link": "https://docs.meilisearch.com/errors#index_not_found"
}); });
assert_eq!(code, 202); assert_eq!(code, 202);
let response = index.wait_task(task.uid()).await; let response = index.wait_task(task.uid()).await.failed();
assert_eq!(response["status"], "failed");
assert_eq!(response["error"], expected_response); assert_eq!(response["error"], expected_response);
} }
#[actix_rt::test] #[actix_rt::test]
async fn delete_batch() { async fn delete_batch() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task,_status_code) = index.add_documents(json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }, { "id": 3, "content": "foobar" }]), Some("id")).await; let (task,_status_code) = index.add_documents(json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }, { "id": 3, "content": "foobar" }]), Some("id")).await;
index.wait_task(task.uid()).await.succeeded(); index.wait_task(task.uid()).await.succeeded();
let (task, code) = index.delete_batch(vec![1, 0]).await; let (task, code) = index.delete_batch(vec![1, 0]).await;
assert_eq!(code, 202); assert_eq!(code, 202);
let _update = index.wait_task(task.uid()).await; let _update = index.wait_task(task.uid()).await.succeeded();
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await; let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200); assert_eq!(code, 200);
assert_eq!(response["results"].as_array().unwrap().len(), 1); assert_eq!(response["results"].as_array().unwrap().len(), 1);
@ -125,14 +117,14 @@ async fn delete_batch() {
#[actix_rt::test] #[actix_rt::test]
async fn delete_no_document_batch() { async fn delete_no_document_batch() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("test"); let index = server.unique_index();
let (task,_status_code) = index.add_documents(json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }, { "id": 3, "content": "foobar" }]), Some("id")).await; let (task,_status_code) = index.add_documents(json!([{ "id": 1, "content": "foobar" }, { "id": 0, "content": "foobar" }, { "id": 3, "content": "foobar" }]), Some("id")).await;
index.wait_task(task.uid()).await.succeeded(); index.wait_task(task.uid()).await.succeeded();
let (_response, code) = index.delete_batch(vec![]).await; let (response, code) = index.delete_batch(vec![]).await;
assert_eq!(code, 202, "{}", _response); assert_eq!(code, 202, "{response}");
let _update = index.wait_task(_response.uid()).await; let _update = index.wait_task(response.uid()).await.succeeded();
let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await; let (response, code) = index.get_all_documents(GetAllDocumentsOptions::default()).await;
assert_eq!(code, 200); assert_eq!(code, 200);
assert_eq!(response["results"].as_array().unwrap().len(), 3); assert_eq!(response["results"].as_array().unwrap().len(), 3);
@ -140,8 +132,8 @@ async fn delete_no_document_batch() {
#[actix_rt::test] #[actix_rt::test]
async fn delete_document_by_filter() { async fn delete_document_by_filter() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("doggo"); let index = server.unique_index();
index.update_settings_filterable_attributes(json!(["color"])).await; index.update_settings_filterable_attributes(json!(["color"])).await;
let (task, _status_code) = index let (task, _status_code) = index
.add_documents( .add_documents(
@ -178,22 +170,22 @@ async fn delete_document_by_filter() {
let (response, code) = let (response, code) =
index.delete_document_by_filter(json!({ "filter": "color = blue"})).await; index.delete_document_by_filter(json!({ "filter": "color = blue"})).await;
snapshot!(code, @"202 Accepted"); snapshot!(code, @"202 Accepted");
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]" }), @r###" snapshot!(json_string!(response, { ".taskUid" => "[task_uid]", ".enqueuedAt" => "[date]" }), @r###"
{ {
"taskUid": 2, "taskUid": "[task_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "enqueued", "status": "enqueued",
"type": "documentDeletion", "type": "documentDeletion",
"enqueuedAt": "[date]" "enqueuedAt": "[date]"
} }
"###); "###);
let response = index.wait_task(response.uid()).await; let response = index.wait_task(response.uid()).await.succeeded();
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".uid" => "[uid]", ".batchUid" => "[batch_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 2, "uid": "[uid]",
"batchUid": 2, "batchUid": "[batch_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
"canceledBy": null, "canceledBy": null,
@ -251,22 +243,22 @@ async fn delete_document_by_filter() {
let (response, code) = let (response, code) =
index.delete_document_by_filter(json!({ "filter": "color NOT EXISTS"})).await; index.delete_document_by_filter(json!({ "filter": "color NOT EXISTS"})).await;
snapshot!(code, @"202 Accepted"); snapshot!(code, @"202 Accepted");
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".taskUid" => "[task_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"taskUid": 3, "taskUid": "[task_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "enqueued", "status": "enqueued",
"type": "documentDeletion", "type": "documentDeletion",
"enqueuedAt": "[date]" "enqueuedAt": "[date]"
} }
"###); "###);
let response = index.wait_task(response.uid()).await; let response = index.wait_task(response.uid()).await.succeeded();
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".uid" => "[uid]", ".batchUid" => "[batch_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 3, "uid": "[uid]",
"batchUid": 3, "batchUid": "[batch_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
"canceledBy": null, "canceledBy": null,
@ -321,8 +313,8 @@ async fn delete_document_by_filter() {
#[actix_rt::test] #[actix_rt::test]
async fn delete_document_by_complex_filter() { async fn delete_document_by_complex_filter() {
let server = Server::new().await; let server = Server::new_shared();
let index = server.index("doggo"); let index = server.unique_index();
index.update_settings_filterable_attributes(json!(["color"])).await; index.update_settings_filterable_attributes(json!(["color"])).await;
let (task, _status_code) = index let (task, _status_code) = index
.add_documents( .add_documents(
@ -343,22 +335,22 @@ async fn delete_document_by_complex_filter() {
) )
.await; .await;
snapshot!(code, @"202 Accepted"); snapshot!(code, @"202 Accepted");
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]" }), @r###" snapshot!(json_string!(response, { ".taskUid" => "[task_uid]", ".enqueuedAt" => "[date]" }), @r###"
{ {
"taskUid": 2, "taskUid": "[task_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "enqueued", "status": "enqueued",
"type": "documentDeletion", "type": "documentDeletion",
"enqueuedAt": "[date]" "enqueuedAt": "[date]"
} }
"###); "###);
let response = index.wait_task(response.uid()).await; let response = index.wait_task(response.uid()).await.succeeded();
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".uid" => "[uid]", ".batchUid" => "[batch_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 2, "uid": "[uid]",
"batchUid": 2, "batchUid": "[batch_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
"canceledBy": null, "canceledBy": null,
@ -402,22 +394,22 @@ async fn delete_document_by_complex_filter() {
.delete_document_by_filter(json!({ "filter": [["color = green", "color NOT EXISTS"]] })) .delete_document_by_filter(json!({ "filter": [["color = green", "color NOT EXISTS"]] }))
.await; .await;
snapshot!(code, @"202 Accepted"); snapshot!(code, @"202 Accepted");
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".taskUid" => "[task_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"taskUid": 3, "taskUid": "[task_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "enqueued", "status": "enqueued",
"type": "documentDeletion", "type": "documentDeletion",
"enqueuedAt": "[date]" "enqueuedAt": "[date]"
} }
"###); "###);
let response = index.wait_task(response.uid()).await; let response = index.wait_task(response.uid()).await.succeeded();
snapshot!(json_string!(response, { ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###" snapshot!(json_string!(response, { ".uid" => "[uid]", ".batchUid" => "[batch_uid]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]", ".duration" => "[duration]" }), @r###"
{ {
"uid": 3, "uid": "[uid]",
"batchUid": 3, "batchUid": "[batch_uid]",
"indexUid": "doggo", "indexUid": "[uuid]",
"status": "succeeded", "status": "succeeded",
"type": "documentDeletion", "type": "documentDeletion",
"canceledBy": null, "canceledBy": null,