diff --git a/meilisearch-error/src/lib.rs b/meilisearch-error/src/lib.rs index 41a58b9f5..3a3e2229a 100644 --- a/meilisearch-error/src/lib.rs +++ b/meilisearch-error/src/lib.rs @@ -39,9 +39,9 @@ impl fmt::Display for ErrorType { use ErrorType::*; match self { - InternalError => write!(f, "internal_error"), - InvalidRequestError => write!(f, "invalid_request_error"), - AuthenticationError => write!(f, "authentication_error"), + InternalError => write!(f, "internal"), + InvalidRequestError => write!(f, "invalid_request"), + AuthenticationError => write!(f, "authentication"), } } } diff --git a/meilisearch-http/src/error.rs b/meilisearch-http/src/error.rs index 1f2f4742d..c3c8d5785 100644 --- a/meilisearch-http/src/error.rs +++ b/meilisearch-http/src/error.rs @@ -42,8 +42,11 @@ pub struct ResponseError { #[serde(skip)] code: StatusCode, message: String, + #[serde(rename = "code")] error_code: String, + #[serde(rename = "type")] error_type: String, + #[serde(rename = "link")] error_link: String, } diff --git a/meilisearch-http/tests/documents/add_documents.rs b/meilisearch-http/tests/documents/add_documents.rs index 308b41e10..14f5c6dee 100644 --- a/meilisearch-http/tests/documents/add_documents.rs +++ b/meilisearch-http/tests/documents/add_documents.rs @@ -194,7 +194,7 @@ async fn error_add_malformed_csv_documents() { let req = test::TestRequest::post() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "text/csv")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -203,20 +203,22 @@ async fn error_add_malformed_csv_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The csv payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The csv payload provided is malformed. CSV error: record 1 (line: 2, byte: 12): found record with 3 fields, but the previous record has 2 fields."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); // put let req = test::TestRequest::put() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "text/csv")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -225,13 +227,15 @@ async fn error_add_malformed_csv_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The csv payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The csv payload provided is malformed. CSV error: record 1 (line: 2, byte: 12): found record with 3 fields, but the previous record has 2 fields."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); } @@ -250,7 +254,7 @@ async fn error_add_malformed_json_documents() { let req = test::TestRequest::post() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "application/json")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -259,20 +263,22 @@ async fn error_add_malformed_json_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The json payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The json payload provided is malformed. key must be a string at line 1 column 14."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); // put let req = test::TestRequest::put() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "application/json")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -281,13 +287,15 @@ async fn error_add_malformed_json_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The json payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The json payload provided is malformed. key must be a string at line 1 column 14."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); } @@ -306,7 +314,7 @@ async fn error_add_malformed_ndjson_documents() { let req = test::TestRequest::post() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "application/x-ndjson")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -315,20 +323,22 @@ async fn error_add_malformed_ndjson_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The ndjson payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The ndjson payload provided is malformed. key must be a string at line 2 column 2."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); // put let req = test::TestRequest::put() .uri("/indexes/dog/documents") .set_payload(document.to_string()) - .insert_header(("content-type", "text/plain")) + .insert_header(("content-type", "application/x-ndjson")) .to_request(); let res = test::call_service(&app, req).await; let status_code = res.status(); @@ -337,13 +347,15 @@ async fn error_add_malformed_ndjson_documents() { assert_eq!(status_code, 400); assert_eq!( response["message"], - json!(r#"The ndjson payload provided is malformed. :syntaxErrorHelper."#) + json!( + r#"The ndjson payload provided is malformed. key must be a string at line 2 column 2."# + ) ); - assert_eq!(response["code"], "malformed_payload"); - assert_eq!(response["type"], "invalid_request"); + assert_eq!(response["code"], json!("malformed_payload")); + assert_eq!(response["type"], json!("invalid_request")); assert_eq!( response["link"], - "https://docs.meilisearch.com/errors#malformed_payload" + json!("https://docs.meilisearch.com/errors#malformed_payload") ); } diff --git a/meilisearch-lib/src/document_formats.rs b/meilisearch-lib/src/document_formats.rs index 781ab63a0..1d965d260 100644 --- a/meilisearch-lib/src/document_formats.rs +++ b/meilisearch-lib/src/document_formats.rs @@ -27,7 +27,7 @@ impl fmt::Display for PayloadType { pub enum DocumentFormatError { #[error("Internal error: {0}")] Internal(Box), - #[error("{0}. The {1} payload provided is malformed.")] + #[error("The {1} payload provided is malformed. {0}.")] MalformedPayload( Box, PayloadType,