diff --git a/meilisearch/tests/search/errors.rs b/meilisearch/tests/search/errors.rs index 3d34de0fd..0745aa7d6 100644 --- a/meilisearch/tests/search/errors.rs +++ b/meilisearch/tests/search/errors.rs @@ -968,9 +968,12 @@ async fn sort_unset_ranking_rule() { async fn search_on_unknown_field() { let server = Server::new().await; let index = server.index("test"); + index.update_settings_searchable_attributes(json!(["id", "title"])).await; + index.wait_task(0).await; + let documents = DOCUMENTS.clone(); index.add_documents(documents, None).await; - index.wait_task(0).await; + index.wait_task(1).await; index .search( @@ -989,3 +992,49 @@ async fn search_on_unknown_field() { ) .await; } + +#[actix_rt::test] +async fn search_on_unknown_field_plus_joker() { + let server = Server::new().await; + let index = server.index("test"); + index.update_settings_searchable_attributes(json!(["id", "title"])).await; + index.wait_task(0).await; + + let documents = DOCUMENTS.clone(); + index.add_documents(documents, None).await; + index.wait_task(1).await; + + index + .search( + json!({"q": "Captain Marvel", "attributesToSearchOn": ["*", "unknown"]}), + |response, code| { + snapshot!(code, @"400 Bad Request"); + snapshot!(json_string!(response), @r###" + { + "message": "Attribute `unknown` is not searchable. Available searchable attributes are: `id, title`.", + "code": "invalid_search_attributes_to_search_on", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_search_attributes_to_search_on" + } + "###); + }, + ) + .await; + + index + .search( + json!({"q": "Captain Marvel", "attributesToSearchOn": ["unknown", "*"]}), + |response, code| { + snapshot!(code, @"400 Bad Request"); + snapshot!(json_string!(response), @r###" + { + "message": "Attribute `unknown` is not searchable. Available searchable attributes are: `id, title`.", + "code": "invalid_search_attributes_to_search_on", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_search_attributes_to_search_on" + } + "###); + }, + ) + .await; +} diff --git a/meilisearch/tests/search/restrict_searchable.rs b/meilisearch/tests/search/restrict_searchable.rs index f119acea5..6e41c5c55 100644 --- a/meilisearch/tests/search/restrict_searchable.rs +++ b/meilisearch/tests/search/restrict_searchable.rs @@ -49,6 +49,76 @@ async fn simple_search_on_title() { .await; } +#[actix_rt::test] +async fn search_no_searchable_attribute_set() { + let server = Server::new().await; + let index = index_with_documents(&server, &SIMPLE_SEARCH_DOCUMENTS).await; + + index + .search( + json!({"q": "Captain Marvel", "attributesToSearchOn": ["unknown"]}), + |response, code| { + snapshot!(code, @"200 OK"); + snapshot!(response["hits"].as_array().unwrap().len(), @"0"); + }, + ) + .await; + + index.update_settings_searchable_attributes(json!(["*"])).await; + index.wait_task(1).await; + + index + .search( + json!({"q": "Captain Marvel", "attributesToSearchOn": ["unknown"]}), + |response, code| { + snapshot!(code, @"200 OK"); + snapshot!(response["hits"].as_array().unwrap().len(), @"0"); + }, + ) + .await; + + index.update_settings_searchable_attributes(json!(["description", "*", "title"])).await; + index.wait_task(2).await; + + index + .search( + json!({"q": "Captain Marvel", "attributesToSearchOn": ["unknown"]}), + |response, code| { + snapshot!(code, @"200 OK"); + snapshot!(response["hits"].as_array().unwrap().len(), @"0"); + }, + ) + .await; +} + +#[actix_rt::test] +async fn search_on_all_attributes() { + let server = Server::new().await; + let index = index_with_documents(&server, &SIMPLE_SEARCH_DOCUMENTS).await; + + index + .search(json!({"q": "Captain Marvel", "attributesToSearchOn": ["*"]}), |response, code| { + snapshot!(code, @"200 OK"); + snapshot!(response["hits"].as_array().unwrap().len(), @"3"); + }) + .await; +} + +#[actix_rt::test] +async fn search_on_all_attributes_restricted_set() { + let server = Server::new().await; + let index = index_with_documents(&server, &SIMPLE_SEARCH_DOCUMENTS).await; + index.update_settings_searchable_attributes(json!(["title"])).await; + index.wait_task(1).await; + + index + .search(json!({"q": "Captain Marvel", "attributesToSearchOn": ["*"]}), |response, code| { + snapshot!(code, @"200 OK"); + snapshot!(response["hits"].as_array().unwrap().len(), @"2"); + }) + .await; +} + #[actix_rt::test] async fn simple_prefix_search_on_title() { let server = Server::new().await;