add test for dedicated distinct route

This commit is contained in:
Marin Postma 2021-04-20 12:07:22 +02:00
parent 6c470cf687
commit f8c338e3a7
No known key found for this signature in database
GPG Key ID: D5241F0C0C865F30
5 changed files with 56 additions and 4 deletions

7
Cargo.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -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 [<update_$name>](&self, value: Value) -> (Value, StatusCode) {
let url = format!("/indexes/{}/settings/{}", self.uid, stringify!($name).replace("_", "-"));
self.service.post(url, value).await
}
pub async fn [<get_$name>](&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)]

View File

@ -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));
}

View File

@ -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!([