From 19ab49a3202a4ad26daff6ecfaa28036fb56a4c2 Mon Sep 17 00:00:00 2001 From: mudaafi Date: Thu, 12 Jun 2025 13:58:52 +0800 Subject: [PATCH 1/3] expose is_slotted in Search/Browse responses --- .../java/io/constructor/client/models/Result.java | 14 ++++++++++++++ .../io/constructor/client/BrowseResponseTest.java | 14 ++++++++++++++ .../io/constructor/client/SearchResponseTest.java | 14 ++++++++++++++ .../test/resources/response.browse.color.blue.json | 2 +- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/constructorio-client/src/main/java/io/constructor/client/models/Result.java b/constructorio-client/src/main/java/io/constructor/client/models/Result.java index 0c3b807b..defe1518 100644 --- a/constructorio-client/src/main/java/io/constructor/client/models/Result.java +++ b/constructorio-client/src/main/java/io/constructor/client/models/Result.java @@ -22,6 +22,9 @@ public class Result { @SerializedName("variations_map") private Object variationsMap; + @SerializedName("is_slotted") + private boolean isSlotted; + @SerializedName("labels") private Map labels; @@ -77,6 +80,13 @@ public Map getStrategy() { return strategy; } + /** + * @return isSlotted boolean + */ + public boolean getIsSlotted() { + return isSlotted; + } + public void setValue(String value) { this.value = value; } @@ -104,4 +114,8 @@ public void setLabels(Map labels) { public void setStrategy(Map strategy) { this.strategy = strategy; } + + public void setIsBoolean(boolean isSlotted) { + this.isSlotted = isSlotted; + } } diff --git a/constructorio-client/src/test/java/io/constructor/client/BrowseResponseTest.java b/constructorio-client/src/test/java/io/constructor/client/BrowseResponseTest.java index 8068f006..3774e812 100644 --- a/constructorio-client/src/test/java/io/constructor/client/BrowseResponseTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/BrowseResponseTest.java @@ -286,4 +286,18 @@ public void createBrowseResponseShouldReturnAResultWithLabels() throws Exception .get("display_name"), "New Arrival"); } + + @Test + public void createBrowseResponseShouldReturnAResultWithIsSlotted() throws Exception { + String string = Utils.getTestResource("response.browse.color.blue.json"); + BrowseResponse response = ConstructorIO.createBrowseResponse(string); + assertEquals( + "search result [labels] exists", + response.getResponse().getResults().get(0).getIsSlotted(), + true); + assertEquals( + "search result [labels] exists", + response.getResponse().getResults().get(1).getIsSlotted(), + false); + } } diff --git a/constructorio-client/src/test/java/io/constructor/client/SearchResponseTest.java b/constructorio-client/src/test/java/io/constructor/client/SearchResponseTest.java index 96d2fde0..b757c633 100644 --- a/constructorio-client/src/test/java/io/constructor/client/SearchResponseTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/SearchResponseTest.java @@ -262,4 +262,18 @@ public void createSearchResponseShouldReturnAResultWithLabels() throws Exception .get("display_name"), "New Arrival"); } + + @Test + public void createSearchResponseShouldReturnAResultWithIsSlotted() throws Exception { + String string = Utils.getTestResource("response.search.item.json"); + SearchResponse response = ConstructorIO.createSearchResponse(string); + assertEquals( + "search result [isSlotted] exists", + response.getResponse().getResults().get(0).getIsSlotted(), + true); + assertEquals( + "search result [isSlotted] exists", + response.getResponse().getResults().get(1).getIsSlotted(), + false); + } } diff --git a/constructorio-client/src/test/resources/response.browse.color.blue.json b/constructorio-client/src/test/resources/response.browse.color.blue.json index 380b8094..f53d79fb 100644 --- a/constructorio-client/src/test/resources/response.browse.color.blue.json +++ b/constructorio-client/src/test/resources/response.browse.color.blue.json @@ -1051,7 +1051,7 @@ "url": "https://demo.commercetools.com/en/aspesi-coat-I502997385098-blue.html", "variation_id": "M0E20000000ECTT" }, - "is_slotted": false, + "is_slotted": true, "matched_terms": [], "value": "Coat Aspesi blue", "variations": [{ From dd8e86e0d40fa897c83c995b4e29e56e23cdbdcf Mon Sep 17 00:00:00 2001 From: mudaafi Date: Thu, 12 Jun 2025 14:26:41 +0800 Subject: [PATCH 2/3] fix tests --- .../constructor/client/ConstructorIOAutocompleteTest.java | 4 ++-- .../java/io/constructor/client/ConstructorIOBrowseTest.java | 2 +- .../java/io/constructor/client/ConstructorIOSearchTest.java | 6 +++--- .../src/test/java/io/constructor/client/FiltersTest.java | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java index 267694c1..17f81b6e 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java @@ -171,7 +171,7 @@ public void autocompleteShouldReturnAResultWithOneFilter() throws Exception { public void autocompleteShouldReturnAResultWithMultipleFilters() throws Exception { ConstructorIO constructor = new ConstructorIO("", apiKey, true, null); UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie"); - AutocompleteRequest request = new AutocompleteRequest("item1"); + AutocompleteRequest request = new AutocompleteRequest("item2"); request.getFilters().put("group_id", Arrays.asList("All")); request.getFilters().put("Brand", Arrays.asList("XYZ")); AutocompleteResponse response = constructor.autocomplete(request, userInfo); @@ -224,7 +224,7 @@ public void AutocompleteShouldReturnAResultProvidedVariationsMapAsArray() throws variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"value\":\"Best Brand\"}}]}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); request.setVariationsMap(variationsMap); AutocompleteResponse response = constructor.autocomplete(request, userInfo); diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java index c9319cd1..a6164e95 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java @@ -368,7 +368,7 @@ public void BrowseShouldReturnAResultProvidedVariationsMapAsArray() throws Excep variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"value\":\"Best Brand\"}}]}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); request.setVariationsMap(variationsMap); BrowseResponse response = constructor.browse(request, userInfo); diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java index 19e3fb49..bb729c40 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java @@ -100,8 +100,8 @@ public void SearchShouldReturnAResultWithGroupId() throws Exception { public void SearchShouldReturnAResultWithColorFacets() throws Exception { ConstructorIO constructor = new ConstructorIO("", apiKey, true, null); UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie"); - SearchRequest request = new SearchRequest("item1"); - request.getFacets().put("Color", Arrays.asList("Blue")); + SearchRequest request = new SearchRequest("item2"); + request.getFacets().put("Color", Arrays.asList("yellow")); SearchResponse response = constructor.search(request, userInfo); assertEquals("search results exist", response.getResponse().getResults().size(), 1); assertEquals( @@ -359,7 +359,7 @@ public void SearchShouldReturnAResultProvidedVariationsMapAsArray() throws Excep variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"value\":\"Best Brand\"}}]}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); System.out.println(variationsMap.getFilterBy()); request.setVariationsMap(variationsMap); SearchResponse response = constructor.search(request, userInfo); diff --git a/constructorio-client/src/test/java/io/constructor/client/FiltersTest.java b/constructorio-client/src/test/java/io/constructor/client/FiltersTest.java index 3ed76531..aa580211 100644 --- a/constructorio-client/src/test/java/io/constructor/client/FiltersTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/FiltersTest.java @@ -65,7 +65,7 @@ public void hierarchicalFacet() throws Exception { assertEquals(facet.getName(), "Size"); assertEquals(facet.getType(), "hierarchical"); assertEquals(facet.getOptions().get(0).getValue(), "Mens"); - assertEquals(facet.getOptions().get(0).getOptions().get(0), "Mens/Small"); + assertEquals(facet.getOptions().get(0).getOptions().get(0).getValue(), "Mens/Small"); assertNull(facet.getMax()); assertNull(facet.getMin()); assertNull(facet.getStatus()); From ed3d1a9a9cab702b21b1d65db734d843fdc33c99 Mon Sep 17 00:00:00 2001 From: mudaafi Date: Thu, 12 Jun 2025 14:36:26 +0800 Subject: [PATCH 3/3] lint --- .../src/main/java/io/constructor/client/models/Result.java | 2 +- .../io/constructor/client/ConstructorIOAutocompleteTest.java | 3 ++- .../java/io/constructor/client/ConstructorIOBrowseTest.java | 3 ++- .../java/io/constructor/client/ConstructorIOSearchTest.java | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/constructorio-client/src/main/java/io/constructor/client/models/Result.java b/constructorio-client/src/main/java/io/constructor/client/models/Result.java index defe1518..ed2ec1e8 100644 --- a/constructorio-client/src/main/java/io/constructor/client/models/Result.java +++ b/constructorio-client/src/main/java/io/constructor/client/models/Result.java @@ -115,7 +115,7 @@ public void setStrategy(Map strategy) { this.strategy = strategy; } - public void setIsBoolean(boolean isSlotted) { + public void setIsSlotted(boolean isSlotted) { this.isSlotted = isSlotted; } } diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java index 17f81b6e..d8cbaea8 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java @@ -224,7 +224,8 @@ public void AutocompleteShouldReturnAResultProvidedVariationsMapAsArray() throws variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best" + + " Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); request.setVariationsMap(variationsMap); AutocompleteResponse response = constructor.autocomplete(request, userInfo); diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java index a6164e95..bbb41a67 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java @@ -368,7 +368,8 @@ public void BrowseShouldReturnAResultProvidedVariationsMapAsArray() throws Excep variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best" + + " Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); request.setVariationsMap(variationsMap); BrowseResponse response = constructor.browse(request, userInfo); diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java index bb729c40..501ab8a8 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java @@ -359,7 +359,8 @@ public void SearchShouldReturnAResultProvidedVariationsMapAsArray() throws Excep variationsMap.addValueRule( "size", VariationsMap.AggregationTypes.first, "data.facets.size"); variationsMap.setFilterBy( - "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); + "{\"and\":[{\"not\":{\"field\":\"data.brand\",\"type\":\"single\",\"value\":\"Best" + + " Brand\"},\"type\":\"not\"}],\"type\":\"and\"}"); System.out.println(variationsMap.getFilterBy()); request.setVariationsMap(variationsMap); SearchResponse response = constructor.search(request, userInfo);