Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Commit

Permalink
Merge cf0d493 into 07fadb2
Browse files Browse the repository at this point in the history
  • Loading branch information
Mahesh Subramanian committed Jan 31, 2019
2 parents 07fadb2 + cf0d493 commit db49324
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.HashMap;
import java.util.Map;

import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
Expand Down Expand Up @@ -57,6 +58,13 @@ void add(final String value, final String... name) {
}
}

void add(final JsonArray value, final String... name) {
final JsonObjectBuilder jsonObject = addOrReturnNestedJsonObject(value, name);
if (jsonObject != null) {
jsonObject.add(name[1], value);
}
}

void add(final JsonObject value, final String... name) {
final JsonObjectBuilder jsonObject = addOrReturnNestedJsonObject(value, name);
if (jsonObject != null) {
Expand Down Expand Up @@ -99,22 +107,25 @@ JsonObject build() {
entryMap.forEach((name, value) -> {
ValueType type = ValueType.valueOf(value.getClass());
switch (type) {
case JsonObjectBuilder:
case JSONOBJECTBUILDER:
jsonObjectBuilder.add(name, ((JsonObjectBuilder) value).build());
break;
case JsonArrayBuilder:
case JSONARRAYBUILDER:
jsonObjectBuilder.add(name, ((JsonArrayBuilder) value).build());
break;
case BigDecimal:
case BIGDECIMAL:
jsonObjectBuilder.add(name, (BigDecimal) value);
break;
case Integer:
case INTEGER:
jsonObjectBuilder.add(name, (Integer) value);
break;
case JsonObject:
case JSONOBJECT:
jsonObjectBuilder.add(name, (JsonObject) value);
break;
case Boolean:
case JSONARRAY:
jsonObjectBuilder.add(name, (JsonArray) value);
break;
case BOOLEAN:
jsonObjectBuilder.add(name, (Boolean) value);
break;
default:
Expand All @@ -125,7 +136,7 @@ JsonObject build() {
}

enum ValueType {
String, BigDecimal, Integer, Boolean, JsonObject, JsonObjectBuilder, JsonArrayBuilder;
STRING, BIGDECIMAL, INTEGER, BOOLEAN, JSONARRAY, JSONOBJECT, JSONOBJECTBUILDER, JSONARRAYBUILDER;

static ValueType valueOf(Class<?> clazz) {
final String className = clazz.getSimpleName();
Expand All @@ -143,12 +154,12 @@ static ValueType valueOf(Class<?> clazz) {

private static ValueType valueTypeOf(final String className) {
for (ValueType t : ValueType.values()) {
if (t.name().equals(className)) {
if (t.name().equalsIgnoreCase(className)) {
return t;
}
}
return null;
}
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package uk.gov.justice.services.test.utils.core.messaging;

import static org.apache.commons.lang3.RandomStringUtils.randomAlphanumeric;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;

import uk.gov.justice.services.test.utils.core.random.BigDecimalGenerator;

import java.math.BigDecimal;

import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;

import org.junit.Before;
import org.junit.Test;


public class JsonObjectBuilderWrapperTest {

private JsonObjectBuilderWrapper wrapper;

@Before
public void setup() {
wrapper = new JsonObjectBuilderWrapper();
}

@Test
public void testAddingJsonArrayAsAttributeToRootLevelJsonObject() {
final JsonArray numberJsonArray = Json.createArrayBuilder().add(1).add(2).build();

final String firstLevelAttributeName = "numbers";
wrapper.add(numberJsonArray, firstLevelAttributeName);
final JsonObject actual = wrapper.build();

assertThat(actual, notNullValue());
assertThat(actual.getJsonArray(firstLevelAttributeName), notNullValue());
assertThat(actual.getJsonArray(firstLevelAttributeName), hasSize(2));
}

@Test
public void testAddingJsonArrayAsAttributeAsNestedAttribute() {
final JsonArray numberJsonArray = Json.createArrayBuilder().add(1).add(2).build();

final String firstLevelAttributeName = "example";
final String secondLevelAttributeName = "numbers";
wrapper.add(numberJsonArray, firstLevelAttributeName, secondLevelAttributeName);
final JsonObject actual = wrapper.build();

assertThat(actual, notNullValue());
final JsonObject firstLevelJsonObject = actual.getJsonObject(firstLevelAttributeName);
assertThat(firstLevelJsonObject, notNullValue());
assertThat(firstLevelJsonObject.getJsonArray(secondLevelAttributeName), hasSize(2));
}

@Test
public void testBuildingJsonObjectWithAllTypesOfAttributes() {

final String jsonArrayAttributeName = "jsonArray";
final String jsonObjectAttributeName = "jsonObject";
final String integerAttributeName = "integer";
final String stringAttributeName = "string";
final String booleanAttributeName = "boolean";
final String bigDecimalAttributeName = "bigDecimal";
final String jsonArrayBuilderAttributeName = "jsonArrayBuilder";


final JsonArray jsonArray = Json.createArrayBuilder().add(1).add(2).build();
final JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder().add(3).add(4);
final JsonObject jsonObject = Json.createObjectBuilder().add("key", "value").build();
final int integerAttributeValue = 500;
final String stringAttributeValue = randomAlphanumeric(10);
final boolean booleanAttributeValue = true;
final BigDecimal bigDecimalAttributeValue = new BigDecimalGenerator().next();

wrapper.add(jsonArray, jsonArrayAttributeName);
wrapper.add(jsonArrayBuilder, jsonArrayBuilderAttributeName);
wrapper.add(jsonObject, jsonObjectAttributeName);
wrapper.add(integerAttributeValue, integerAttributeName);
wrapper.add(stringAttributeValue, stringAttributeName);
wrapper.add(booleanAttributeValue, booleanAttributeName);
wrapper.add(bigDecimalAttributeValue, bigDecimalAttributeName);


final JsonObject actual = wrapper.build();

assertThat(actual, notNullValue());

final JsonArray actualJsonArray = actual.getJsonArray(jsonArrayAttributeName);
assertThat(actualJsonArray, hasSize(2));

final JsonArray actualJsonArrayFromBuilder = actual.getJsonArray(jsonArrayBuilderAttributeName);
assertThat(actualJsonArrayFromBuilder, hasSize(2));

final JsonObject actualJsonObject = actual.getJsonObject(jsonObjectAttributeName);
assertThat(actualJsonObject, notNullValue());
assertThat(actualJsonObject.getString("key"), is("value"));

assertThat(actual.getInt(integerAttributeName), is(integerAttributeValue));
assertThat(actual.getBoolean(booleanAttributeName), is(booleanAttributeValue));
assertThat(actual.getJsonNumber(bigDecimalAttributeName).bigDecimalValue(), is(bigDecimalAttributeValue));
}

}

0 comments on commit db49324

Please sign in to comment.