Skip to content

Commit

Permalink
Fix request body structure
Browse files Browse the repository at this point in the history
  • Loading branch information
najmsheikh committed Aug 12, 2020
1 parent 11d90db commit 516b2aa
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,49 +209,57 @@ public Void postActivity(String activityName, List<ButtonProductCompatible> prod
throws ButtonNetworkException {

try {
JSONArray productsArray = new JSONArray();
for (int i = 0; i < products.size(); i++) {
ButtonProductCompatible product = products.get(i);
List<String> categories = product.getCategories();
Map<String, String> attributes = product.getAttributes();
JSONObject productJson = new JSONObject();

// Convert categories list to JSON array
JSONArray categoriesJson = new JSONArray();
if (categories != null) {
for (int j = 0; j < categories.size(); j++) {
categoriesJson.put(j, categories.get(j));
JSONObject requestBody = new JSONObject();
JSONObject activityBody = new JSONObject();
requestBody.put("ifa", advertisingId);
requestBody.put("btn_ref", sourceToken);
activityBody.put("name", activityName);

if (!products.isEmpty()) {
JSONArray productsArray = new JSONArray();
for (int i = 0; i < products.size(); i++) {
ButtonProductCompatible product = products.get(i);
List<String> categories = product.getCategories();
Map<String, String> attributes = product.getAttributes();
JSONObject productJson = new JSONObject();

// Convert categories list to JSON array
JSONArray categoriesJson = new JSONArray();
if (categories != null) {
for (int j = 0; j < categories.size(); j++) {
categoriesJson.put(j, categories.get(j));
}
productJson.put("categories", categoriesJson);
}
productJson.put("categories", categoriesJson);
}

// Convert custom attributes map to JSON object
JSONObject attributesJson = new JSONObject();
if (attributes != null) {
for (Map.Entry<String, String> entry : attributes.entrySet()) {
attributesJson.putOpt(entry.getKey(), entry.getValue());
// Convert custom attributes map to JSON object
JSONObject attributesJson = new JSONObject();
if (attributes != null) {
for (Map.Entry<String, String> entry : attributes.entrySet()) {
attributesJson.putOpt(entry.getKey(), entry.getValue());
}
productJson.put("attributes", attributesJson);
}
productJson.put("attributes", attributesJson);

// Put product data into a JSON object
productJson.put("id", product.getId());
productJson.put("upc", product.getUpc());
productJson.put("name", product.getName());
productJson.put("currency", product.getCurrency());
productJson.put("value", product.getValue());
productJson.put("quantity", product.getQuantity());
productJson.put("url", product.getUrl());

// Add to JSON array of products
productsArray.put(i, productJson);
}

// Put product data into a JSON object
productJson.put("id", product.getId());
productJson.put("upc", product.getUpc());
productJson.put("name", product.getName());
productJson.put("currency", product.getCurrency());
productJson.put("value", product.getValue());
productJson.put("quantity", product.getQuantity());
productJson.put("url", product.getUrl());

// Add to JSON array of products
productsArray.put(i, productJson);
// Append products only if available
activityBody.put("products", productsArray);
}

JSONObject requestBody = new JSONObject();
requestBody.put("ifa", advertisingId);
requestBody.put("btn_ref", sourceToken);
requestBody.put("name", activityName);
requestBody.put("products", productsArray);
// Append activity data to request body
requestBody.put("activity_data", activityBody);

ApiRequest apiRequest = new ApiRequest.Builder(ApiRequest.RequestMethod.POST,
"/v1/app/activity")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,9 +375,10 @@ public void postActivity_noProducts_shouldPostActivity() throws Exception {
verify(connectionManager).executeRequest(argumentCaptor.capture());
ApiRequest apiRequest = argumentCaptor.getValue();
JSONObject requestBody = apiRequest.getBody();
JSONObject activityBody = requestBody.getJSONObject("activity_data");

assertEquals("test-activity", requestBody.getString("name"));
assertEquals(0, requestBody.getJSONArray("products").length());
assertEquals("test-activity", activityBody.getString("name"));
assertFalse(activityBody.has("products"));
assertEquals("test-token", requestBody.getString("btn_ref"));
assertFalse(requestBody.has("ifa"));
}
Expand All @@ -399,11 +400,12 @@ public void postActivity_multipleProducts_shouldPostActivity() throws Exception
verify(connectionManager).executeRequest(argumentCaptor.capture());
ApiRequest apiRequest = argumentCaptor.getValue();
JSONObject requestBody = apiRequest.getBody();
JSONObject activityBody = requestBody.getJSONObject("activity_data");

assertEquals("test-activity", requestBody.getString("name"));
assertEquals(2, requestBody.getJSONArray("products").length());
assertEquals("one", requestBody.getJSONArray("products").getJSONObject(0).getString("id"));
assertEquals("two", requestBody.getJSONArray("products").getJSONObject(1).getString("id"));
assertEquals("test-activity", activityBody.getString("name"));
assertEquals(2, activityBody.getJSONArray("products").length());
assertEquals("one", activityBody.getJSONArray("products").getJSONObject(0).getString("id"));
assertEquals("two", activityBody.getJSONArray("products").getJSONObject(1).getString("id"));
assertEquals("test-token", requestBody.getString("btn_ref"));
assertFalse(requestBody.has("ifa"));
}
Expand All @@ -417,10 +419,11 @@ public void postActivity_withEmptyProductInfo_shouldPostActivity() throws Except
verify(connectionManager).executeRequest(argumentCaptor.capture());
ApiRequest apiRequest = argumentCaptor.getValue();
JSONObject requestBody = apiRequest.getBody();
JSONObject activityBody = requestBody.getJSONObject("activity_data");

assertEquals("test-activity", requestBody.getString("name"));
assertEquals(1, requestBody.getJSONArray("products").length());
assertEquals(0, requestBody.getJSONArray("products").getJSONObject(0).length());
assertEquals("test-activity", activityBody.getString("name"));
assertEquals(1, activityBody.getJSONArray("products").length());
assertEquals(0, activityBody.getJSONArray("products").getJSONObject(0).length());
assertFalse(requestBody.has("btn_ref"));
assertFalse(requestBody.has("ifa"));
}
Expand Down Expand Up @@ -451,12 +454,13 @@ public void postActivity_withCompleteProductInfo_shouldPostActivity() throws Exc
verify(connectionManager).executeRequest(argumentCaptor.capture());
ApiRequest apiRequest = argumentCaptor.getValue();
JSONObject requestBody = apiRequest.getBody();
JSONObject activityBody = requestBody.getJSONObject("activity_data");

assertEquals("test-ifa", requestBody.getString("ifa"));
assertEquals("test-token", requestBody.getString("btn_ref"));
assertEquals("test-activity", requestBody.getString("name"));
assertEquals(1, requestBody.getJSONArray("products").length());
JSONObject productJson = requestBody.getJSONArray("products").getJSONObject(0);
assertEquals("test-activity", activityBody.getString("name"));
assertEquals(1, activityBody.getJSONArray("products").length());
JSONObject productJson = activityBody.getJSONArray("products").getJSONObject(0);
assertEquals("test-id", productJson.getString("id"));
assertEquals("test-upc", productJson.getString("upc"));
assertEquals("test-name", productJson.getString("name"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void onResult(@Nullable final Throwable t) {
findViewById(R.id.track_product_viewed).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ButtonMerchant.activity().productViewed(getProduct());
ButtonMerchant.activity().productViewed(null);
}
});

Expand Down

0 comments on commit 516b2aa

Please sign in to comment.