Java tutorial
package com.synopsys.integration.blackduck.service; import static org.junit.jupiter.api.Assertions.*; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.synopsys.integration.blackduck.TimingExtension; import com.synopsys.integration.blackduck.api.core.BlackDuckView; import com.synopsys.integration.blackduck.api.generated.view.ProjectVersionView; import com.synopsys.integration.blackduck.api.generated.view.ProjectView; import com.synopsys.integration.log.BufferedIntLogger; import com.synopsys.integration.log.IntLogger; @ExtendWith(TimingExtension.class) public class BlackDuckJsonTransformerTest { private static Gson gson; private static ObjectMapper objectMapper; private static IntLogger logger; private static BlackDuckJsonTransformer blackDuckJsonTransformer; @BeforeAll public static void setup() { BlackDuckJsonTransformerTest.gson = BlackDuckServicesFactory.createDefaultGson(); BlackDuckJsonTransformerTest.objectMapper = BlackDuckServicesFactory.createDefaultObjectMapper(); BlackDuckJsonTransformerTest.logger = new BufferedIntLogger(); BlackDuckJsonTransformerTest.blackDuckJsonTransformer = new BlackDuckJsonTransformer( BlackDuckJsonTransformerTest.gson, BlackDuckJsonTransformerTest.objectMapper, BlackDuckJsonTransformerTest.logger); } @Test public void testConstructionHappyPath() throws Exception { InputStream jsonInputStream = getClass().getResourceAsStream("/projectViewResponse.json"); String json = IOUtils.toString(jsonInputStream, StandardCharsets.UTF_8); ProjectView projectView = BlackDuckJsonTransformerTest.blackDuckJsonTransformer.getResponseAs(json, ProjectView.class); assertFalse(StringUtils.isBlank(projectView.getDescription())); assertObjectValid(projectView); assertJsonValid(json, projectView); } @Test public void testJsonPreservedWithMissingField() throws Exception { InputStream jsonInputStream = getClass().getResourceAsStream("/projectViewResponse.json"); String json = IOUtils.toString(jsonInputStream, StandardCharsets.UTF_8); ProjectViewWithoutDescription projectView = BlackDuckJsonTransformerTest.blackDuckJsonTransformer .getResponseAs(json, ProjectViewWithoutDescription.class); assertFalse(StringUtils .isBlank(projectView.getJsonElement().getAsJsonObject().get("description").getAsString())); assertObjectValid(projectView); assertJsonValid(json, projectView); } @Test public void testPageResults() throws Exception { InputStream jsonInputStream = getClass().getResourceAsStream("/projectsResponse.json"); String json = IOUtils.toString(jsonInputStream, StandardCharsets.UTF_8); BlackDuckPageResponse<ProjectView> blackDuckPageResponse = BlackDuckJsonTransformerTest.blackDuckJsonTransformer .getResponses(json, ProjectView.class); assertEquals(10, blackDuckPageResponse.getItems().size()); assertEquals(84, blackDuckPageResponse.getTotalCount()); JsonElement jsonElement = BlackDuckJsonTransformerTest.gson.fromJson(json, JsonElement.class); JsonArray items = jsonElement.getAsJsonObject().get("items").getAsJsonArray(); Iterator<JsonElement> itemsIterator = items.iterator(); for (ProjectView projectView : blackDuckPageResponse.getItems()) { assertObjectValid(projectView); assertTrue(StringUtils.isNotBlank(projectView.getName())); JsonElement item = itemsIterator.next(); assertJsonValid(BlackDuckJsonTransformerTest.gson.toJson(item), projectView); } } @Test public void testArbitraryJsonDifference() throws Exception { InputStream jsonInputStream = getClass().getResourceAsStream("/complex.json"); String json = IOUtils.toString(jsonInputStream, StandardCharsets.UTF_8); FruitTest fruitTest = BlackDuckJsonTransformerTest.blackDuckJsonTransformer.getResponseAs(json, FruitTest.class); assertTrue(fruitTest.fruits.possibleFruits.contains(FruitTest.PossibleFruits.APPLE)); assertTrue(fruitTest.fruits.possibleFruits.contains(FruitTest.PossibleFruits.BANANA)); assertTrue(fruitTest.fruits.nestedList.get(0).apple); assertFalse(fruitTest.fruits.nestedList.get(0).banana); assertFalse(fruitTest.fruits.nestedList.get(1).apple); assertFalse(fruitTest.fruits.nestedList.get(1).banana); assertTrue(fruitTest.fruits.nestedList.get(2).apple); assertTrue(fruitTest.fruits.nestedList.get(2).banana); String patchedJson = BlackDuckJsonTransformerTest.blackDuckJsonTransformer.producePatchedJson(fruitTest); assertJsonStringsEqual(json, patchedJson); } @Test public void testSettingObjectToNull() throws Exception { InputStream jsonInputStream = getClass().getResourceAsStream("/json/ProjectVersionView_with_license.json"); String json = IOUtils.toString(jsonInputStream, StandardCharsets.UTF_8); ProjectVersionView projectVersionView = BlackDuckJsonTransformerTest.blackDuckJsonTransformer .getResponseAs(json, ProjectVersionView.class); projectVersionView.setLicense(null); String patchedJson = BlackDuckJsonTransformerTest.blackDuckJsonTransformer .producePatchedJson(projectVersionView); System.out.println(patchedJson); } private void assertObjectValid(BlackDuckView blackDuckView) { assertNotNull(blackDuckView); assertNotNull(blackDuckView.getMeta()); assertNotNull(blackDuckView.getGson()); assertNotNull(blackDuckView.getJson()); assertNotNull(blackDuckView.getJsonElement()); } private void assertJsonValid(String json, BlackDuckView blackDuckView) { assertJsonStringsEqual(json, blackDuckView.getJson()); } private void assertJsonStringsEqual(String expectedJson, String actualJson) { String expectedJsonWithoutWhitespace = expectedJson.replaceAll("\\s+", ""); String actualJsonWithoutWhitespace = actualJson.replaceAll("\\s+", ""); assertEquals(expectedJsonWithoutWhitespace, actualJsonWithoutWhitespace); } private Set<String> getStringsFromArray(JsonArray jsonArray) { Set<String> strings = new HashSet<>(); Iterator<JsonElement> elements = jsonArray.iterator(); while (elements.hasNext()) { strings.add(elements.next().getAsString()); } return strings; } }