com.synopsys.integration.blackduck.service.BlackDuckJsonTransformerTest.java Source code

Java tutorial

Introduction

Here is the source code for com.synopsys.integration.blackduck.service.BlackDuckJsonTransformerTest.java

Source

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;
    }

}