package org.jvalue.ods.processor.adapter;
import com.codahale.metrics.MetricRegistry;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.jvalue.ods.api.sources.DataSource;
import java.util.List;
import mockit.Mocked;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public final class CsvSourceAdapterTest extends AbstractSourceAdapterTest {
@Mocked private MetricRegistry registry;
@Mocked private DataSource source;
@Test
public void testDefaultAdapter() throws Exception {
testAdapter("DEFAULT", ',');
}
@Test
public void testExcelAdapter() throws Exception {
testAdapter("EXCEL", ',');
}
@Test
public void testRfcAdapter() throws Exception {
testAdapter("RFC4180", ',');
}
@Test
public void testTdfAdapter() throws Exception {
testAdapter("TDF", '\t');
}
private String getCsvContent(char delimiter) {
StringBuilder builder = new StringBuilder();
builder.append("key1");
builder.append(delimiter);
builder.append("key2\n");
builder.append("value1");
builder.append(delimiter);
builder.append("value2\n");
builder.append("value3");
builder.append(delimiter);
builder.append("value4\n");
return builder.toString();
}
private String currentCsvFormat;
private void testAdapter(String csvFormat, char csvDelimiter) throws Exception {
currentCsvFormat = csvFormat;
List<ObjectNode> jsonResult = testAdapterWithAllProtocols(getCsvContent(csvDelimiter));
Assert.assertEquals(2, jsonResult.size());
ObjectNode node = jsonResult.get(0);
Assert.assertEquals("value1", node.get("key1").asText());
Assert.assertEquals("value2", node.get("key2").asText());
node = jsonResult.get(1);
Assert.assertEquals("value3", node.get("key1").asText());
Assert.assertEquals("value4", node.get("key2").asText());
}
@Override
protected SourceAdapter createAdapter(String sourceUrl) {
return new CsvSourceAdapter(source, sourceUrl, currentCsvFormat, registry);
}
}