diff --git a/Cargo.lock b/Cargo.lock index a5baa6d8d..df129df98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1664,6 +1664,7 @@ dependencies = [ "once_cell", "oxidized-json-checker", "parking_lot", + "paste", "rand 0.7.3", "rayon", "regex", @@ -2025,6 +2026,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "paste" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" + [[package]] name = "percent-encoding" version = "2.1.0" diff --git a/meilisearch-http/Cargo.toml b/meilisearch-http/Cargo.toml index e1d46c8e2..8532932e4 100644 --- a/meilisearch-http/Cargo.toml +++ b/meilisearch-http/Cargo.toml @@ -84,6 +84,7 @@ version = "0.18.1" actix-rt = "2.1.0" assert-json-diff = { branch = "master", git = "https://github.com/qdequele/assert-json-diff" } mockall = "0.9.1" +paste = "1.0.5" serde_url_params = "0.2.0" tempdir = "0.3.7" urlencoding = "1.1.1" diff --git a/meilisearch-http/tests/common/index.rs b/meilisearch-http/tests/common/index.rs index 67ea6c19a..aaf108cf6 100644 --- a/meilisearch-http/tests/common/index.rs +++ b/meilisearch-http/tests/common/index.rs @@ -1,16 +1,34 @@ use std::time::Duration; use actix_web::http::StatusCode; +use paste::paste; use serde_json::{json, Value}; use tokio::time::sleep; use super::service::Service; +macro_rules! make_settings_test_routes { + ($($name:ident),+) => { + $(paste! { + pub async fn [](&self, value: Value) -> (Value, StatusCode) { + let url = format!("/indexes/{}/settings/{}", self.uid, stringify!($name).replace("_", "-")); + self.service.post(url, value).await + } + + pub async fn [](&self) -> (Value, StatusCode) { + let url = format!("/indexes/{}/settings/{}", self.uid, stringify!($name).replace("_", "-")); + self.service.get(url).await + } + })* + }; +} + pub struct Index<'a> { pub uid: String, pub service: &'a Service, } +#[allow(dead_code)] impl Index<'_> { pub async fn get(&self) -> (Value, StatusCode) { let url = format!("/indexes/{}", self.uid); @@ -166,8 +184,13 @@ impl Index<'_> { let url = format!("/indexes/{}/stats", self.uid); self.service.get(url).await } + + make_settings_test_routes!( + distinct_attribute + ); } + pub struct GetDocumentOptions; #[derive(Debug, Default)] diff --git a/meilisearch-http/tests/settings/distinct.rs b/meilisearch-http/tests/settings/distinct.rs index 852276b99..a3aec6baf 100644 --- a/meilisearch-http/tests/settings/distinct.rs +++ b/meilisearch-http/tests/settings/distinct.rs @@ -1,5 +1,5 @@ use crate::common::Server; -use serde_json::{json, Value}; +use serde_json::json; #[actix_rt::test] async fn set_and_reset_distinct_attribute() { @@ -13,11 +13,32 @@ async fn set_and_reset_distinct_attribute() { assert_eq!(response["distinctAttribute"], "test"); - index.update_settings(json!({ "distinctAttribute": Value::Null })).await; + index.update_settings(json!({ "distinctAttribute": null })).await; index.wait_update_id(1).await; let (response, _) = index.settings().await; - assert_eq!(response["distinctAttribute"], Value::Null); + assert_eq!(response["distinctAttribute"], json!(null)); +} + +#[actix_rt::test] +async fn set_and_reset_distinct_attribute_with_dedicated_route() { + let server = Server::new().await; + let index = server.index("test"); + + let (_response, _code) = index.update_distinct_attribute(json!("test")).await; + index.wait_update_id(0).await; + + let (response, _) = index.get_distinct_attribute().await; + + assert_eq!(response, "test"); + + index.update_distinct_attribute(json!(null)).await; + + index.wait_update_id(1).await; + + let (response, _) = index.get_distinct_attribute().await; + + assert_eq!(response, json!(null)); } diff --git a/meilisearch-http/tests/settings/get_settings.rs b/meilisearch-http/tests/settings/get_settings.rs index 82be6d994..3412f45af 100644 --- a/meilisearch-http/tests/settings/get_settings.rs +++ b/meilisearch-http/tests/settings/get_settings.rs @@ -20,7 +20,7 @@ async fn get_settings() { assert_eq!(settings["displayedAttributes"], json!(["*"])); assert_eq!(settings["searchableAttributes"], json!(["*"])); assert_eq!(settings["attributesForFaceting"], json!({})); - assert_eq!(settings["distinctAttribute"], serde_json::Value::Null); + assert_eq!(settings["distinctAttribute"], json!(null)); assert_eq!( settings["rankingRules"], json!([