diff --git a/src/main/java/com/meilisearch/sdk/model/Settings.java b/src/main/java/com/meilisearch/sdk/model/Settings.java index 8b74c4d0..ea38e76c 100644 --- a/src/main/java/com/meilisearch/sdk/model/Settings.java +++ b/src/main/java/com/meilisearch/sdk/model/Settings.java @@ -1,5 +1,7 @@ package com.meilisearch.sdk.model; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import lombok.AccessLevel; import lombok.Getter; @@ -42,20 +44,24 @@ public class Settings { public Settings() {} /** Granular filterable attributes accessor. */ + @JsonProperty("filterableAttributes") public FilterableAttributesConfig[] getFilterableAttributesConfig() { return filterableAttributes; } + @JsonProperty("filterableAttributes") public Settings setFilterableAttributesConfig(FilterableAttributesConfig[] configs) { this.filterableAttributes = configs; return this; } /** Legacy String[] view of filterable attributes. */ + @JsonIgnore public String[] getFilterableAttributes() { return FilterableAttributesLegacyAdapter.toLegacyNamesOrThrow(filterableAttributes); } + @JsonIgnore public Settings setFilterableAttributes(String[] filterableAttributes) { this.filterableAttributes = FilterableAttributesLegacyAdapter.fromLegacyNames(filterableAttributes); diff --git a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java index 300662f1..0bd4d73e 100644 --- a/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java +++ b/src/test/java/com/meilisearch/sdk/json/JacksonJsonHandlerTest.java @@ -134,4 +134,44 @@ void settingsWithGranularFilterableAttributesRoundTripWithCustomMapper() throws decoded.getFilterableAttributesConfig()[1].getAttributePatterns()[0], is("director")); } + + @Test + void settingsWithAdvancedGranularFilterableAttributesRoundTripWithCustomMapper() + throws Exception { + ObjectMapper customMapper = new ObjectMapper(); + JacksonJsonHandler handlerWithCustomMapper = new JacksonJsonHandler(customMapper); + + FilterableAttributesFeatures features = new FilterableAttributesFeatures(); + features.setFacetSearch(false); + features.setFilter(new FilterableAttributesFilter(true, false)); + + FilterableAttributesConfig advanced = new FilterableAttributesConfig(); + advanced.setAttributePatterns(new String[] {"parent"}); + advanced.setFeatures(features); + + Settings settings = new Settings(); + settings.setFilterableAttributesConfig(new FilterableAttributesConfig[] {advanced}); + + String json = handlerWithCustomMapper.encode(settings); + + assertThat( + json, + is( + "{\"filterableAttributes\":[{\"attributePatterns\":[\"parent\"],\"features\":{\"facetSearch\":false,\"filter\":{\"equality\":true,\"comparison\":false}}}]}")); + + Settings decoded = handlerWithCustomMapper.decode(json, Settings.class); + + assertThat(decoded.getFilterableAttributesConfig(), is(notNullValue())); + assertThat(decoded.getFilterableAttributesConfig().length, is(1)); + assertThat( + decoded.getFilterableAttributesConfig()[0].getAttributePatterns()[0], is("parent")); + assertThat( + decoded.getFilterableAttributesConfig()[0].getFeatures().getFacetSearch(), is(false)); + assertThat( + decoded.getFilterableAttributesConfig()[0].getFeatures().getFilter().getEquality(), + is(true)); + assertThat( + decoded.getFilterableAttributesConfig()[0].getFeatures().getFilter().getComparison(), + is(false)); + } }