Skip to content

Commit 736b732

Browse files
authored
[CI-4247] Add Create/Update facet option configurations (#157)
* add update facet option configuration * address comments * update tests
1 parent 48c4448 commit 736b732

3 files changed

Lines changed: 185 additions & 5 deletions

File tree

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

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2955,10 +2955,53 @@ public String deleteFacetConfiguration(FacetConfigurationRequest facetConfigurat
29552955
facetConfigurationRequest.getSection());
29562956
}
29572957

2958+
/**
2959+
* Creates or Updates facet option configurations
2960+
*
2961+
* @param facetOptionConfigurationsRequest The facet option configurations request containing
2962+
* the configurations to create or update
2963+
* @return returns the created facet option configurations
2964+
* @throws ConstructorException if the request is invalid
2965+
*/
2966+
public String createOrUpdateFacetOptionConfigurations(
2967+
FacetOptionConfigurationsRequest facetOptionConfigurationsRequest)
2968+
throws ConstructorException {
2969+
try {
2970+
HttpUrl url =
2971+
this.makeUrl(
2972+
Arrays.asList(
2973+
"v1",
2974+
"facets",
2975+
facetOptionConfigurationsRequest.getFacetName(),
2976+
"options"));
2977+
url =
2978+
url.newBuilder()
2979+
.addQueryParameter(
2980+
"section", facetOptionConfigurationsRequest.getSection())
2981+
.build();
2982+
2983+
String params =
2984+
new Gson()
2985+
.toJson(
2986+
facetOptionConfigurationsRequest
2987+
.getFacetOptionConfigurations());
2988+
RequestBody body =
2989+
RequestBody.create(params, MediaType.parse("application/json; charset=utf-8"));
2990+
Request request = this.makeAuthorizedRequestBuilder().url(url).patch(body).build();
2991+
2992+
Response response = client.newCall(request).execute();
2993+
2994+
return getResponseBody(response);
2995+
} catch (Exception exception) {
2996+
throw new ConstructorException(exception);
2997+
}
2998+
}
2999+
29583000
/**
29593001
* Creates a facet option configuration
29603002
*
2961-
* @param facetOptionConfigurationRequest The facet option configuration request containing the configuration to create
3003+
* @param facetOptionConfigurationRequest The facet option configuration request containing the
3004+
* configuration to create
29623005
* @return returns the created facet option configuration
29633006
* @throws ConstructorException if the request is invalid
29643007
*/
@@ -3044,7 +3087,8 @@ public String deleteFacetOptionConfiguration(String facetName, String facetOptio
30443087
/**
30453088
* Deletes a facet option configuration
30463089
*
3047-
* @param facetOptionConfigurationRequest The facet option configuration request containing the configuration to delete
3090+
* @param facetOptionConfigurationRequest The facet option configuration request containing the
3091+
* configuration to delete
30483092
* @return returns the deleted facet option configuration
30493093
* @throws ConstructorException if the request is invalid
30503094
*/
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package io.constructor.client;
2+
3+
import io.constructor.client.models.FacetOptionConfiguration;
4+
import java.util.List;
5+
6+
/** Constructor.io Facet Option Configurations Request */
7+
public class FacetOptionConfigurationsRequest {
8+
private List<FacetOptionConfiguration> facetOptionConfigurations;
9+
private String facetName;
10+
private String section;
11+
12+
/**
13+
* Creates a facet option configurations request (create or update)
14+
*
15+
* @param facetOptionConfigurations the list of facet option configurations to be created or
16+
* updated
17+
* @param facetName the name of the facet
18+
* @param section the section to which the facet belongs
19+
*/
20+
public FacetOptionConfigurationsRequest(
21+
List<FacetOptionConfiguration> facetOptionConfigurations,
22+
String facetName,
23+
String section) {
24+
if (facetOptionConfigurations.isEmpty()) {
25+
throw new IllegalArgumentException("facetOptionConfigurations is required");
26+
}
27+
if (facetName == null || facetName.trim().isEmpty()) {
28+
throw new IllegalArgumentException("facetName is required");
29+
}
30+
31+
this.facetOptionConfigurations = facetOptionConfigurations;
32+
this.facetName = facetName;
33+
this.section = section;
34+
}
35+
36+
/**
37+
* Creates a facet option configurations request (Create or Update) with default section
38+
* "Products"
39+
*
40+
* @param facetOptionConfigurations the list of facet option configuration to be created or
41+
* updated
42+
* @param facetName the name of the facet
43+
*/
44+
public FacetOptionConfigurationsRequest(
45+
List<FacetOptionConfiguration> facetOptionConfigurations, String facetName) {
46+
this(facetOptionConfigurations, facetName, "Products");
47+
}
48+
49+
/**
50+
* @return the list of facet option configurations
51+
*/
52+
public List<FacetOptionConfiguration> getFacetOptionConfigurations() {
53+
return facetOptionConfigurations;
54+
}
55+
56+
/**
57+
* @param facetOptionConfigurations the list of facet option configurations to set
58+
*/
59+
public void setFacetOptionConfigurations(
60+
List<FacetOptionConfiguration> facetOptionConfigurations) {
61+
this.facetOptionConfigurations = facetOptionConfigurations;
62+
}
63+
64+
/**
65+
* @return the facet name
66+
*/
67+
public String getFacetName() {
68+
return facetName;
69+
}
70+
71+
/**
72+
* @param facetName the facet name to set
73+
*/
74+
public void setFacetName(String facetName) {
75+
this.facetName = facetName;
76+
}
77+
78+
/**
79+
* @return the section
80+
*/
81+
public String getSection() {
82+
return section;
83+
}
84+
85+
/**
86+
* @param section the section to set
87+
*/
88+
public void setSection(String section) {
89+
this.section = section;
90+
}
91+
}

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

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import com.google.gson.Gson;
66
import io.constructor.client.models.FacetConfiguration;
77
import io.constructor.client.models.FacetOptionConfiguration;
8-
import java.util.ArrayList;
9-
import java.util.HashMap;
10-
import java.util.Map;
8+
import java.util.*;
9+
import org.json.JSONArray;
1110
import org.json.JSONObject;
1211
import org.junit.AfterClass;
1312
import org.junit.Before;
@@ -144,6 +143,52 @@ public void testCreateFacetOptionConfiguration() throws Exception {
144143
addFacetOptionToCleanupArray(facetName, "test-option");
145144
}
146145

146+
@Test
147+
public void testCreateFacetOptionConfigurations() throws Exception {
148+
String facetName = "testFacet2";
149+
constructor.createFacetConfiguration(
150+
new FacetConfigurationRequest(
151+
createFacetConfigurationObject(facetName, PRODUCTS_SECTION),
152+
PRODUCTS_SECTION));
153+
addFacetToCleanupArray(facetName);
154+
155+
// Create facet option configurations
156+
FacetOptionConfiguration option =
157+
createFacetOptionConfigurationObject("test-option", "Test Option", 1);
158+
FacetOptionConfiguration option2 =
159+
createFacetOptionConfigurationObject("test-option-2", "Test Option 2", 2);
160+
option.setValueAlias("test-alias");
161+
option2.setHidden(true);
162+
Map<String, Object> data = new HashMap<>();
163+
data.put("foo", "bar");
164+
option.setData(data);
165+
option.setHidden(false);
166+
List<FacetOptionConfiguration> configurations = Arrays.asList(option, option2);
167+
168+
// Create and verify configurations
169+
String response =
170+
constructor.createOrUpdateFacetOptionConfigurations(
171+
new FacetOptionConfigurationsRequest(
172+
configurations, facetName, PRODUCTS_SECTION));
173+
JSONArray jsonArr = new JSONArray(response);
174+
JSONObject jsonOption1 = (JSONObject) jsonArr.get(0);
175+
JSONObject jsonOption2 = (JSONObject) jsonArr.get(1);
176+
177+
assertEquals("test-option", jsonOption1.get("value"));
178+
assertEquals("test-alias", jsonOption1.get("value_alias"));
179+
assertEquals("Test Option", jsonOption1.get("display_name"));
180+
assertEquals(1, jsonOption1.get("position"));
181+
assertEquals(false, jsonOption1.get("hidden"));
182+
assertEquals("bar", jsonOption1.getJSONObject("data").get("foo"));
183+
assertEquals("test-option-2", jsonOption2.get("value"));
184+
assertEquals("Test Option 2", jsonOption2.get("display_name"));
185+
assertEquals(2, jsonOption2.get("position"));
186+
assertEquals(true, jsonOption2.get("hidden"));
187+
188+
addFacetOptionToCleanupArray(facetName, "test-option");
189+
addFacetOptionToCleanupArray(facetName, "test-option-2");
190+
}
191+
147192
@Test(expected = ConstructorException.class)
148193
public void testCreateFacetOptionConfigurationWithNullRequest() throws Exception {
149194
ConstructorIO constructor = new ConstructorIO(token, apiKey, true, null);

0 commit comments

Comments
 (0)