Skip to content

Commit b00b22a

Browse files
authored
[CI-4232] Support fmt_options and hidden_fields for Recommendations (#155)
* Support fmt_options and hidden_fields for Recommendations * remove hidden_facets * Fix lint
1 parent d2fd197 commit b00b22a

4 files changed

Lines changed: 79 additions & 0 deletions

File tree

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,6 +1818,22 @@ public String recommendationsAsJSON(RecommendationsRequest req, UserInfo userInf
18181818
.build();
18191819
}
18201820

1821+
for (String formatOptionKey : req.getFormatOptions().keySet()) {
1822+
String formatOptionValue = req.getFormatOptions().get(formatOptionKey);
1823+
url =
1824+
url.newBuilder()
1825+
.addQueryParameter(
1826+
"fmt_options[" + formatOptionKey + "]", formatOptionValue)
1827+
.build();
1828+
}
1829+
1830+
for (String hiddenField : req.getHiddenFields()) {
1831+
url =
1832+
url.newBuilder()
1833+
.addQueryParameter("fmt_options[hidden_fields]", hiddenField)
1834+
.build();
1835+
}
1836+
18211837
Request request = this.makeUserRequestBuilder(userInfo).url(url).get().build();
18221838

18231839
Response response = clientWithRetry.newCall(request).execute();

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

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

3+
import java.util.ArrayList;
34
import java.util.HashMap;
45
import java.util.List;
56
import java.util.Map;
@@ -15,6 +16,8 @@ public class RecommendationsRequest {
1516
private String section;
1617
private String preFilterExpression;
1718
private VariationsMap variationsMap;
19+
private Map<String, String> formatOptions;
20+
private List<String> hiddenFields;
1821

1922
/**
2023
* Creates a recommendations request
@@ -34,6 +37,8 @@ public RecommendationsRequest(String podId) throws IllegalArgumentException {
3437
this.variationsMap = null;
3538
this.preFilterExpression = null;
3639
this.facets = new HashMap<String, List<String>>();
40+
this.formatOptions = new HashMap<String, String>();
41+
this.hiddenFields = new ArrayList<String>();
3742
}
3843

3944
/**
@@ -149,4 +154,33 @@ public void setPreFilterExpression(String preFilterExpression) {
149154
public String getPreFilterExpression() {
150155
return preFilterExpression;
151156
}
157+
158+
/**
159+
* @param formatOptions the formatOptions to set. Please refer to
160+
* https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details
161+
*/
162+
public void setFormatOptions(Map<String, String> formatOptions) {
163+
this.formatOptions = formatOptions;
164+
}
165+
166+
/**
167+
* @return the format options
168+
*/
169+
public Map<String, String> getFormatOptions() {
170+
return formatOptions;
171+
}
172+
173+
/**
174+
* @param hiddenFields the hiddenFields to set
175+
*/
176+
public void setHiddenFields(List<String> hiddenFields) {
177+
this.hiddenFields = hiddenFields;
178+
}
179+
180+
/**
181+
* @return the hidden fields
182+
*/
183+
public List<String> getHiddenFields() {
184+
return hiddenFields;
185+
}
152186
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Arrays;
88
import java.util.HashMap;
99
import java.util.List;
10+
import java.util.Map;
1011
import org.junit.Rule;
1112
import org.junit.Test;
1213
import org.junit.rules.ExpectedException;
@@ -139,4 +140,25 @@ public void getRecommendationsShouldReturnAResultTerm() throws Exception {
139140
assertEquals(response.getRequest().get("term"), "test");
140141
assertTrue("recommendation result id exists", response.getResultId() != null);
141142
}
143+
144+
@Test
145+
public void getRecommendationsShouldReturnAResultWithFmtOptionsAndHiddenFields()
146+
throws Exception {
147+
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);
148+
UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie");
149+
RecommendationsRequest request = new RecommendationsRequest("item_page_1");
150+
request.setItemIds(Arrays.asList("power_drill", "drill"));
151+
request.setNumResults(5);
152+
request.getHiddenFields().add("testField");
153+
request.getFormatOptions().put("groups_max_depth", "3");
154+
155+
RecommendationsResponse response = constructor.recommendations(request, userInfo);
156+
Map<String, Object> fmtOptions =
157+
(Map<String, Object>) response.getRequest().get("fmt_options");
158+
159+
assertTrue("recommendation results exist", response.getResponse().getResults().size() >= 0);
160+
assertTrue("recommendation result id exists", response.getResultId() != null);
161+
assertEquals(fmtOptions.get("groups_max_depth"), Double.valueOf("3.0"));
162+
assertTrue(((List<String>) fmtOptions.get("hidden_fields")).contains("testField"));
163+
}
142164
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,25 @@ public void settersShouldSet() throws Exception {
4747
RecommendationsRequest request = new RecommendationsRequest(podId);
4848
Map<String, List<String>> facets = new HashMap<String, List<String>>();
4949
facets.put("Flavors", Arrays.asList("Honey Roasted", "Dry Roasted", "Unsalted"));
50+
Map<String, String> formatOptions = new HashMap<String, String>();
51+
formatOptions.put("groups_start", "top");
52+
List<String> hiddenFields = Arrays.asList("hiddenField1", "hiddenField2");
5053

5154
request.setPodId("zero_results_1");
5255
request.setNumResults(3);
5356
request.setItemIds(Arrays.asList("1", "2", "3"));
5457
request.setSection("Search Suggestions");
5558
request.setFacets(facets);
5659
request.setTerm(term);
60+
request.setFormatOptions(formatOptions);
61+
request.setHiddenFields(hiddenFields);
5762

5863
assertEquals(request.getPodId(), "zero_results_1");
5964
assertEquals(request.getNumResults(), 3);
6065
assertEquals(request.getSection(), "Search Suggestions");
6166
assertEquals(request.getFacets(), facets);
6267
assertEquals(request.getTerm(), term);
68+
assertEquals(request.getFormatOptions(), formatOptions);
69+
assertEquals(request.getHiddenFields(), hiddenFields);
6370
}
6471
}

0 commit comments

Comments
 (0)