diff --git a/meilisearch-http/tests/documents/add_documents.rs b/meilisearch-http/tests/documents/add_documents.rs index 8e6ba44a9..f2126e6b4 100644 --- a/meilisearch-http/tests/documents/add_documents.rs +++ b/meilisearch-http/tests/documents/add_documents.rs @@ -690,23 +690,6 @@ async fn error_document_add_create_index_bad_uid() { assert_eq!(response, expected_response); } -#[actix_rt::test] -async fn error_document_update_create_index_bad_uid() { - let server = Server::new().await; - let index = server.index("883 fj!"); - let (response, code) = index.update_documents(json!([{"id": 1}]), None).await; - - let expected_response = json!({ - "message": "invalid index uid `883 fj!`, the uid must be an integer or a string containing only alphanumeric characters a-z A-Z 0-9, hyphens - and underscores _.", - "code": "invalid_index_uid", - "type": "invalid_request", - "link": "https://docs.meilisearch.com/errors#invalid_index_uid" - }); - - assert_eq!(code, 400); - assert_eq!(response, expected_response); -} - #[actix_rt::test] async fn document_addition_with_primary_key() { let server = Server::new().await; @@ -736,35 +719,6 @@ async fn document_addition_with_primary_key() { assert_eq!(response["primaryKey"], "primary"); } -#[actix_rt::test] -async fn document_update_with_primary_key() { - let server = Server::new().await; - let index = server.index("test"); - - let documents = json!([ - { - "primary": 1, - "content": "foo", - } - ]); - let (_response, code) = index.update_documents(documents, Some("primary")).await; - assert_eq!(code, 202); - - index.wait_task(0).await; - - let (response, code) = index.get_task(0).await; - assert_eq!(code, 200); - assert_eq!(response["status"], "succeeded"); - assert_eq!(response["uid"], 0); - assert_eq!(response["type"], "documentAdditionOrUpdate"); - assert_eq!(response["details"]["indexedDocuments"], 1); - assert_eq!(response["details"]["receivedDocuments"], 1); - - let (response, code) = index.get().await; - assert_eq!(code, 200); - assert_eq!(response["primaryKey"], "primary"); -} - #[actix_rt::test] async fn replace_document() { let server = Server::new().await; @@ -811,47 +765,6 @@ async fn add_no_documents() { assert_eq!(code, 202); } -#[actix_rt::test] -async fn update_document() { - let server = Server::new().await; - let index = server.index("test"); - - let documents = json!([ - { - "doc_id": 1, - "content": "foo", - } - ]); - - let (_response, code) = index.add_documents(documents, None).await; - assert_eq!(code, 202); - - index.wait_task(0).await; - - let documents = json!([ - { - "doc_id": 1, - "other": "bar", - } - ]); - - let (response, code) = index.update_documents(documents, None).await; - assert_eq!(code, 202, "response: {}", response); - - index.wait_task(1).await; - - let (response, code) = index.get_task(1).await; - assert_eq!(code, 200); - assert_eq!(response["status"], "succeeded"); - - let (response, code) = index.get_document(1, None).await; - assert_eq!(code, 200); - assert_eq!( - response.to_string(), - r##"{"doc_id":1,"content":"foo","other":"bar"}"## - ); -} - #[actix_rt::test] async fn add_larger_dataset() { let server = Server::new().await; @@ -873,27 +786,6 @@ async fn add_larger_dataset() { assert_eq!(response["results"].as_array().unwrap().len(), 77); } -#[actix_rt::test] -async fn update_larger_dataset() { - let server = Server::new().await; - let index = server.index("test"); - let documents = serde_json::from_str(include_str!("../assets/test_set.json")).unwrap(); - index.update_documents(documents, None).await; - index.wait_task(0).await; - let (response, code) = index.get_task(0).await; - assert_eq!(code, 200); - assert_eq!(response["type"], "documentAdditionOrUpdate"); - assert_eq!(response["details"]["indexedDocuments"], 77); - let (response, code) = index - .get_all_documents(GetAllDocumentsOptions { - limit: Some(1000), - ..Default::default() - }) - .await; - assert_eq!(code, 200); - assert_eq!(response["results"].as_array().unwrap().len(), 77); -} - #[actix_rt::test] async fn error_add_documents_bad_document_id() { let server = Server::new().await; @@ -924,34 +816,6 @@ async fn error_add_documents_bad_document_id() { ); } -#[actix_rt::test] -async fn error_update_documents_bad_document_id() { - let server = Server::new().await; - let index = server.index("test"); - index.create(Some("docid")).await; - let documents = json!([ - { - "docid": "foo & bar", - "content": "foobar" - } - ]); - index.update_documents(documents, None).await; - let response = index.wait_task(1).await; - assert_eq!(response["status"], json!("failed")); - assert_eq!( - response["error"]["message"], - json!( - r#"Document identifier `"foo & bar"` is invalid. A document identifier can be of type integer or string, only composed of alphanumeric characters (a-z A-Z 0-9), hyphens (-) and underscores (_)."# - ) - ); - assert_eq!(response["error"]["code"], json!("invalid_document_id")); - assert_eq!(response["error"]["type"], json!("invalid_request")); - assert_eq!( - response["error"]["link"], - json!("https://docs.meilisearch.com/errors#invalid_document_id") - ); -} - #[actix_rt::test] async fn error_add_documents_missing_document_id() { let server = Server::new().await; @@ -980,32 +844,6 @@ async fn error_add_documents_missing_document_id() { ); } -#[actix_rt::test] -async fn error_update_documents_missing_document_id() { - let server = Server::new().await; - let index = server.index("test"); - index.create(Some("docid")).await; - let documents = json!([ - { - "id": "11", - "content": "foobar" - } - ]); - index.update_documents(documents, None).await; - let response = index.wait_task(1).await; - assert_eq!(response["status"], "failed"); - assert_eq!( - response["error"]["message"], - r#"Document doesn't have a `docid` attribute: `{"id":"11","content":"foobar"}`."# - ); - assert_eq!(response["error"]["code"], "missing_document_id"); - assert_eq!(response["error"]["type"], "invalid_request"); - assert_eq!( - response["error"]["link"], - "https://docs.meilisearch.com/errors#missing_document_id" - ); -} - #[actix_rt::test] #[ignore] // // TODO: Fix in an other PR: this does not provoke any error. async fn error_document_field_limit_reached() { diff --git a/meilisearch-http/tests/documents/mod.rs b/meilisearch-http/tests/documents/mod.rs index a791a596f..794b57c3a 100644 --- a/meilisearch-http/tests/documents/mod.rs +++ b/meilisearch-http/tests/documents/mod.rs @@ -1,3 +1,4 @@ mod add_documents; mod delete_documents; mod get_documents; +mod update_documents; diff --git a/meilisearch-http/tests/documents/update_documents.rs b/meilisearch-http/tests/documents/update_documents.rs new file mode 100644 index 000000000..d3d56b444 --- /dev/null +++ b/meilisearch-http/tests/documents/update_documents.rs @@ -0,0 +1,165 @@ +use crate::common::{GetAllDocumentsOptions, Server}; + +use serde_json::json; + +#[actix_rt::test] +async fn error_document_update_create_index_bad_uid() { + let server = Server::new().await; + let index = server.index("883 fj!"); + let (response, code) = index.update_documents(json!([{"id": 1}]), None).await; + + let expected_response = json!({ + "message": "invalid index uid `883 fj!`, the uid must be an integer or a string containing only alphanumeric characters a-z A-Z 0-9, hyphens - and underscores _.", + "code": "invalid_index_uid", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_index_uid" + }); + + assert_eq!(code, 400); + assert_eq!(response, expected_response); +} + +#[actix_rt::test] +async fn document_update_with_primary_key() { + let server = Server::new().await; + let index = server.index("test"); + + let documents = json!([ + { + "primary": 1, + "content": "foo", + } + ]); + let (_response, code) = index.update_documents(documents, Some("primary")).await; + assert_eq!(code, 202); + + index.wait_task(0).await; + + let (response, code) = index.get_task(0).await; + assert_eq!(code, 200); + assert_eq!(response["status"], "succeeded"); + assert_eq!(response["uid"], 0); + assert_eq!(response["type"], "documentAdditionOrUpdate"); + assert_eq!(response["details"]["indexedDocuments"], 1); + assert_eq!(response["details"]["receivedDocuments"], 1); + + let (response, code) = index.get().await; + assert_eq!(code, 200); + assert_eq!(response["primaryKey"], "primary"); +} + +#[actix_rt::test] +async fn update_document() { + let server = Server::new().await; + let index = server.index("test"); + + let documents = json!([ + { + "doc_id": 1, + "content": "foo", + } + ]); + + let (_response, code) = index.add_documents(documents, None).await; + assert_eq!(code, 202); + + index.wait_task(0).await; + + let documents = json!([ + { + "doc_id": 1, + "other": "bar", + } + ]); + + let (response, code) = index.update_documents(documents, None).await; + assert_eq!(code, 202, "response: {}", response); + + index.wait_task(1).await; + + let (response, code) = index.get_task(1).await; + assert_eq!(code, 200); + assert_eq!(response["status"], "succeeded"); + + let (response, code) = index.get_document(1, None).await; + assert_eq!(code, 200); + assert_eq!( + response.to_string(), + r##"{"doc_id":1,"content":"foo","other":"bar"}"## + ); +} + +#[actix_rt::test] +async fn update_larger_dataset() { + let server = Server::new().await; + let index = server.index("test"); + let documents = serde_json::from_str(include_str!("../assets/test_set.json")).unwrap(); + index.update_documents(documents, None).await; + index.wait_task(0).await; + let (response, code) = index.get_task(0).await; + assert_eq!(code, 200); + assert_eq!(response["type"], "documentAdditionOrUpdate"); + assert_eq!(response["details"]["indexedDocuments"], 77); + let (response, code) = index + .get_all_documents(GetAllDocumentsOptions { + limit: Some(1000), + ..Default::default() + }) + .await; + assert_eq!(code, 200); + assert_eq!(response["results"].as_array().unwrap().len(), 77); +} + +#[actix_rt::test] +async fn error_update_documents_bad_document_id() { + let server = Server::new().await; + let index = server.index("test"); + index.create(Some("docid")).await; + let documents = json!([ + { + "docid": "foo & bar", + "content": "foobar" + } + ]); + index.update_documents(documents, None).await; + let response = index.wait_task(1).await; + assert_eq!(response["status"], json!("failed")); + assert_eq!( + response["error"]["message"], + json!( + r#"Document identifier `"foo & bar"` is invalid. A document identifier can be of type integer or string, only composed of alphanumeric characters (a-z A-Z 0-9), hyphens (-) and underscores (_)."# + ) + ); + assert_eq!(response["error"]["code"], json!("invalid_document_id")); + assert_eq!(response["error"]["type"], json!("invalid_request")); + assert_eq!( + response["error"]["link"], + json!("https://docs.meilisearch.com/errors#invalid_document_id") + ); +} + +#[actix_rt::test] +async fn error_update_documents_missing_document_id() { + let server = Server::new().await; + let index = server.index("test"); + index.create(Some("docid")).await; + let documents = json!([ + { + "id": "11", + "content": "foobar" + } + ]); + index.update_documents(documents, None).await; + let response = index.wait_task(1).await; + assert_eq!(response["status"], "failed"); + assert_eq!( + response["error"]["message"], + r#"Document doesn't have a `docid` attribute: `{"id":"11","content":"foobar"}`."# + ); + assert_eq!(response["error"]["code"], "missing_document_id"); + assert_eq!(response["error"]["type"], "invalid_request"); + assert_eq!( + response["error"]["link"], + "https://docs.meilisearch.com/errors#missing_document_id" + ); +}