package com.aerhard.oxygen.plugin.dbtagger;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import com.aerhard.oxygen.plugin.dbtagger.util.JsonUtil;
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace;
@RunWith(MockitoJUnitRunner.class)
public class JsonUtilTest {
private StandalonePluginWorkspace workspace;
private JsonUtil jsonUtil;
private String validString = "{ "
+ "\"cols\" : [{ \"name\" : \"Key\" }, "
+ "{ \"name\" : \"Name\" }, "
+ "{ \"name\" : \"Description\" }], "
+ "\"data\" : [[\"1\", \"v12\", \"v13\"], [\"2\", \"\", \"v23\"], [\"3\", \"v32\", null]] }";
private String unparsableString = "[[";
private String missingCols = "{ "
+ "\"data\" : [[\"1\", \"v12\", \"v13\"], [\"2\", \"\", \"v23\"], [\"3\", \"v32\", null]] }";
private String missingData = "{ " + "\"cols\" : [{ \"name\" : \"Key\" }, "
+ "{ \"name\" : \"Name\" }, " + "{ \"name\" : \"Description\" }] }";
private String notEnoughDataRows = "{ "
+ "\"cols\" : [{ \"name\" : \"Key\" }, "
+ "{ \"name\" : \"Name\" }, "
+ "{ \"name\" : \"Description\" }], "
+ "\"data\" : [[\"1\", \"v12\", \"v13\"], [\"2\", \"\", \"v23\"], [\"3\", \"v32\"]] }";
@Before
public void initTC() {
workspace = mock(StandalonePluginWorkspace.class);
jsonUtil = new JsonUtil(workspace);
}
/**
* Tests JSON utility function with a valid string.
*/
@Test
public void testValidString() {
TableData data = jsonUtil.getTableData(validString);
verify(workspace, never()).showErrorMessage(anyString());
assertEquals("Name", data.getHeaders()[1]);
assertEquals("1", data.getBody()[0][0]);
assertEquals("", data.getBody()[2][2]);
}
/**
* Tests JSON utility function with an unparsable string.
*/
@Test
public void testUnparsableString() {
@SuppressWarnings("unused")
TableData data = jsonUtil.getTableData(unparsableString);
verify(workspace).showErrorMessage(anyString());
}
/**
* Tests JSON utility function with data in which the column titles are missing.
*/
@Test
public void testMissingCols() {
@SuppressWarnings("unused")
TableData data = jsonUtil.getTableData(missingCols);
verify(workspace).showErrorMessage(anyString());
}
/**
* Tests JSON utility function with a string input which lacks the table body data.
*/
@Test
public void testMissingData() {
@SuppressWarnings("unused")
TableData data = jsonUtil.getTableData(missingData);
verify(workspace, never()).showErrorMessage(anyString());
}
/**
* Tests JSON utility function with data where rows are missing in the table body object.
*/
@Test
public void testEnoughDataRowsCols() {
@SuppressWarnings("unused")
TableData data = jsonUtil.getTableData(notEnoughDataRows);
verify(workspace).showErrorMessage(anyString());
}
}