Skip to content

Commit 4f81549

Browse files
authored
[CSL 990] Add support for hidden facets (#76)
* Add support for hidden facets and add tests * Update README * Remove print statements
1 parent a6702d4 commit 4f81549

File tree

11 files changed

+161
-6
lines changed

11 files changed

+161
-6
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ request.setSortBy("Price");
128128
request.setSortAscending(true);
129129
request.getFacets().put("Brand", Arrays.asList("Jif"))
130130

131+
// Add the following paramaters to request for hidden fields or facets
132+
request.getHiddenFields().add("hidden_price_field");
133+
request.getHiddenFacets().add("hidden_brand_facet");
134+
131135
// Create a UserInfo object with the session and unique device identifier (optional)
132136
UserInfo userInfo = new UserInfo(5, "device-id-1123123");
133137
userInfo.setUserSegments(Arrays.asList("Desktop", "Chrome"));
@@ -205,6 +209,10 @@ request.setSortBy("Price");
205209
request.setSortAscending(true);
206210
request.getFacets().put("Brand", Arrays.asList("Jif"))
207211

212+
// Add the following paramaters to request for hidden fields or facets
213+
request.getHiddenFields().add("hidden_price_field");
214+
request.getHiddenFacets().add("hidden_brand_facet");
215+
208216
// Create a UserInfo object with the session and unique device identifier (optional)
209217
UserInfo userInfo = new UserInfo(5, "device-id-1123123");
210218
userInfo.setUserSegments(Arrays.asList("Desktop", "Chrome"));
@@ -248,6 +256,10 @@ request.setSortBy("Price");
248256
request.setSortAscending(true);
249257
request.getFacets().put("Brand", Arrays.asList("Jif"))
250258

259+
// Add the following paramaters to request for hidden fields or facets
260+
request.getHiddenFields().add("hidden_price_field");
261+
request.getHiddenFacets().add("hidden_brand_facet");
262+
251263
// Create a UserInfo object with the session and unique device identifier (optional)
252264
UserInfo userInfo = new UserInfo(5, "device-id-1123123");
253265
userInfo.setUserSegments(Arrays.asList("Desktop", "Chrome"));

constructorio-client/src/main/java/io/constructor/client/BrowseItemsRequest.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class BrowseItemsRequest {
2020
private boolean sortAscending;
2121
private Map<String, String>formatOptions;
2222
private List<String> hiddenFields;
23+
private List<String> hiddenFacets;
2324

2425
/**
2526
* Creates a browse request
@@ -39,6 +40,7 @@ public BrowseItemsRequest(List<String> ids) throws IllegalArgumentException {
3940
this.sortAscending = true;
4041
this.formatOptions = new HashMap<String, String>();
4142
this.hiddenFields = new ArrayList<String>();
43+
this.hiddenFacets = new ArrayList<String>();
4244
}
4345

4446
/**
@@ -171,13 +173,27 @@ public Map<String, String> getFormatOptions() {
171173
* @param hiddenFields the hiddenFields to set
172174
*/
173175
public void setHiddenFields(List<String> hiddenFields) {
174-
this.hiddenFields = hiddenFields;
176+
this.hiddenFields = hiddenFields;
175177
}
176178

177179
/**
178180
* @return the hidden fields
179181
*/
180182
public List<String> getHiddenFields() {
181-
return hiddenFields;
183+
return hiddenFields;
184+
}
185+
186+
/**
187+
* @param hiddenFacets the hiddenFacets to set
188+
*/
189+
public void setHiddenFacets(List<String> hiddenFacets) {
190+
this.hiddenFacets = hiddenFacets;
191+
}
192+
193+
/**
194+
* @return the hidden facets
195+
*/
196+
public List<String> getHiddenFacets() {
197+
return hiddenFacets;
182198
}
183199
}

constructorio-client/src/main/java/io/constructor/client/BrowseRequest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class BrowseRequest {
2121
private boolean sortAscending;
2222
private Map<String, String>formatOptions;
2323
private List<String> hiddenFields;
24+
private List<String> hiddenFacets;
2425

2526
/**
2627
* Creates a browse request
@@ -45,6 +46,7 @@ public BrowseRequest(String filterName, String filterValue) throws IllegalArgume
4546
this.sortAscending = true;
4647
this.formatOptions = new HashMap<String, String>();
4748
this.hiddenFields = new ArrayList<String>();
49+
this.hiddenFacets = new ArrayList<String>();
4850
}
4951

5052
/**
@@ -200,4 +202,18 @@ public void setHiddenFields(List<String> hiddenFields) {
200202
public List<String> getHiddenFields() {
201203
return hiddenFields;
202204
}
205+
206+
/**
207+
* @param hiddenFacets the hiddenFacets to set
208+
*/
209+
public void setHiddenFacets(List<String> hiddenFacets) {
210+
this.hiddenFacets = hiddenFacets;
211+
}
212+
213+
/**
214+
* @return the hidden facets
215+
*/
216+
public List<String> getHiddenFacets() {
217+
return hiddenFacets;
218+
}
203219
}

constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,13 @@ protected Request createSearchRequest(SearchRequest req, UserInfo userInfo) thro
490490

491491
for (String hiddenField : req.getHiddenFields()) {
492492
url = url.newBuilder()
493-
.addQueryParameter("hidden_fields", hiddenField)
493+
.addQueryParameter("fmt_options[hidden_fields]", hiddenField)
494+
.build();
495+
}
496+
497+
for (String hiddenFacet : req.getHiddenFacets()) {
498+
url = url.newBuilder()
499+
.addQueryParameter("fmt_options[hidden_facets]", hiddenFacet)
494500
.build();
495501
}
496502

@@ -638,7 +644,13 @@ protected Request createBrowseRequest(BrowseRequest req, UserInfo userInfo) thro
638644

639645
for (String hiddenField : req.getHiddenFields()) {
640646
url = url.newBuilder()
641-
.addQueryParameter("hidden_fields", hiddenField)
647+
.addQueryParameter("fmt_options[hidden_fields]", hiddenField)
648+
.build();
649+
}
650+
651+
for (String hiddenFacet : req.getHiddenFacets()) {
652+
url = url.newBuilder()
653+
.addQueryParameter("fmt_options[hidden_facets]", hiddenFacet)
642654
.build();
643655
}
644656

@@ -793,8 +805,14 @@ protected Request createBrowseItemsRequest(BrowseItemsRequest req, UserInfo user
793805

794806
for (String hiddenField : req.getHiddenFields()) {
795807
url = url.newBuilder()
796-
.addQueryParameter("hidden_fields", hiddenField)
797-
.build();
808+
.addQueryParameter("fmt_options[hidden_fields]", hiddenField)
809+
.build();
810+
}
811+
812+
for (String hiddenFacet : req.getHiddenFacets()) {
813+
url = url.newBuilder()
814+
.addQueryParameter("fmt_options[hidden_facets]", hiddenFacet)
815+
.build();
798816
}
799817

800818
Request request = this.makeUserRequestBuilder(userInfo)

constructorio-client/src/main/java/io/constructor/client/SearchRequest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class SearchRequest {
2121
private String collectionId;
2222
private Map<String, String>formatOptions;
2323
private List<String> hiddenFields;
24+
private List<String> hiddenFacets;
2425

2526
/**
2627
* Creates a search request
@@ -40,6 +41,7 @@ public SearchRequest(String query) throws IllegalArgumentException {
4041
this.sortAscending = true;
4142
this.formatOptions = new HashMap<String, String>();
4243
this.hiddenFields = new ArrayList<String>();
44+
this.hiddenFacets = new ArrayList<String>();
4345
}
4446

4547
/**
@@ -195,4 +197,18 @@ public void setHiddenFields(List<String> hiddenFields) {
195197
public List<String> getHiddenFields() {
196198
return hiddenFields;
197199
}
200+
201+
/**
202+
* @param hiddenFacets the hiddenFacets to set
203+
*/
204+
public void setHiddenFacets(List<String> hiddenFacets) {
205+
this.hiddenFacets = hiddenFacets;
206+
}
207+
208+
/**
209+
* @return the hidden facets
210+
*/
211+
public List<String> getHiddenFacets() {
212+
return hiddenFacets;
213+
}
198214
}

constructorio-client/src/test/java/io/constructor/client/BrowseItemsRequestTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public void settersShouldSet() throws Exception {
4747
Map<String, String> formatOptions = new HashMap<String, String>();
4848
formatOptions.put("groups_start", "top");
4949
List<String> hiddenFields = Arrays.asList("hiddenField1", "hiddenField2");
50+
List<String> hiddenFacets = Arrays.asList("hiddenFacet1", "hiddenFacet2");
5051

5152
request.setIds(newIds);
5253
request.setSection("Browse Suggestions");
@@ -58,6 +59,7 @@ public void settersShouldSet() throws Exception {
5859
request.setSortAscending(false);
5960
request.setFormatOptions(formatOptions);
6061
request.setHiddenFields(hiddenFields);
62+
request.setHiddenFacets(hiddenFacets);
6163

6264
assertEquals(request.getIds(), newIds);
6365
assertEquals(request.getSection(), "Browse Suggestions");
@@ -69,5 +71,6 @@ public void settersShouldSet() throws Exception {
6971
assertEquals(request.getSortAscending(), false);
7072
assertEquals(request.getFormatOptions(), formatOptions);
7173
assertEquals(request.getHiddenFields(), hiddenFields);
74+
assertEquals(request.getHiddenFacets(), hiddenFacets);
7275
}
7376
}

constructorio-client/src/test/java/io/constructor/client/BrowseRequestTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void settersShouldSet() throws Exception {
5959
Map<String, String> formatOptions = new HashMap<String, String>();
6060
formatOptions.put("groups_start", "top");
6161
List<String> hiddenFields = Arrays.asList("hiddenField1", "hiddenField2");
62+
List<String> hiddenFacets = Arrays.asList("hiddenFacet1", "hiddenFacet2");
6263

6364
request.setFilterName("VacationType");
6465
request.setFilterValue("Air Travel");
@@ -71,6 +72,7 @@ public void settersShouldSet() throws Exception {
7172
request.setSortAscending(false);
7273
request.setFormatOptions(formatOptions);
7374
request.setHiddenFields(hiddenFields);
75+
request.setHiddenFacets(hiddenFacets);
7476

7577
assertEquals(request.getFilterName(), "VacationType");
7678
assertEquals(request.getFilterValue(), "Air Travel");
@@ -83,5 +85,7 @@ public void settersShouldSet() throws Exception {
8385
assertEquals(request.getSortAscending(), false);
8486
assertEquals(request.getFormatOptions(), formatOptions);
8587
assertEquals(request.getHiddenFields(), hiddenFields);
88+
assertEquals(request.getHiddenFacets(), hiddenFacets);
89+
8690
}
8791
}

constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseItemsTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package io.constructor.client;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
45
import static org.junit.Assert.assertTrue;
56

67
import java.util.Arrays;
78
import java.util.List;
9+
import java.util.function.Predicate;
810

911
import org.junit.Rule;
1012
import org.junit.Test;
1113
import org.junit.rules.ExpectedException;
1214

1315
import io.constructor.client.models.BrowseResponse;
16+
import io.constructor.client.models.FilterFacet;
1417
import io.constructor.client.models.FilterGroup;
1518

1619
public class ConstructorIOBrowseItemsTest {
@@ -198,4 +201,25 @@ public void BrowseItemsShouldReturnAResultWithHiddenFields() throws Exception {
198201
assertTrue("browse items result id exists", response.getResultId() != null);
199202
assertEquals("browse items [testField] exists", response.getResponse().getResults().get(0).getData().getMetadata().get("testField"), "hiddenFieldValue");
200203
}
204+
205+
@Test
206+
public void BrowseItemsShouldReturnAResultWithHiddenFacets() throws Exception {
207+
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);
208+
UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie");
209+
List<String> ids = Arrays.asList("10001", "10002");
210+
BrowseItemsRequest request = new BrowseItemsRequest(ids);
211+
request.getHiddenFacets().add("Brand");
212+
BrowseResponse response = constructor.browseItems(request, userInfo);
213+
FilterFacet brandFacet = response.getResponse().getFacets().stream().filter(new Predicate<FilterFacet>() {
214+
@Override
215+
public boolean test(FilterFacet f) {
216+
return f.getName().equals("Brand");
217+
}
218+
}).findAny().orElse(null);
219+
220+
assertTrue("browse items results exist", response.getResponse().getResults().size() > 0);
221+
assertTrue("browse items total results count should be equal to length of supplied ids", (int)response.getResponse().getTotalNumberOfResults() == ids.size());
222+
assertTrue("browse items result id exists", response.getResultId() != null);
223+
assertNotNull("browse facet [Brand] exists", brandFacet);
224+
}
201225
}

constructorio-client/src/test/java/io/constructor/client/ConstructorIOBrowseTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
package io.constructor.client;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
45
import static org.junit.Assert.assertTrue;
56

67
import java.util.Arrays;
8+
import java.util.function.Predicate;
79

810
import org.junit.Rule;
911
import org.junit.Test;
1012
import org.junit.rules.ExpectedException;
1113

1214
import io.constructor.client.models.BrowseResponse;
1315
import io.constructor.client.models.FilterGroup;
16+
import io.constructor.client.models.FilterFacet;
1417

1518
public class ConstructorIOBrowseTest {
1619

@@ -197,4 +200,22 @@ public void BrowseShouldReturnAResultWithHiddenFields() throws Exception {
197200
assertEquals("browse results exist", response.getResponse().getResults().size(), 1);
198201
assertEquals("browse result [testField] exists", response.getResponse().getResults().get(0).getData().getMetadata().get("testField"), "hiddenFieldValue");
199202
}
203+
204+
@Test
205+
public void BrowseShouldReturnAResultWithHiddenFacets() throws Exception {
206+
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);
207+
UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie");
208+
BrowseRequest request = new BrowseRequest("Brand", "XYZ");
209+
request.getHiddenFacets().add("Brand");
210+
BrowseResponse response = constructor.browse(request, userInfo);
211+
FilterFacet brandFacet = response.getResponse().getFacets().stream().filter(new Predicate<FilterFacet>() {
212+
@Override
213+
public boolean test(FilterFacet f) {
214+
return f.getName().equals("Brand");
215+
}
216+
}).findAny().orElse(null);
217+
218+
assertEquals("browse results exist", response.getResponse().getResults().size(), 1);
219+
assertNotNull("browse facet [Brand] exists", brandFacet);
220+
}
200221
}

constructorio-client/src/test/java/io/constructor/client/ConstructorIOSearchTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package io.constructor.client;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
45
import static org.junit.Assert.assertTrue;
56
import static org.junit.Assert.assertNull;
67

78
import java.util.Arrays;
9+
import java.util.function.Predicate;
810

911
import org.junit.Rule;
1012
import org.junit.Test;
1113
import org.junit.rules.ExpectedException;
1214

15+
import io.constructor.client.models.FilterFacet;
1316
import io.constructor.client.models.FilterGroup;
1417
import io.constructor.client.models.SearchResponse;
1518

@@ -201,6 +204,25 @@ public void SearchShouldReturnAResultWithHiddenFields() throws Exception {
201204
assertEquals("search result [testField] exists", response.getResponse().getResults().get(0).getData().getMetadata().get("testField"), "hiddenFieldValue");
202205
}
203206

207+
@Test
208+
public void SearchShouldReturnAResultWithHiddenFacets() throws Exception {
209+
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);
210+
UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie");
211+
SearchRequest request = new SearchRequest("item1");
212+
request.getHiddenFacets().add("Brand");
213+
214+
SearchResponse response = constructor.search(request, userInfo);
215+
FilterFacet brandFacet = response.getResponse().getFacets().stream().filter(new Predicate<FilterFacet>() {
216+
@Override
217+
public boolean test(FilterFacet f) {
218+
return f.getName().equals("Brand");
219+
}
220+
}).findAny().orElse(null);
221+
222+
assertEquals("search results exist", response.getResponse().getResults().size(), 9);
223+
assertNotNull("search facet [Brand] exists", brandFacet);
224+
}
225+
204226
@Test
205227
public void SearchShouldReturnAResultWithResultSources() throws Exception {
206228
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);

0 commit comments

Comments
 (0)