package eu.ehri.project.indexing;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.Lists;
import eu.ehri.project.indexing.sink.impl.BufferSink;
import eu.ehri.project.indexing.sink.impl.CallbackSink;
import eu.ehri.project.indexing.source.impl.InputStreamJsonSource;
import eu.ehri.project.indexing.test.JsonToXml;
import eu.ehri.project.indexing.test.StringSource;
import eu.ehri.project.indexing.test.StringToInteger;
import eu.ehri.project.indexing.utils.Stats;
import org.junit.Test;
import org.w3c.dom.Node;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class PipelineTest {
@Test
public void testPipeline1() throws Exception {
List<Number> out = Lists.newArrayList();
new Pipeline.Builder<String, Number>()
.addSource(new StringSource(Lists.newArrayList("1", "2", "3")))
.addConverter(new StringToInteger())
.addSink(new BufferSink<>(out))
.build()
.run();
assertEquals(Lists.newArrayList(1, 2, 3), out);
}
@Test
public void testPipeline2() throws Exception {
String json = "[{\"foo\": \"bar\"}, {\"bar\": \"baz\"}]";
InputStream stream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
final List<String> outText = Lists.newArrayList();
final Stats stats = new Stats();
new Pipeline.Builder<JsonNode, Node>()
.addSource(new InputStreamJsonSource(stream))
.addConverter(new JsonToXml("test"))
.addSink(new CallbackSink<>(new CallbackSink.Callback<Node>() {
@Override
public void call(Node node) {
stats.incrementCount();
outText.add(JsonToXml.nodeToString(node));
}
@Override
public void finish() {
}
}))
.build()
.run();
assertEquals(2, stats.getCount());
assertEquals(2, outText.size());
assertEquals("<test>\n<foo>bar</foo>\n</test>\n", outText.get(0));
}
@Test(expected = IllegalStateException.class)
public void testPipelineMissingConverted() throws Exception {
new Pipeline.Builder<String, Number>()
.addSource(new StringSource(Lists.newArrayList("1", "2", "3")))
.addSink(new BufferSink<>(Lists.<Number>newArrayList()))
.build();
}
}