package org.ektorp;
import static org.junit.Assert.*;
import java.io.InputStream;
import java.util.*;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.MissingNode;
import org.apache.commons.io.IOUtils;
import org.junit.*;
public class ViewResultTest {
ObjectMapper om = new ObjectMapper();
@Test
public void fromJson() throws Exception {
ViewResult result = readResult("impl/view_result.json");
assertEquals(2, result.getSize());
assertEquals(1, result.getOffset());
List<ViewResult.Row> rows = result.getRows();
assertEquals("doc_id1", rows.get(0).getId());
assertEquals("key_value", rows.get(0).getKey());
assertEquals("doc_value1", rows.get(0).getValue());
assertEquals("doc_id2", rows.get(1).getId());
assertEquals("key_value", rows.get(1).getKey());
assertEquals("doc_value2", rows.get(1).getValue());
assertNull(rows.get(0).getDoc());
assertTrue(rows.get(0).getDocAsNode().isMissingNode());
}
@Test
public void test_read_reduce_result() throws Exception {
ViewResult result = readResult("impl/reduce_view_result.json");
assertEquals(3, result.getSize());
List<ViewResult.Row> rows = result.getRows();
assertEquals(4, rows.get(0).getValueAsInt());
assertEquals(5, rows.get(1).getValueAsInt());
assertEquals(6, rows.get(2).getValueAsInt());
}
@Test
public void test_read_grouped_result() throws Exception {
ViewResult result = readResult("impl/group_view_result.json");
assertEquals(2, result.getSize());
List<ViewResult.Row> rows = result.getRows();
assertEquals(null, rows.get(0).getIdAsNode().textValue());
assertEquals(null, rows.get(0).getId());
assertEquals("h", rows.get(0).getKey());
assertEquals(2, rows.get(0).getValueAsInt());
assertEquals(null, rows.get(0).getId());
assertEquals("m", rows.get(1).getKey());
assertEquals(1, rows.get(1).getValueAsInt());
}
@Test
public void int_view_result() throws Exception {
ViewResult result = readResult("impl/int_view_result.json");
assertEquals(2, result.getSize());
List<ViewResult.Row> rows = result.getRows();
assertEquals(123, rows.get(0).getValueAsInt());
assertEquals(321, rows.get(1).getValueAsInt());
}
@Test
public void array_and_object_view_result() throws Exception {
ViewResult result = readResult("impl/array_and_object_view_result.json");
assertEquals(2, result.getSize());
List<ViewResult.Row> rows = result.getRows();
assertEquals("[\"foo\",\"bar\"]", rows.get(0).getValue());
assertEquals("{\"foo\":\"bar\"}", rows.get(1).getValue());
}
@Test
public void view_result_with_doc_field() throws Exception {
ViewResult result = readResult("impl/view_result_with_included_docs.json");
assertEquals(2, result.getSize());
List<ViewResult.Row> rows = result.getRows();
assertEquals("doc_id1", rows.get(0).getDocAsNode().get("_id").textValue());
assertEquals("doc_id2", rows.get(1).getDocAsNode().get("_id").textValue());
}
@Test
public void complex_key_view_result() throws Exception {
ViewResult result = readResult("impl/complex_key_view_result.json");
assertEquals(2, result.getSize());
List<ViewResult.Row> rows = result.getRows();
String expectedKey = "[1337,\"key\"]";
assertEquals(expectedKey, rows.get(0).getKey());
assertEquals(expectedKey, rows.get(1).getKey());
}
@Test(expected = ViewResultException.class)
public void view_result_with_error_row() throws Exception {
readResult("impl/view_result_with_error.json");
}
@Test
public void error_field_in_result_docment_should_not_cause_exception() throws Exception {
ViewResult result = null;
try {
result = readResult("impl/view_result_with_nested_error.json");
} catch (ViewResultException e) {
fail("nested error field should cause ViewResultException");
}
assertEquals(2, result.getSize());
}
@Test
public void int_update_seq_view_result() throws Exception {
ViewResult result = readResult("impl/view_result_with_int_update_seq.json");
assertTrue(result.isUpdateSeqNumeric());
assertEquals(1234, result.getUpdateSeq());
assertEquals("1234", result.getUpdateSeqAsString());
}
@Test
public void string_update_seq_view_result() throws Exception {
ViewResult result = readResult("impl/view_result_with_string_update_seq.json");
assertFalse(result.isUpdateSeqNumeric());
assertEquals("1234-abc", result.getUpdateSeqAsString());
}
private ViewResult readResult(String path) throws Exception {
InputStream resourceAsStream = null;
try {
resourceAsStream = getClass().getResourceAsStream(path);
return new ViewResult(om.readTree(resourceAsStream), false);
} finally {
IOUtils.closeQuietly(resourceAsStream);
}
}
}