diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 3f0e8d99568..82902971868 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -30,3 +30,4 @@ f00f4fe6ed5e22cdd2e3f68370c2da96e6bbc8e7 f6aab9d10212756b1d71a0568c706a9df51c322d 4822581aeff072b7649c7aec56a13a95bd58c249 eb09ce06943ccb460981afaa6b5ecfd54f8f87e2 +4e64347e48610b8128ca737ccdb24634a92bbe34 diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/ProductSearchFacetResultDeserializer.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/ProductSearchFacetResultDeserializer.java index 289b38ef3c1..ce9d6eccd80 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/ProductSearchFacetResultDeserializer.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/ProductSearchFacetResultDeserializer.java @@ -3,10 +3,7 @@ import java.util.List; -import com.commercetools.api.models.product_search.ProductSearchFacetResult; -import com.commercetools.api.models.product_search.ProductSearchFacetResultBucket; -import com.commercetools.api.models.product_search.ProductSearchFacetResultBucketEntry; -import com.commercetools.api.models.product_search.ProductSearchFacetResultCount; +import com.commercetools.api.models.product_search.*; import tools.jackson.core.JsonParser; import tools.jackson.core.type.TypeReference; @@ -36,6 +33,16 @@ else if (node.has("value")) { .value(node.get("value").asLong()) .build(); } + else if (node.has("count") || node.has("min")) { + return ProductSearchFacetResultStats.builder() + .name(node.get("name").asString()) + .count(node.get("count").asLong()) + .max(node.get("max").asDouble()) + .min(node.get("min").asDouble()) + .mean(node.get("mean").asDouble()) + .sum(node.get("sum").asDouble()) + .build(); + } return ProductSearchFacetResult.builder().name(node.get("name").asString()).build(); } } diff --git a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/SearchTest.java b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/SearchTest.java index bec722a8171..8934c1ed9ab 100644 --- a/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/SearchTest.java +++ b/commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/SearchTest.java @@ -10,6 +10,9 @@ import com.commercetools.api.client.ByProjectKeyRequestBuilder; import com.commercetools.api.defaultconfig.ApiRootBuilder; import com.commercetools.api.models.product.*; +import com.commercetools.api.models.product_search.ProductPagedSearchResponse; +import com.commercetools.api.models.product_search.ProductSearchFacetResult; +import com.commercetools.api.models.product_search.ProductSearchFacetResultStats; import io.vrap.rmf.base.client.ApiHttpClient; import io.vrap.rmf.base.client.ApiHttpHeaders; @@ -156,4 +159,35 @@ public void testFacetResultsAccessor() { Assertions.assertThat(((TermFacetResult) prices).getTerms().size()).isEqualTo(3); Assertions.assertThat(((TermFacetResult) prices).getTerms().get(0).getTerm()).isEqualTo("S"); } + + @Test + public void testStatsFacetResultsDeserialization() { + ProductPagedSearchResponse response = JsonUtils.fromJsonString( + stringFromResource("search_stats_facet_response.json"), ProductPagedSearchResponse.class); + + ProductSearchFacetResult facet = response.getFacets().get(0); + Assertions.assertThat(facet).isInstanceOf(ProductSearchFacetResultStats.class); + + ProductSearchFacetResultStats statsFacet = (ProductSearchFacetResultStats) facet; + Assertions.assertThat(statsFacet.getName()).isEqualTo("price"); + Assertions.assertThat(statsFacet.getCount()).isEqualTo(42L); + Assertions.assertThat(statsFacet.getMin()).isEqualTo(1000.); + Assertions.assertThat(statsFacet.getMax()).isEqualTo(50000.); + Assertions.assertThat(statsFacet.getMean()).isEqualTo(15000.5); + Assertions.assertThat(statsFacet.getSum()).isEqualTo(1500050.); + + response = JsonUtils.fromJsonString(stringFromResource("search_stats_facet_response_1.json"), + ProductPagedSearchResponse.class); + + facet = response.getFacets().get(0); + Assertions.assertThat(facet).isInstanceOf(ProductSearchFacetResultStats.class); + + statsFacet = (ProductSearchFacetResultStats) facet; + Assertions.assertThat(statsFacet.getName()).isEqualTo("price"); + Assertions.assertThat(statsFacet.getCount()).isEqualTo(859016); + Assertions.assertThat(statsFacet.getMin()).isEqualTo(199.0); + Assertions.assertThat(statsFacet.getMax()).isEqualTo(3599900.0); + Assertions.assertThat(statsFacet.getMean()).isEqualTo(233019.64729760564); + Assertions.assertThat(statsFacet.getSum()).isEqualTo(2.00167605343E11); + } } diff --git a/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response.json b/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response.json new file mode 100644 index 00000000000..b7c7bafe988 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response.json @@ -0,0 +1,16 @@ +{ + "total": 1, + "offset": 0, + "limit": 10, + "facets": [ + { + "name": "price", + "count": 42, + "min": 1000, + "max": 50000, + "mean": 15000.5, + "sum": 1500050 + } + ], + "results": [] +} diff --git a/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response_1.json b/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response_1.json new file mode 100644 index 00000000000..9d1269e99c5 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/test/resources/search_stats_facet_response_1.json @@ -0,0 +1,17 @@ +{ + "total": 1, + "offset": 0, + "limit": 10, + "facets": [ + { + "name": "price", + "min": 199.0, + "max": 3599900.0, + "mean": 233019.64729760564, + "sum": 2.00167605343E11, + "count": 859016 + } + ], + "results": [] +} +