make the details return null in the originalFilter field if no filter was provided + add a big test on the details

This commit is contained in:
Tamo 2023-05-24 11:48:22 +02:00
parent ca99bc3188
commit b9dd092a62
2 changed files with 108 additions and 10 deletions

View File

@ -99,7 +99,7 @@ pub struct DetailsView {
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub deleted_tasks: Option<Option<u64>>, pub deleted_tasks: Option<Option<u64>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub original_filter: Option<String>, pub original_filter: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub dump_uid: Option<Option<String>>, pub dump_uid: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
@ -131,12 +131,13 @@ impl From<Details> for DetailsView {
} => DetailsView { } => DetailsView {
provided_ids: Some(received_document_ids), provided_ids: Some(received_document_ids),
deleted_documents: Some(deleted_documents), deleted_documents: Some(deleted_documents),
original_filter: Some(None),
..DetailsView::default() ..DetailsView::default()
}, },
Details::DocumentDeletionByFilter { original_filter, deleted_documents } => { Details::DocumentDeletionByFilter { original_filter, deleted_documents } => {
DetailsView { DetailsView {
provided_ids: Some(0), provided_ids: Some(0),
original_filter: Some(original_filter), original_filter: Some(Some(original_filter)),
deleted_documents: Some(deleted_documents), deleted_documents: Some(deleted_documents),
..DetailsView::default() ..DetailsView::default()
} }
@ -148,7 +149,7 @@ impl From<Details> for DetailsView {
DetailsView { DetailsView {
matched_tasks: Some(matched_tasks), matched_tasks: Some(matched_tasks),
canceled_tasks: Some(canceled_tasks), canceled_tasks: Some(canceled_tasks),
original_filter: Some(original_filter), original_filter: Some(Some(original_filter)),
..DetailsView::default() ..DetailsView::default()
} }
} }
@ -156,7 +157,7 @@ impl From<Details> for DetailsView {
DetailsView { DetailsView {
matched_tasks: Some(matched_tasks), matched_tasks: Some(matched_tasks),
deleted_tasks: Some(deleted_tasks), deleted_tasks: Some(deleted_tasks),
original_filter: Some(original_filter), original_filter: Some(Some(original_filter)),
..DetailsView::default() ..DetailsView::default()
} }
} }

View File

@ -413,7 +413,7 @@ async fn test_summarized_document_addition_or_update() {
} }
#[actix_web::test] #[actix_web::test]
async fn test_summarized_delete_batch() { async fn test_summarized_delete_documents_by_batch() {
let server = Server::new().await; let server = Server::new().await;
let index = server.index("test"); let index = server.index("test");
index.delete_batch(vec![1, 2, 3]).await; index.delete_batch(vec![1, 2, 3]).await;
@ -430,7 +430,8 @@ async fn test_summarized_delete_batch() {
"canceledBy": null, "canceledBy": null,
"details": { "details": {
"providedIds": 3, "providedIds": 3,
"deletedDocuments": 0 "deletedDocuments": 0,
"originalFilter": null
}, },
"error": { "error": {
"message": "Index `test` not found.", "message": "Index `test` not found.",
@ -460,7 +461,8 @@ async fn test_summarized_delete_batch() {
"canceledBy": null, "canceledBy": null,
"details": { "details": {
"providedIds": 1, "providedIds": 1,
"deletedDocuments": 0 "deletedDocuments": 0,
"originalFilter": null
}, },
"error": null, "error": null,
"duration": "[duration]", "duration": "[duration]",
@ -472,7 +474,100 @@ async fn test_summarized_delete_batch() {
} }
#[actix_web::test] #[actix_web::test]
async fn test_summarized_delete_document() { async fn test_summarized_delete_documents_by_filter() {
let server = Server::new().await;
let index = server.index("test");
index.delete_document_by_filter(json!({ "filter": "doggo = bernese" })).await;
index.wait_task(0).await;
let (task, _) = index.get_task(0).await;
assert_json_snapshot!(task,
{ ".duration" => "[duration]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]" },
@r###"
{
"uid": 0,
"indexUid": "test",
"status": "failed",
"type": "documentDeletion",
"canceledBy": null,
"details": {
"providedIds": 0,
"deletedDocuments": 0,
"originalFilter": "\"doggo = bernese\""
},
"error": {
"message": "Index `test` not found.",
"code": "index_not_found",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#index_not_found"
},
"duration": "[duration]",
"enqueuedAt": "[date]",
"startedAt": "[date]",
"finishedAt": "[date]"
}
"###);
index.create(None).await;
index.delete_document_by_filter(json!({ "filter": "doggo = bernese" })).await;
index.wait_task(2).await;
let (task, _) = index.get_task(2).await;
assert_json_snapshot!(task,
{ ".duration" => "[duration]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]" },
@r###"
{
"uid": 2,
"indexUid": "test",
"status": "failed",
"type": "documentDeletion",
"canceledBy": null,
"details": {
"providedIds": 0,
"deletedDocuments": 0,
"originalFilter": "\"doggo = bernese\""
},
"error": {
"message": "Attribute `doggo` is not filterable. This index does not have configured filterable attributes.\n1:6 doggo = bernese",
"code": "invalid_document_filter",
"type": "invalid_request",
"link": "https://docs.meilisearch.com/errors#invalid_document_filter"
},
"duration": "[duration]",
"enqueuedAt": "[date]",
"startedAt": "[date]",
"finishedAt": "[date]"
}
"###);
index.update_settings(json!({ "filterableAttributes": ["doggo"] })).await;
index.delete_document_by_filter(json!({ "filter": "doggo = bernese" })).await;
index.wait_task(4).await;
let (task, _) = index.get_task(4).await;
assert_json_snapshot!(task,
{ ".duration" => "[duration]", ".enqueuedAt" => "[date]", ".startedAt" => "[date]", ".finishedAt" => "[date]" },
@r###"
{
"uid": 4,
"indexUid": "test",
"status": "succeeded",
"type": "documentDeletion",
"canceledBy": null,
"details": {
"providedIds": 0,
"deletedDocuments": 0,
"originalFilter": "\"doggo = bernese\""
},
"error": null,
"duration": "[duration]",
"enqueuedAt": "[date]",
"startedAt": "[date]",
"finishedAt": "[date]"
}
"###);
}
#[actix_web::test]
async fn test_summarized_delete_document_by_id() {
let server = Server::new().await; let server = Server::new().await;
let index = server.index("test"); let index = server.index("test");
index.delete_document(1).await; index.delete_document(1).await;
@ -489,7 +584,8 @@ async fn test_summarized_delete_document() {
"canceledBy": null, "canceledBy": null,
"details": { "details": {
"providedIds": 1, "providedIds": 1,
"deletedDocuments": 0 "deletedDocuments": 0,
"originalFilter": null
}, },
"error": { "error": {
"message": "Index `test` not found.", "message": "Index `test` not found.",
@ -519,7 +615,8 @@ async fn test_summarized_delete_document() {
"canceledBy": null, "canceledBy": null,
"details": { "details": {
"providedIds": 1, "providedIds": 1,
"deletedDocuments": 0 "deletedDocuments": 0,
"originalFilter": null
}, },
"error": null, "error": null,
"duration": "[duration]", "duration": "[duration]",